الأحد، 24 أبريل 2022
Show HN: I'm making a dynamic language in Rust https://ift.tt/JIxRljO
Show HN: I'm making a dynamic language in Rust https://ift.tt/lfAdGk3 An implementation of a dynamic programming language in Rust. Includes: Parser/Compiler, REPL, Virtual Machine, Bytecode Disassembler This started out as a learning project to teach myself Rust. It has grown into a decently substantial piece of software and I've learned quite a bit in the process! Some neat things: + A garbage collector that can store dynamically sized types without any double-indirection (i.e. I have my own Box implementation with manual alloc/dealloc) + The smart pointer used to reference GCed data is a thin pointer. The ptr metadata needed for DSTs is stored in the GC allocation itself, so that the GC smart pointer is just a single usize wide. This allows me to keep the core value enum Variant down to 16 bytes (8 bytes for data, the enum discriminant, and some padding). + The GC also supports weak references! + Statically dispatched type object model using a newtype wrapper and Rust's declarative macros. Ok, what that means is that I have a MetaObject trait that I can use to easily add new data types and define the behavior for specific types. Similar idea to Python's PyTypeObject though very different in implementation. However, I don't resort to dynamic dispatch or trait objects despite working with dynamically type data. Instead, I have a newtype wrapper over the core value enum Variant that statically dispatches to each of the enum branches! And then a few macros that minimize the boilerplate required if I want to add a new branch to Variant or a new method to MetaObject (just a single line in each case). + Different string representations! This was inspired by the flexstr crate. Strings that are short enough to fit inside a Variant are "inlined" directly in the value. Longer strings are either GCed or interned in a thread-local string table. All identifiers are interned. + An efficient implementation of closures inspired by Lua's upvalues. The language is still pretty WIP. I'm planning to add an import system, a small standard library, and a few other things (Yes, the name might not be the best, being also used by a well-known ReST docs generator, I'll take suggestions. I do like the name though, both as a reference to the mythological creature and the cat :D) April 25, 2022 at 02:46AM
الاشتراك في:
تعليقات الرسالة (Atom)
������ �����
خدمات طبيه https://www.cut-titles.com/Y4ZR
-
https://ift.tt/85N2Xo7 via /r/aww https://ift.tt/QZNBPa0
-
https://ift.tt/3arFSCM via /r/aww https://ift.tt/3mAq3w2
-
Show HN: Nango, a Django extension providing SPA-like features https://ift.tt/qVsNBZw February 13, 2022 at 02:24AM
-
https://ift.tt/T7LG1sg via /r/aww https://ift.tt/TNwxeKZ
-
Show HN: I made a steganography program https://ift.tt/2PlgB1d August 4, 2020 at 02:54PM
-
Show HN: Honda Civic Infotainment Reverse-Engineering I own a 2021 Honda Civic and have been annoyed by the lack of public documentation/hac...
-
Show HN: DB-GPT, an LLM tool for database https://ift.tt/JYdVuc6 May 23, 2023 at 04:40AM
-
The Future of Slow Streets By Eillie Anzilotti Over the past two years, Slow Streets have shown how simple designs that prioritize people ...
-
Show HN: I created a stencil-sharing platform for UX designers using Linux https://ift.tt/EBgSQeY May 14, 2022 at 08:50PM
ليست هناك تعليقات:
إرسال تعليق