https://github.com/microsoft/BosqueLanguage
Основные фичи:
- GC в виде счетчика ссылок, ага
- immutable
- нет циклов, только функциональщина
- дженерики, в том числе variadic
- sum types/adt
- синтаксически, смесь C++, Rust, Swift и OCaml, но страшнее
- optional - часть языка, ака оператор
?
- рекурсия должна быть явно объявлена через ключевое слово
recursive
- трансплитер написан на typescript и выплёвывает C++ (но это не точно)
- они ещё используют Z3, но не ясно как именно
Пример:
entity Person {
field name: String;
}
function foo(arg?: {f: Int, n?: String} | String | Person): String {
if(arg == none) {
return "Blank";
}
else {
return switch(arg) {
type Record => arg.n ?| "Blank"
type String => arg
type Person => arg.name
};
}
}
foo() //"Blank"
foo(none) //Type error - none not allowed
foo("Bob") //Bob
foo(Person@{name="Bob"}) //Bob
foo({f=5}) //"Blank"
foo({f=1, n="Bob"}) //"Bob"
foo({g=1, n="Bob"}) //Type error - Missing f property