Планы
Куда движется «Глагол». Ниже — ближайшие большие возможности; русские имена для них подобраны намеренно (язык культурный, англицизмам в поверхности не место).
Ближайшие большие возможности
Статические типы (статическая типизация)первый шаг готов
Уже работает. Типы необязательны: не написал — язык выведет сам (что 5 —
число, а "привет" — строка). Хочешь подсказать явно — припиши тип словом типа
(число типа Число), а составные типы пишутся по-русски, родительным падежом:
список чисел, отображение из имени в владельца. Строгость проверки
настраивается: от мягких предупреждений для новичка (программа всё равно запускается) до жёсткой
проверки, где несоответствие типов — ошибка и запуск останавливается.
Дальше. Сквозной вывод типов по всей программе и настоящая оптимизация: значения перестают «упаковываться» в объекты (unboxed), арифметика и циклы идут напрямую — программа работает быстрее и ест меньше памяти. Это особенно важно для «железа», где без точных типов не собрать компактный и быстрый код.
Разные платформы (один код — много целей)в планах
Один и тот же код на «Глаголе» — под разные «железки» и среды. Сейчас цель одна: байт-код JVM (уже работает, два бэкенда — истолкователь и компилятор дают одинаковый результат). Впереди:
- Российские процессоры — Эльбрус и Байкал (стратегическая цель проекта);
- Нативный машинный код — без виртуальной машины, для скорости и встраивания;
- Мост в Python — чтобы дотянуться до его библиотек.
Обобщённые типы (обобщения)в планах
«Список чего угодно», «пара любых», типобезопасные хранилища — без дублирования кода.
Родные имена для них уже есть в аннотациях типов (список чисел,
отображение из имени в владельца); обобщения дадут это по-настоящему — одна реализация,
проверенная для любого наполнения, для собственных типов «Глагола».
Мост в браузер (JS / WebAssembly)в планах
Сейчас «Глагол» живёт на сервере, а фронтенд страниц — на JavaScript. Впереди — «Глагол» и в браузере: код компилируется в JavaScript или WebAssembly и работает прямо на странице, без сервера. Цель — писать и заднюю, и переднюю часть приложения на одном языке, по-русски.
Работа с текстом (строки и образцы)в планах
Уже есть основа — длина строки, доступ к символам, разбиение на слова: частотный анализ текста
пишется одной русской фразой (мода слов текста — самое частое слово). Впереди — полный
набор: найти и заменить кусок текста, подстрока, смена регистра, разрез по любому
разделителю, сравнение строк по алфавиту (сортировка слов).
И отдельно — поиск по образцу. В других языках образцы записывают загадочными сокращениями
(\d{3}-\d{4} означает «три цифры, дефис, четыре цифры»), в которые даже опытные
программисты каждый раз лезут в справочник. Задумка «Глагола» — свой понятный русский язык
образцов: цифра трижды, потом дефис, потом цифра четырежды — ясно и начинающему.
Точные числа (дроби и большие числа)в планах
Сейчас числа целые, а деление отбрасывает остаток — среднее из 33 на 6 даёт 5, а не
5,5. Впереди — точная арифметика: настоящие дроби и рациональные числа
(5,5 — это ровно 11/2, без потерь), большие числа без переполнения,
и работа с бесконечными числовыми рядами «до нужной точности».
Алгебраические структуры (комплексные, кватернионы, поля)частично готово
Уже сейчас можно объявить свою математическую структуру — кольцо, поле или тело — и получить
операторы + − × ÷ над её значениями: так в языке живут комплексные числа и
конечные поля GF(p) как обычные библиотеки, а не как правка ядра. Впереди — расширенная
поддержка: объявление собственных классов структур, кватернионы и матрицы,
группы и алгебры над полем, а также запись комплексного числа привычным 3+4i.
Что уже есть
Записи и алгебраические типы, коллекции (списки, словари, множества, пары) и
потоковый конвейер в одну русскую фразу (сумма квадратов чётных ряда, частотный
анализ текста), базовые операции над строками, статические типы (необязательные, с настройкой
строгости), модульность (свои подсистемы с границами, направленным экспортом и слоями),
контрактное программирование (требует/гарантирует),
функции высшего порядка (глагол — это значение, передаётся творительным падежом:
отобрази список удвоением), обработка ошибок значением
(может быть, итог: успех/сбой, а также
брось и попытка на границе с Java), свои модульные
тесты, компилятор в байт-код JVM, связка с Java/Spring: сущности, репозитории, связи, CRUD на настоящей
БД (живые примеры — Питомцы и Демо-приложение), и родная русская
поверхность без англицизмов (сущность, ключ, хранилище,
задай владельцу имя).
Дальше по-крупному
- Ленивость и бесконечные последовательности — вычислять только нужное, по мере надобности (вид глагола = ленивость); в паре с многопоточностью;
- Наблюдаемость и профилирование — видеть, как программа работает изнутри;
- Многопоточность — «лёгкие потоки» родными словами;
- Визуальная среда для начинающих — блочно-плиточный редактор и исполнитель;
- Полное демо-приложение на «Глаголе» — как рубеж зрелости связки с Java.
Планы — живые: порядок и формулировки уточняются по ходу.