Skip to content

Instantly share code, notes, and snippets.

@zenparsing
zenparsing / hex-to-sorted-raw-encoding.rb
Created May 18, 2020 16:23
Hex to sorted raw encoding in Ruby
hex_values = ['626f6f74', '72616365', '626c6168', '6f6f7073']
packed_list = hex_values.map { |item| [item].pack('H*') }.sort().join()
@zenparsing
zenparsing / slot-map.js
Created January 6, 2020 00:41
SlotMap from private fields
/*
A map class, implemented with private slots, which has the following properties:
- The presence of a mapping k => v in a SlotMap does not by itself make k or v reachable
- For each mapping k => v in a SlotMap m (whether m is reachable or not), if k is reachable then v is reachable
*/
const DELETED = {};
@zenparsing
zenparsing / a.js
Created February 1, 2019 18:50
Built-time macros strawman
import { deprecated } from './macros/deprecated.js';
// Using Rust-like syntax only to make it clear these
// are macros and not "decorators"
#[deprecated]
function dontUseMeAnymore() {
eval('You wrote a bad song, Petey!');
}
@zenparsing
zenparsing / Explainer.md
Last active July 1, 2019 15:05
Symbol names

Symbol Literals

The form @identifierName is a symbol literal. Within any single module or script, two identitical symbol literals refer to the same symbol. Two identical symbol literals in separate modules or scripts refer to different symbols. A symbol literal may appear as a propery name or as a primary expression.

When a symbol literal appears as a primary expression, it is shorthand for this.@identifierName.

When a symbol literal appears as a property name, the corresponding symbol is used as the property key during evaluation.

@zenparsing
zenparsing / observable-take-random-n.js
Created January 31, 2018 15:32
Observable: Take a random number of integers
function* range(from, to) {
for (let i = from; i <= to; ++i) {
yield i;
}
}
function take(source, n) {
if (n <= 0) {
return Observable.from([]);
}
@zenparsing
zenparsing / combinators-with-async-generators.js
Created April 8, 2016 20:57
Combinators with Async Generators
function once(el, event) {
return new Promise((resolve, reject) => {
const handler = e => {
resolve(e);
el.removeEventListener(event, handler);
};
el.addEventListener(event, handler);
});
};
@zenparsing
zenparsing / CustomEventHub.js
Last active February 22, 2016 02:02
A simple custom event hub for simple DOM apps
let CustomEvent = window.CustomEvent;
if (typeof CustomEvent !== "function") {
// Internet Explorer
CustomEvent = function(name, options = {}) {
let {
bubbles = false,
cancelable = false,
detail
} = options;
@zenparsing
zenparsing / observable-to-async-iterator.js
Last active July 7, 2022 12:43
Observable to Async Iterator
Observable.prototype[Symbol.asyncIterator] = async function*() {
function promiseCapability() {
x = {};
x.promise = new Promise((a, b) => {
x.resolve = a;
x.reject = b;
});
return x;
}
@zenparsing
zenparsing / node-module-lookup.md
Last active November 9, 2021 15:50
Node Module Lookup Rules

ES6 Module Loading in Node.js

Guiding Principles

  • The solution must be 100% backward-compatible.
  • In the far future, developers should be able to write Node programs and libraries without knowledge of the CommonJS module system.
  • Module resolution rules should be reasonably compatible with the module resolution rules used by browsers.
  • The ability to import a legacy package is important for adoption.

Design Summary

@zenparsing
zenparsing / combinators-with-implicit-cancel-tokens.js
Last active February 9, 2016 18:34
Promise-Observable Combinators with Implicit Cancel Tokens
function takeUntil(control) {
return new Observable(next => new Promise((resolve, reject) => {
this.forEach(next).then(resolve, reject);
control.forEach(resolve).catch(reject);
}));
}
function switch() {