2014-04-14 15:46:17 +02:00
|
|
|
Crystal
|
2014-04-14 14:51:44 +02:00
|
|
|
=======
|
|
|
|
|
2014-04-27 21:19:32 +02:00
|
|
|
Crystal is about native code generation in and of ruby. In is done.
|
2014-04-14 15:46:17 +02:00
|
|
|
|
2014-04-16 11:45:36 +02:00
|
|
|
Step 1
|
|
|
|
------
|
|
|
|
|
2014-04-27 21:19:32 +02:00
|
|
|
Produce binary that represents code.
|
|
|
|
Traditionally called assembling, but there is no need for an external file representation.
|
2014-04-16 11:45:36 +02:00
|
|
|
|
|
|
|
Ie only in ruby code do i want to create machine code.
|
|
|
|
|
2014-04-27 21:19:32 +02:00
|
|
|
Most instructions are in fact assembling correctly. Meaning i have tests, and i can use objbump to verify the correct assembler code is disasembled
|
|
|
|
|
|
|
|
I even polished the dsl an so (from the tests), this is a valid hello world:
|
|
|
|
|
|
|
|
hello = "Hello World\n"
|
|
|
|
@program.main do
|
|
|
|
mov r7, 4 # 4 == write
|
|
|
|
mov r0 , 1 # stdout
|
|
|
|
add r1 , pc , hello # address of "hello World"
|
|
|
|
mov r2 , hello.length
|
|
|
|
swi 0 #software interupt, ie kernel syscall
|
|
|
|
mov r7, 1 # 1 == exit
|
|
|
|
swi 0
|
|
|
|
end
|
|
|
|
write(7 + hello.length/4 + 1 , 'hello')
|
2014-04-16 11:45:36 +02:00
|
|
|
|
|
|
|
Step 2
|
|
|
|
------
|
|
|
|
|
2014-04-21 16:27:05 +02:00
|
|
|
Package the code into an executable. Run that and verify it's output. But full elf support (including externs) is eluding me for now.
|
2014-04-16 11:45:36 +02:00
|
|
|
|
2014-04-21 16:27:05 +02:00
|
|
|
Still, this has proven to be a good review point for the arcitecture and means no libc for now.
|
|
|
|
Full rationale on the web (pages rep for now), but it means starting an extra step
|
|
|
|
|
2014-04-27 21:19:32 +02:00
|
|
|
Above Hello World can ne linked and run. And will say its thing.
|
|
|
|
|
2014-04-21 16:27:05 +02:00
|
|
|
Step 2.1
|
|
|
|
--------
|
|
|
|
|
2014-04-27 21:19:32 +02:00
|
|
|
Start implementing syscalls and add the functionality we actually need from c (basic io only really)
|
2014-04-16 11:45:36 +02:00
|
|
|
|
|
|
|
Step 3
|
|
|
|
-------
|
|
|
|
|
|
|
|
Start parsing some simple code. Using Parslet.
|
|
|
|
|
2014-04-27 21:19:32 +02:00
|
|
|
This is where it is at. Simple things transform nicely with parslet.
|
|
|
|
|
|
|
|
But the glue is eluding me.
|
|
|
|
|
2014-04-16 11:45:36 +02:00
|
|
|
Get the parse - compile - execute -verify cycle going.
|
|
|
|
|
|
|
|
Step 4
|
|
|
|
-------
|
|
|
|
|
|
|
|
Implement function calling to modularise.
|
|
|
|
Implement a way to call libc
|
|
|
|
|
|
|
|
Step 5
|
|
|
|
------
|
|
|
|
|
|
|
|
Implement classes, implement Core library of arrays/hash
|
|
|
|
|
|
|
|
Step 6
|
|
|
|
------
|
|
|
|
|
|
|
|
Implement Blocks
|
|
|
|
|
|
|
|
Step 7
|
|
|
|
------
|
|
|
|
|
|
|
|
Implement Exceptions
|
|
|
|
|
|
|
|
Step 8
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
|
|
Celebrate New year 2020
|
|
|
|
|
|
|
|
|
2014-04-14 15:46:17 +02:00
|
|
|
|
|
|
|
Contributing to crystal
|
|
|
|
-----------------------
|
|
|
|
|
2014-04-27 21:19:32 +02:00
|
|
|
Probably best to talk to me, if it's not a typo or so.
|
|
|
|
|
|
|
|
I do have a todo, for the adventurous.
|
|
|
|
|
|
|
|
Fork and create a branch before sending pulls.
|
2014-04-14 15:46:17 +02:00
|
|
|
|
|
|
|
== Copyright
|
|
|
|
|
|
|
|
Copyright (c) 2014 Torsten Ruger. See LICENSE.txt for
|
|
|
|
further details.
|
|
|
|
|