Задумывались ли вы, сколько раз при написании кода хотелось:
-
Сократить избыточные конструкции?
-
Улучшить читаемость «запутанного» места?
-
Убрать архаичные элементы грамматики?
В этой статье я поделюсь результатами своего исследования по разработке синтаксиса для языка Honey, основанного на трёх ключевых принципах. Для парсера использовался генератор LALR(1), что наложило определённые ограничения на дизайн.
1. Краткость как основа
«Краткость — сестра таланта» — этот принцип стал нашим главным ориентиром.
Сокращение ключевых слов
Умеренные сокращения экономят время без потери смысла:
-
function→fn -
namespace→space -
composite(аналогstruct) →type
Интуитивные коллекции
Заменяем «скобочный ад» на лаконичную нотацию:
(: <int>*)* <type>
-
:— маркер коллекции -
Необязательные числа (
<int>*) — размерности (например,:3для массива из 3 элементов) -
Последовательность двоеточий определяет вложенность:
::→ двумерный массив -
Тип элемента указывается в конце:
:3 String
Доступ к элементам
Унифицированный оператор : для индексов и ключей:
strings:2 // Третий элемент массива (индексация с 0)
ages:"Tom" // Значение по ключу "Tom" в словаре
Как часто во время написания кода вы задумываетесь над тем, что в каком-то месте можно было конструкцию сократить, где-то код невозможно сделать читабельным, или какой-то элемент грамматики — это вообще устаревшее наследство? Данная статья повествует о том, как я провёл небольшое исследование в диванных условиях для того, чтобы разработать идеальный синтаксис для собственного языка программирования. Статью я разбил на три этапа, соответствующих трём принципам, которым я следовал во время разработки синтаксиса. Так же я работал с учётом возможности реализовать парсер на базе генератора LALR(1), что сильно связывает руки по сравнению с рукописным вариантом.
2. Естественность чтения
Код должен читаться как предложение на человеческом языке.
Префиксные типы и «лёгкие» блоки
-
Типы объявляются перед именем:
String text -
Фигурные скобки обязательны только для многострочных блоков
Пример на псевдокоде:
int counter = 100 while counter > 0 { puts($"{101 - counter}") } string text = Input() If text.contains("б****") puts("Не материтесь!")
Читается почти как обычный текст, сохраняя техническую точность.
3. Читаемость без «шума»
Убираем синтаксический мусор, который не несёт смысловой нагрузки.
Принцип минимализма:
-
Отказ от обязательных разделителей (например, точек с запятой)
-
Чёткие границы конструкций через контекстную грамматику
-
Ошибки отлавливаются уже на этапе парсинга: некорректный код просто не разберётся
Пример на Honey:
int main() { :3 string names = ["Alice", "Bob", "Charlie"] puts(names:1) // Выведет "Bob" if names:0 == "Alice" puts("Привет, Алиса!") }
Никаких лишних скобок, точек с запятой или закрывающих тегов.
Итоги
Мы создали синтаксис, где:
-
Операции занимают на 30-40% меньше символов
-
Код интуитивно понятен даже новичкам
-
Грамотно расставленные ограничения предотвращают «мусорный» код
Ключевая мысль: Лаконичность ≠ сложность. Чем меньше «воды» — тем выше плотность смысла.
Синтаксис Honey — радикален, но целенаправлен. Он заточен под конкретные задачи:
-
Минималистичные исходные текста
-
Чёткую структуру данных
-
Быстрое чтение кода
Проект открыт для развития:
Telegram-канал Hexa (ОС HexaOS + язык Honey)
P.S. Статья намеренно короткая — мы ценим ваше время. Примеры кода и документация доступны в репозитории проекта.
ссылка на оригинал статьи https://habr.com/ru/articles/920544/
Добавить комментарий