В общем пришла идея для повышения скила написать свой яп, основные особенности которого будут:
- data class как в kotlin;
- multimethod как в clojure;
- синтаксис как в python;
- модули как в python;
- pre и post проверки как в clojure;
- статическая типизация ближе к ml;
- не lisp;
- макросы на уровне ast;
- threading/pipe оператор как в ml;
- pattern matching как в scala;
- null safety как в kotlin.
Пример кода:
from species import Bug
let Animal = class (name: String, age: Int):
pre (name, age):
name != "" and 0 <= age < 100
let sayName = method (animal: T) -> String:
type(T)
sayName Animal (animal):
pre (animal):
animal.age > 10
post (result):
result |> length < 100
"My name is ${animal.name}"
sayName Bug (bug):
"Nope!"
let cow = Animal("Emma", 26)
sayName(cow) => "My name is Emma"
let bug = Bug("Jimmy")
sayName(bug) => "Nope!"
let test = method (x: Int, y: Int) -> Int:
x > y
test true (x, y):
x + y
test false (x, y):
x - y
test(10, 20) => -10
test(20, 10) => 30
l
let fn = (a: Int, b: Int) -> Int:
a * b
fn(2, 3) => 6
И я столкнулся с отсутствием нужных знаний. Кто что посоветует почитать и посмотреть по этой теме?