Selang: an Smart Contract Programming Language for Ethereum: Introduction
After writing gelex (generic lexer), geast (generic Abstract Syntax Tree) and gepars (generic parser), using JavaScript as implementation language, I started to use these projects to design and build a simple programming language compiler: selang. As usual, I’m using TDD (Test-Driven Development) as code workflow. It helps me to follow KISS (keep-it-simple-stuped), baby steps, and emergent design.
The target of compilation is the Ethereum Virtual Machine. The process of compilation is:
Current implementation is still incomplete, but a sample with code, compilation, deploy and invocation is here.
The code of the simple contract is
contract Counter {
uint counter;
public uint getCounter() {
return counter;
}
public void increment() {
counter = counter + 1;
}
public void add(uint value) {
counter = counter + value;
}
}
You can compile the code with
node compile
And you can compile, deploy to http://localhost:8545
(usually a ganache-cli node instance), and invoke it, executing:
node deploy
The only type supported is uint
(unsigned 32 bytes integer). Next steps:
- Support for other numeric types
- Support for static and dynamic arrays (a bit challenging, memory management with bytecodes)
- Support for strings (another challenge: using keccak256 hash functions to allocate dynamically the string in 32-bytes storage cells)
- Constructor code (it’s code that is used only once, and should be compiled in different ways)
- Inheritance
Related posts:
Angel “Java” Lopez
https://github.com/ajlopez
https://twitter.com/ajlopez