Coder Social home page Coder Social logo

Accessing tuples [] about janet HOT 8 CLOSED

janet-lang avatar janet-lang commented on August 25, 2024
Accessing tuples []

from janet.

Comments (8)

gavlooth avatar gavlooth commented on August 25, 2024

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.

gavlooth avatar gavlooth commented on August 25, 2024

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.

bakpakin avatar bakpakin commented on August 25, 2024

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.

gavlooth avatar gavlooth commented on August 25, 2024

I see, so it expects to call a function. Then maybe you could consider @[] ~ @()

from janet.

bakpakin avatar bakpakin commented on August 25, 2024

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.

gavlooth avatar gavlooth commented on August 25, 2024

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.

bakpakin avatar bakpakin commented on August 25, 2024

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.

gavlooth avatar gavlooth commented on August 25, 2024

Thanks :)

from janet.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.