Drahflow / Elymas
Licence: gpl-3.0
A programming language I can like. Unholy and full of magic.
Stars: ✭ 166
Programming Languages
perl
6916 projects
Labels
Projects that are alternatives of or similar to Elymas
Lua Vermelha
A Lua implementation with an Eclipse OMR based JIT compiler
Stars: ✭ 91 (-45.18%)
Mutual labels: jit
Yolov5 Rt Stack
Yet another yolov5, with its runtime stack for libtorch, onnx, tvm and specialized accelerators. You like torchvision's retinanet? You like yolov5? You love yolort!
Stars: ✭ 107 (-35.54%)
Mutual labels: jit
Uefi Jitfuck
A JIT compiler for Brainfuck running on x86_64 UEFI
Stars: ✭ 83 (-50%)
Mutual labels: jit
Diojit
Fully compatible CPython jit compiler. Optimising Dynamic, Interpreted, and Object-oriented(DIO) programs.
Stars: ✭ 95 (-42.77%)
Mutual labels: jit
Cppadcodegen
Source Code Generation for Automatic Differentiation using Operator Overloading
Stars: ✭ 77 (-53.61%)
Mutual labels: jit
Mono
Mono open source ECMA CLI, C# and .NET implementation.
Stars: ✭ 9,606 (+5686.75%)
Mutual labels: jit
Nx
Multi-dimensional arrays (tensors) and numerical definitions for Elixir
Stars: ✭ 1,133 (+582.53%)
Mutual labels: jit
Dotnetbook
.NET Platform Architecture book (English, Chinese, Russian)
Stars: ✭ 1,763 (+962.05%)
Mutual labels: jit
Evoasm.rb
An AIMGP (Automatic Induction of Machine code by Genetic Programming) engine
Stars: ✭ 91 (-45.18%)
Mutual labels: jit
Jitfromscratch
Example project from my talks in the LLVM Social Berlin and C++ User Group
Stars: ✭ 158 (-4.82%)
Mutual labels: jit
Nanojit
NanoJIT is a small, cross-platform C++ library that emits machine code.
Stars: ✭ 101 (-39.16%)
Mutual labels: jit
Just because I'm not following the true path, doesn't mean I can't get it to work.
Examples
A programming language...
1 dump
# 0000000000000001
... stack based programming language ...
1 2 add dump
# 0000000000000003
... with array support ...
[ 1 2 ] dump
# [
# 0000000000000001
# 0000000000000002
# ]
... did I mention array support ...
2 [ 1 2 ] add dump
[ 0 1 ] [ 1 2 ] add dump
# [
# 0000000000000003
# 0000000000000004
# ]
# [
# 0000000000000001
# 0000000000000003
# ]
... user definable functions ...
{ 2 add } /addTwo deffst
1 addTwo dump
# 0000000000000003
... variables ...
2 ==two
1 two add dump
# 0000000000000003
... function objects ...
{ { 2 add } } /returnAddTwo deffst
returnAddTwo /addTwo deffst
1 addTwo dump
# 0000000000000003
... closures ...
{ 2 ==two { two add } } /returnAddTwo deffst
returnAddTwo /addTwo deffst
1 addTwo dump
# 0000000000000003
... structured data types ...
<
1 ==one
2 ==two
> ==struct
struct keys dump
struct .two dump
# [
# "one"
# "two"
# ]
# 0000000000000002
... and more.
"Elymas" { "(..)(.*)" regex } |dump loop
# "El"
# "ym"
# "as"
Technical Pecularities
- no runtime interpreter, executes real assembly
- same binary both interpretes and compiles
- freeze arbitrary program states to ELF-binaries
- self hosted via
{ "/dev/stdin" include }' "interpreter" sys .freeze
- yes, this works and generates a stand-alone interpreter/compiler
- bootstraps from perl
- no perl left in final binaries
- macro support
- names carry information about being constant or constantly having the same type each resolution
- just-too-late opcode optimization
- so at least one resolution is guaranteed to have taken place
- can declare names any time before first usage
- assembly optimizer realized as a loadable library
- yes, it does optimize itself while running
- regex-engine written in the language itself
- source includes an assembler for 64bit x86
Features
- non-braindead stack manipulation, e.g.
-021
specifies "top element, then third, then second" - concatenative language syntax, e.g.
data modifyOne modifyTwo modifyThree
- trivial to build DSLs
- compact code
- more readable than APL though
- unless you don't want it to be
- acceptable performance (and you can always switch to assembly if necessary)
- I actually use it for non-trivial projects
Documentation
Please see the tutorial for an introduction and further documentation.
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].