Take some notes clj->janet
This commit is contained in:
parent
2cbc39029c
commit
153c5a358e
42
clj_to_janet.md
Normal file
42
clj_to_janet.md
Normal file
|
@ -0,0 +1,42 @@
|
|||
# From Clojure to Janet
|
||||
## How to convert files
|
||||
|
||||
### Comments
|
||||
`% s ; r # <esc>`
|
||||
|
||||
|
||||
### called keyword property access
|
||||
Use a macro:
|
||||
- Select `\ \( : ret <esc>`
|
||||
- Record the macro: `Q n <esc> v e c get <esc> e e a <space> <esc> p <esc> Q`
|
||||
- Then just `q` until you've changed everything
|
||||
|
||||
### Chars don't exist
|
||||
- \char -> "char", e.g.
|
||||
- \newline -> "\n", etc.
|
||||
- \a -> "a"
|
||||
|
||||
### Use mutable arrays and tables
|
||||
Where data structures are mutable, add `@`s.
|
||||
|
||||
### Sets & tables
|
||||
Sets don't exist in Janet. Use tables with values set to `true`.
|
||||
|
||||
### Strings -> number literals
|
||||
- Clj uses `edn/read-string`; Janet uses `parse-all`
|
||||
|
||||
### `loop` -> `defn recur`
|
||||
- Clj's `loop` is very different from Janet's `loop`
|
||||
- As a quick and dirty workaround, change it to an interior recursive function
|
||||
- Janet has tail calls, so this is nearly as efficient (paying the overhead for creating the function)
|
||||
- An optimization is to pull out these functions and declare them at the toplevel
|
||||
|
||||
### current-char
|
||||
|
||||
|
||||
### Straight replacements:
|
||||
- nth -> get
|
||||
- assoc -> put
|
||||
- conj -> array/push
|
||||
- str -> string
|
||||
- substr -> slice
|
Loading…
Reference in New Issue
Block a user