Дорожная карта
Что идёт дальше
Версии, к которым стремится проект, начиная с 0.1.5, и для чего нужна каждая из них. Это план — форма работы, которую проект задал себе, а не расписание.
Никаких дат, и ничего отсюда нельзя скачать. Каждая строка ниже — выбранное проектом направление; ни одна из них не обязательство по времени, и ни одна не функция, которой можно пользоваться сегодня. Установить можно последний релиз, а что в нём, — на странице истории релизов.
Ближайшая веха: 0.1.5 Alpha 1
Следующее в списке — не функция. Его цель заявлена как нулевая тишина: каждое утверждение, которое делает язык, получает либо вердикт, либо проверку, которая могла бы доказать его неправоту, — ничто не описывается без чего-то, что могло бы опровергнуть это описание.
На входе — обзор того, что хорошо делают другие языки, — взятый из C, Rust, Java и Python, — а цель в том, чтобы каждая его строка оказалась решённой. Разрешены три вердикта: скопировать механизм; скопировать намерение, но не форму; или отказаться напрямую, назвав, в какое противоречие это упирается и чью сторону выбрали. Три формулировки считаются состояниями провала: «не решено», «надо обсудить» и «смотря по обстоятельствам» — строка, кончающаяся одной из них, не решена, а отложена, а правило такое, что отсрочка считается провалом.
Некоторые из этих утверждений не могут сосуществовать, и полезная часть упражнения — быть вынужденным сказать, от какого из них отказываются и почему. Три из противоречий стоит назвать, потому что именно на них этот язык и стоит:
Насколько толста абстрактная машина
C достаточно тонок, чтобы допускать неопределённое поведение, и именно эта тонкость покупает ему скорость и переносимость — язык не предполагает ничего. Rust достаточно толст, чтобы решать заимствование во время компиляции, и именно эта толщина покупает ему доказательства — язык предполагает очень много. Оба нельзя максимизировать одновременно.
Где живёт разум
Java помещает его в среду выполнения и покупает на это пиковую пропускную способность и более простое сопровождение. Причина существования Loment — программа без среды выполнения и с предсказуемым поведением. Поместить сборщик в ядро — значит отдать то, ради чего этот язык существует — поэтому возврат памяти — это многоуровневый выбор, а не политика.
Когда разрешается имя
Python разрешает во время выполнения: без церемоний, пишешь быстро. Java разрешает во время компиляции: надёжные инструменты и рефакторинг. Один и тот же импорт не может быть проверен во время компиляции и не быть им.
Ни одно из этих трёх не решается находкой ловкой середины. Каждое решается выбором стороны и записью того, чего стоила другая сторона.
Что идёт после
0.1.5 — возврат памяти становится тем, на что можно положиться
Лестница возврата памяти — то, ради чего нужна 0.1.5: момент, когда оно перестаёт быть проектом и становится свойством, на которое программа может рассчитывать. Большая часть лестницы уже построена — у всех четырёх ступеней есть реализации и критерии, адаптивный сборщик и поколенческая половина оба уже появились, и две реализации языка совпадают по ним побайтово. 0.1.5 добавляет то, что не является функцией: уладить это и быть в состоянии сказать, что оно гарантирует, а что нет. Сама лестница описана на её собственной странице, которая держит собственную строку состояния.
0.1.5.x — среда выполнения закончена
Измерение runtime уже существует как режим со значением по умолчанию,
и оно обязательно, а не рекомендательно: запросить ступень,
которой нужен сборщик, объявив при этом, что артефакт не несёт runtime, — это
ошибка компиляции, потому что эти двое противоречат друг другу по определению. То,
что runtime держит сегодня, — ровно та часть, которая нужна этой ступени. Эта
строка добавляет остальное.
0.1.6 — интерпретатор попадает в пакет
Второй способ запустить программу, на нижней ступени своей лестницы. Ступени
уже построены — T0–T3 живут в репозитории, у каждой свой критерий — но ни одна
из них ещё не в дистрибутиве, и choose vm по-прежнему ничего не меняет в
том, что излучает компилятор. 0.1.6 закрывает этот разрыв: интерпретатор поставляется,
а та страница ведёт собственную строку состояния.
0.1.7 — система объектов достраивается
Сегодня в языке есть структуры, перечисления, варианты которых несут одну полезную нагрузку, статически отправляемые трейты и обобщения, разрешаемые во время компиляции. Эта строка — о том, чего не хватает, а не о добавлении функции, которую никто не просил.
0.1.8 — система управления памятью достраивается
Что опирается на уровни и лестницу выше: возврат памяти становится системой, а не набором механизмов.
За пределами 0.1.8 направления всё ещё в планировании, и эта страница их не выдумает. Одно, что вне этого списка, было объявлено отдельно: собственная следующая версия менеджера пакетов, о которой объявляют в его собственном репозитории.
Как узнать, случилось ли что-нибудь из этого
Дорожная карта стоит чтения, только если её можно потом проверить, так что честнее всего сказать, где происходит проверка. Проект не держит свои планы в публичном трекере задач. Он записывает их как пронумерованные документы о проектировании в репозитории, и эти документы написаны по-китайски — о чём стоит знать прежде, чем пойдёте искать, потому что дорожная карта не там, где вы ожидали бы её найти.
Приход каждой версии — тогда дело записи, а не объявления: история релизов говорит, что вышло и когда, и каждая из страниц ниже несёт собственную строку состояния, а не описывает себя как законченную.