NOTE: REPO MOVED TO talpalang/talpa
A WIP programming language designed to be compiled into many other languages. For more information, see the OSI issue.
Currently, the language contains very few working features. When adding new features, the project follows test-driven development practices.
This roadmap is used to track the progress on the project. If you add a feature and all tests pass, tick it off below.
-
Parsing stage 1 (Parse the code into types)
- Functions
- Function keyword and body detection
fn FunctionName() {}
- Function arguments
fn foo(bar string) {}
- Function response
fn foo() string {}
- Function keyword and body detection
- Types
- Name parsing
string
,foo
,bar123
,int
,i8
- Extending types parsing
foo<bar>
or[]string
- Don't fail on these types
- Parse these types into something usable instaid of a string
- Inline types
- structs
struct{}
- arrays
[]string
- enums
enum{}
- structs
- global types
- structs
struct foo {}
- enums
enum foo {}
- custom types
type foo = []bar
- structs
- Name parsing
- Actions
- Variables
- Keyword and name
let a
,const a
- Variable type
let a: string
- assignment
let foo = "bar"
orlet foo = bar()
- Keyword and name
- Function
- default
foo()
- arguments
foo(bar, "baz")
- default
- Static actions
-
return
-
loop {}
-
while true {}
-
for foo in bar {}
-
- Variables
- Importing
- Detecting to import someting
- Validating imports
- Detect import cycles
- Propper debugging
- Error messages show file origin
- Functions
-
Parsing stage 2 verifying the data and making it more accessible
- Validating all types
- User created types
- Buildin types
- List of actions
- Make it impossible to set variable without using it
- Validating all types
-
Documentation
As the project uses test-driven development, it is important tests are run when making changes. Tests can be run by using the following commands in the command line.
# Run all tests
cargo test
# Run a specific test
cargo test -- --nocapture test_empty
# Run all tests with function in the name
cargo test function
Some design goals I think are important:
- Preferably no dependencies
- No non cargo tools required to build this project (By installing rust you should have everything to get started working on this though i might require rust nightly if needed)