Skip to content

Instantly share code, notes, and snippets.

View notriddle's full-sized avatar

Michael Howell notriddle

View GitHub Profile
@notriddle
notriddle / notriddle-rust-2020.md
Last active October 31, 2019 20:13
@notriddle's Rust 2020 wishlist, or, Rust 2021: Integration

@notriddle's Rust 2020 wishlist

or, Rust 2021: Integration

This is just a brain dump. Doing all of this is not going to happen, but all of it is stuff I know of that impacts Rust's integration with the rest of the world and eventually becoming Too Big To Fail like C++ is.

Better resources outside the Rust core team's reach

  1. Improved support for vendored, external, and non-crates.io crates. Some of it is just a matter of documenting the workarounds to allow cargo to use local git repositories in place of networked ones. Some of it is providing official, documented registry software.
  2. Improved support for third-party discussion and documentation platforms. I love Users and Internals, and I can deal with Discord, but these are platforms specifically for discussing Rust. What we need is greater presence on platforms that are dedicated to problem domains: database courses
@notriddle
notriddle / latency.txt
Created April 26, 2019 22:31 — forked from jboner/latency.txt
Latency Numbers Every Programmer Should Know
Latency Comparison Numbers (~2012)
----------------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 3,000 ns 3 us
Send 1K bytes over 1 Gbps network 10,000 ns 10 us
Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
@notriddle
notriddle / test-harness.rs
Last active December 10, 2018 19:18
Tests the old vs the new Windows argument parser for Rust, to ensure identical behavior
use std::collections::VecDeque;
use std::ffi::OsString;
use std::os::windows::ffi::OsStringExt;
use std::slice;
use std::iter;
use std::ptr;
/// Implements the Windows command-line argument parsing algorithm, described at
/// <https://docs.microsoft.com/en-us/previous-versions//17w5ykft(v=vs.85)>.
///

This is the rough implementation plan:

pick 9ae5db20d2 introduce Universe struct

We want this. =)

pick 1da0b70c57 introduce UniverseIndex into ParamEnv

Instead of adding a universe to the ParamEnv, the plan is now to add this field to the InferenceCtxt. It represents the maxixum

// https://rust-lang.org/
use std::ffi::CStr;
use std::os::raw::{c_char, c_int};
use std::slice;
use lua_sys::lua_State;
unsafe extern "C" fn runargs(l: *mut lua_State, argv: *mut *mut c_char, n: c_int) -> c_int {
// slices can use normal [] access, while pointers have to use the .offset method
// so convert the pointer to a slice, because otherwise this'll be 99% .offset(i).deref().offset(0).deref()
let args = &slice::from_raw_parts(argv, n)[1..];
let mut iter = args.iter().cloned().map(CStr::from_ptr);
@notriddle
notriddle / README.md
Last active May 6, 2023 08:24
The hub workflow

How to use hub's PAT for user accounts

$ git config --global hub.protocol https
$ cat ~/.config/hub
github.com:
- user: notriddle
  oauth_token: [CENSORED]
  protocol: https
$ cat > ~/.netrc
@notriddle
notriddle / mix_vs_cargo.md
Last active June 28, 2022 06:45
Language package managers: Elixir's mix and Rust's cargo
Action Mix Cargo
Create a project mix new [--app APP] PATH cargo new [--bin] PATH
Run your project iex -S mix / mix run --no-halt / mix phoenix.server cargo run
Get help mix help cmd cargo [cmd] --help
Build configuration mix.exs Cargo.toml
Project commands mix COMMAND N/A
Global add-on commands mix archive.install PACKAGE cargo install PACKAGE
Integrating with other languag
@notriddle
notriddle / glorw.txt
Last active April 5, 2017 16:38 — forked from saiqulhaq/glorw.txt
General list of reserved words
### General List of Reserved Words
### Stuart P. Bentley <[email protected]>, June 4, 2013
### Michael Howell <[email protected]>, April 5, 2017
## This is a general list of words you may want to consider reserving,
## in a system where users can pick any name, in a context where the
## system may use names as well. One prominent example of a system
## where this is the case would be a site that serves pages for users,
## at their username, from the site root, like
## http://twitter.com/stuartpb . In this system, you would want to
@notriddle
notriddle / pimpl.ex
Created February 17, 2017 18:32
Implement :lists.prefix for any enumerable, in Elixir
defmodule Enum2 do
@type t :: Enum.t
@doc """
If `enum` starts with `prefix`, return true. Otherwise, return false.
### Examples
iex> Enum.starts_with?([1, 2, 3], [1, 2])
@notriddle
notriddle / split.ex
Created February 16, 2017 19:05
Split a string without using regex
defmodule Split do
@moduledoc """
iex(2)> Split.split("this,is,1,way,to,do_it")
["this", "is", "1", "way", "to", "do", "it"]
"""
@spec split(bitstring) :: [bitstring]
def split(s) do
do_split(s, [], [])
|> Enum.map(&List.to_string/1)
|> Enum.map(&String.reverse/1)