Anders Schau Knatten Videos
https://github.com/janet-lang/janet/commit/70e1f3ac81eb6cc14ad8c616b5ddce615dcf0d64 |
https://en.wikipedia.org/wiki/Hexadecimal#Hexadecimal_exponential_notation
1 +0x1.0000000000000p+0000 +1.0000000000000000e+000
+0 +0x0.0000000000000p+0000 +0.0000000000000000e+000
-0 -0x0.0000000000000p+0000 -0.0000000000000000e+000
1/3 +0x1.5555555555555p-0002 +3.3333333333333331e-001
-4/7 -0x1.2492492492492p-0001 -5.7142857142857140e-001
-
How to find the Git commit that introduce a string in any branch
git log -S <string> --source --all
-
How to find the commit in which a given file was added?
git log --diff-filter=A -- foo.js
initially added as thoughts.txt
renamed thoughts.txt to thoughts.md
ultimate removal
Like all programmers, DSL users deserve proper abstractions, that is, constructs that do not expose the underlying, reused components. In other words, host language details should not leak into uses of the DSL, including in error messages. Racket’s syntactic abstraction capabilities builds on the innovations of its Scheme and Lisp roots, but these predecessors never cared about writing true abstractions. At best, Lisp and Scheme programmers write low-level validation code that clutters the implementation; more commonly, validation is omitted, leaving Lisp and Scheme macros that resemble naive rewrite rules that do not distinguish the DSL from the host language. Racket helps the creation of robust linguistic abstractions with a declarative DSL for writing syntax transformers [Culpepper 2012]. Instead of low-level validation code, programmers write high-level specifications, which is compiled to produce error messages in terms of the surface language.
issues
- how to handle matching macroexpansions... identifiers in expansions typically vary each time an expansion is performed. there doesn't appear to be a way to "reset" things such that specific identifiers are used.
- how to handle checking for certain numeric values like floating point...
expressing an exact value for an expected value seems non-trivial /
impractical not too infrequently, e.g.
(= 0.3 (+ 0.1 0.2))
isfalse
- how to handle
(def ...)
,(var ...)
, etc.... the code transformation step could have an initial phase that
- want to be able to match macroexpanded code but identifiers make this problematic?
(macex '(seq [i :range [0 2]] i))
# =>
~(do
(def _00000Z @[])
(do
(var _000010 0)