

Show HN: Solid, a scripting language with a tiny VM - chameco
https://github.com/chameco/Solid

======
zserge
Great job! I was looking for a small and simple embeddable language (smaller
than Lua) for a long time. Solid looks very promising to me.

~~~
chameco
Thanks! Quite honestly, my primary reason for making it was that I didn't like
the Lua object model and Python/Ruby/Guile are a bit inconvenient to embed.

------
theseoafs
Are there any performance benchmarks?

EDIT: The language looks pretty cool in general. I'm not a huge fan of the
recursion syntax. In particular, the `this` keyword seems to just refer to the
current function object, which is confusing since in other languages that
usually refers to the object a method belongs to. Further, the choice of
immutable lists as the default data structure is odd -- arrays would be much
more performant (and are the usual choice for scripting languages anyway).

~~~
beagle3
Given that there is no array built in type, and the closest thing (list) is a
lisp style linked list, I wouldn't expect it to be speedy in any non-trivial
benchmark (or real-world use) that requires random access.

------
smilekzs
The core seems much more interesting than the Pawn language. I'd like to see
more comparisons once this matures.

A few points:

1\. I'd like to see the FFI implemented natively (i.e. by declaring in Solid
and registering through C code/macro, instead of relying on object file
parsing). Then it'll be extremely useful in a bare-metal microcontroller
environment.

2\. Namespacing is needed -- I don't really want `parse_xxx` or `ast_node` in
my global namespace!

~~~
chameco
Yeah, the namespacing is somewhat poor, sorry about that. I'll get around to
prefixing the names at some point.

------
helloTree
Just wanted to say, kudos! I think it is essential for a language to have a
good C interface otherwise it will be insulated. However some more example
would be nice. Furthermore I think you mean "infix" in your documentation and
not "inline".

------
arthuredelstein
Very cool. I would love to see immutable, persistent data collections as
offered in Clojure.

------
cldr
Awesome work. How big is the executable?

Also, what did you not like about the Lua object model?

~~~
chameco
Without debug symbols (the default Makefile includes them), the executable is
83KB (93KB with -g), less than half the size of Lua. The shared library is a
bit larger, at 102KB.

Lua's whole table-metatable system always felt awkward to me, what with the
magic names for operators. It's really not so bad, I just didn't see any
reason to spend time learning something that felt awkward and archaic to me
when I could make something that seemed a bit cleaner.

~~~
zserge
Can VM be built separately from the compiler, so it could be used on small
MCUs?

~~~
chameco
The VM, the AST parser, and the Bison/Flex frontend are built in a layered
manner: you could (with the appropriate Makefile) build only the VM, the
VM+the AST parser, or all three. I don't currently have Makefile options for
this, but it would be pretty trivial to add.

~~~
cldr
How long did it take to write this once you had all the ideas? I looked at the
github history but they only went back 5 months and it looks like there was
already a significant amount written so I couldn't tell how far back from
there it went.

~~~
chameco
It's been about 6 months total, I think, but there were significant breaks for
school and exams.

