Mau это язык программирования уровня /b/
Наслаждайтес первоклассной смесью кириллицы и haskell-подобного синтаксиса, в отрыве от любых академических традиций и обязательств.
Особенности:
- Статическая типизация
- Статический вывод типов
- λ-выражения (однострочные/многострочные)
- Функций/процедур/методов -- нет.
- Глобальных переменных нет. Есть глобальные константы.
- Есть структуры (набор полей равных не лямбдам)
- Есть интерфейсы (набор полей равных лямбдам, т.е. набор 'типовых' выражений)
- Основные типы:
id типа | описание | пример литерала |
---|---|---|
ц16, ц32, ц64 | целые числа | -101 |
н16, н32, н64 | натуральные числа | 42 |
в32, в64 | вещественные числа | 3.1416926535898 |
строка | просто набор рун | "набо́р ру́н" |
мсв!(размер :ц64, Т :имятипа) | массив | мсв("раз", "два") |
век!(Т :имятипа) | вектор (динамический массив) | ("раз", "два", "три") |
мап!(Т1 :имятипа, Т2 :имятипа) | хэш таблица | ("раз": 1, "два": 2) |
\(Т1, ...) Тn | λ-выражение (овеществлённая функция) | \x у. x+у |
ато!(Т :имятипа) | атомик-ссылка | ато(x) |
счт!(Т :имятипа) | указатель со счётчиком | счт(x) |
унк!(Т :имятипа) | уникальный указатель | унк(x) |
пользовательский_тип | структура | Пёс(кличка: "Шарик") |
- Язык должен быть максимально простым и понятным, т.е.:
- печаталь должно быть удобно
- читать и отлаживать должно быть просто
- результирующий должен быть интуитивно понятен при беглом чтении
- Обработать определение структур
------- Объявление пользовательских типов -------
пусть Пёс (
кличка : строка
)
пусть Такса : Пёс (
вес_кг : в32
)
--- Начали перечисление 'типовых' λ-выражений ---
пусть для Пёс (
голос := \ это, х: строка..
принт(это.кличка + "говорит -- Гав!" + х);
;
)
-------- Через '::' обращение к 'типовым' λ-выражениям --------
--- Таким образом, 'а := А(); а.ф(2);' значит 'А::ф(а, 2);' ---
----- Это позволяет халявно эмулировать пространства имён -----
---------------------------------------------------------------
щенок :Пёс = Такса (кличка : "Шарик", вес_кг : 1.5);
щенок2 := щенок.как!(Такса);
щенок2.вес_кг;
щенок2.голос("Угаманись пака я тебя не покусал!");
Пёс::голос(щенок2, "Угаманись!");
- Обработать определение шаблонов
шабаш!(
статич_арг : ц32
Т1 : имятипа
Т2 : имятипа
) пусть Пара (
первый: T1
второй: Т2
)
шабаш!(Т : имятипа)
удвой : \(T)T = \ х. х + х;