Comments (8)
Trying to implementing into.
A couple of questions. Is recursively updating immutable data more expensive (computation-wise, memory-wise)
Than mutating data structures?
I am planning to implement group-by, but this will create problems with mutable data structures as they cannot be used to represent keys. Any suggestions ? wrapping them in tuples and passing them as keys would work but is not so elegant
from janet.
I also read your c code but, i havent written in c for years, and dont have any working knowlege on virtual machines, compilers etc etc. Any suggestions for good references, expect lua specifications.
from janet.
I have implemented the change that brackets and parens are equivalent, ala racket. I know this might be annoying for certain literals but it makes the syntax for mutability more consistent.
from janet.
I see, so it expects to call a function. Then maybe you could consider @[] ~ @()
from janet.
Mutable structures are more efficient, and they can be used as keys. Just because they don’t have value equality doesn’t mean they don’t have any equality semantics.
(def a @[1 2 3])
(def lookup {a :value})
(= (get lookup a) :value) #> true
from janet.
I see. what i was using is {@[1 2 3] :value}. If i wanted to implement group-by i couldn't bind each data structure to a symbol, so probably i have to wrap to an immutable data structure
from janet.
As for references for compilers, I can recommend any compiler textbook of merit, say Appel's. I think the compiler (src/compiler/compile.c) is the most confusing part of the code and can definitely be improved. It does some basic optimizations, like certain constant propagation, but there are still a lot of low hanging fruit. The compiler compiles S-exprs directly to bytecode in a single pass, similar to A-normal form.
The Lua source code or a description of the Lua bytecode is still a very useful resource. Here is a great introduction to Lua bytecode, which is quite similar to the bytecode format in dst. The entry to the bytecode interpreter is in src/core/vm.c, and it is pretty clear that majority of the code is in what is equivalent to an infinte loop with a switch statement inside (there are some optimizations for GCC, but it is much the same). The interpreter then loops over all of the bytecode instructions, which are just uint32_ts, decodes and executes the instructions. The most complicated parts are handling function calls, switching fibers, handling errors, and how closures work.
I plan to add some design docs for the project soon, which will include docs about the bytecode format.
The bytecode format should make the internals of the interpreter more accessible.
from janet.
Thanks :)
from janet.
Related Issues (20)
- `try` and `defer` break tail call optimization. HOT 4
- `(= @"update" @"update")` is `false`. HOT 3
- `ev/select` still revives fibers.... HOT 3
- option to unbundle docstrings and potential consequences HOT 8
- splicing into structs/tables HOT 2
- Disasm/asm doesn't round-trip for function with unused argument HOT 1
- eventloop/networking gets stuck on musl HOT 11
- Consider making `module/paths` a dynamic variable HOT 7
- Can it run on iOS? Thank you. HOT 3
- `os/strftime` doesn't respect environment variables. HOT 3
- Re-integrate jpm into janet HOT 49
- recent change kinda breaks lexical scope with multiple modules HOT 2
- How to switch off spork/sh/copy message? HOT 2
- `janet -c source` with missing output files should give informative error message HOT 1
- Linux event loop hanging HOT 7
- Certain PEG patterns don't match HOT 2
- Discrepancy between the website docs and behavior for the `look` peg special HOT 4
- `release-fix` Branch is 5 Commits Behind? HOT 2
- os/open fails to create a file unless it's opened read/write-only HOT 1
- Warning/error on seq with no body HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from janet.