Особенности:
- По заявлению автора, представляет собой смесь C++ и C#, с небольшими вкраплениями Rust.
- Без GC, JIT и тому подобного.
- Развивается параллельно с IDE (написана на самом beef и собственном тулките). Дизайн языка развивается с учётом удобства разработки IDE.
- Автор делает упор на удобную отладку с помощью дебаггера, а не print.
- Умеет все модные фичи: ADT, pattern matching, лямбды, дженерики, миксины, кортежи, опциональные типы и тд. Но не гарантирует null-safety.
- Поддерживает рантайм рефлексию.
- Не использует исключения. Используется тот же подход что и в Rust: Result + panic.
- Проверяет проблемы с памятью в рантайме в отладочной сборке. В релизной сборке всё как в C/C++.
- Предоставляет лёгкое взаимодействие с C/C++ кодом (не уверен в каком виде).
- Основан на
ворованномLLVM. Как будто кто-то сомневался. - Автор пилит язык последние 5 лет full-time.
Простой пример:
static Result<uint> GetMinusOne(uint i)
{
if (i == 0)
return .Err;
return .Ok(i - 1);
}
void Use()
{
/* Handle result via a switch */
switch (GetMinusOne(i))
{
case .Ok(let newVal): Console.WriteLine("Val: {}", newVal);
case .Err: Console.WriteLine("Failed");
}
/* This invokes an implicit conversion operator, which will be fatal at runtime if an error is returned */
int newVal = GetMinusOne(i);
/* Result<T> contains a special "ReturnValueDiscarded" method which is invoked to facilitate failing fatally on ignored returned errors here */
GetMinusOne(i);
}
В целом ближе к D, чем к Rust, так как содержит намного меньше гарантий.