- PVSM.RU - https://www.pvsm.ru -
Задумывались ли вы, сколько раз при написании кода хотелось:
Сократить избыточные конструкции?
Улучшить читаемость "запутанного" места?
Убрать архаичные элементы грамматики?
В этой статье я поделюсь результатами своего исследования по разработке синтаксиса для языка Honey, основанного на трёх ключевых принципах. Для парсера использовался генератор LALR(1), что наложило определённые ограничения на дизайн.
"Краткость — сестра таланта" — этот принцип стал нашим главным ориентиром.
Сокращение ключевых слов
Умеренные сокращения экономят время без потери смысла:
function → fn
namespace → space
composite (аналог struct) → type
Интуитивные коллекции
Заменяем "скобочный ад" на лаконичную нотацию:
(: <int>*)* <type>
: — маркер коллекции
Необязательные числа (<int>*) — размерности (например, :3 для массива из 3 элементов)
Последовательность двоеточий определяет вложенность: :: → двумерный массив
Тип элемента указывается в конце: :3 String
Доступ к элементам
Унифицированный оператор : для индексов и ключей:
strings:2 // Третий элемент массива (индексация с 0)
ages:"Tom" // Значение по ключу "Tom" в словаре
Как часто во время написания кода вы задумываетесь над тем, что в каком-то месте можно было конструкцию сократить, где-то код невозможно сделать читабельным, или какой-то элемент грамматики — это вообще устаревшее наследство? Данная статья повествует о том, как я провёл небольшое исследование в диванных условиях для того, чтобы разработать идеальный синтаксис для собственного языка программирования. Статью я разбил на три этапа, соответствующих трём принципам, которым я следовал во время разработки синтаксиса. Так же я работал с учётом возможности реализовать парсер на базе генератора LALR(1), что сильно связывает руки по сравнению с рукописным вариантом.
Код должен читаться как предложение на человеческом языке.
Префиксные типы и "лёгкие" блоки
Типы объявляются перед именем: String text
Фигурные скобки обязательны только для многострочных блоков
Пример на псевдокоде:
int counter = 100
while counter > 0 {
puts($"{101 - counter}")
}
string text = Input()
If text.contains("б****") puts("Не материтесь!")
Читается почти как обычный текст, сохраняя техническую точность.
Убираем синтаксический мусор, который не несёт смысловой нагрузки.
Принцип минимализма:
Отказ от обязательных разделителей (например, точек с запятой)
Чёткие границы конструкций через контекстную грамматику
Ошибки отлавливаются уже на этапе парсинга: некорректный код просто не разберётся
Пример на Honey:
int main() {
:3 string names = ["Alice", "Bob", "Charlie"]
puts(names:1) // Выведет "Bob"
if names:0 == "Alice" puts("Привет, Алиса!")
}
Никаких лишних скобок, точек с запятой или закрывающих тегов.
Мы создали синтаксис, где:
Операции занимают на 30-40% меньше символов
Код интуитивно понятен даже новичкам
Грамотно расставленные ограничения предотвращают "мусорный" код
Ключевая мысль: Лаконичность ≠ сложность. Чем меньше "воды" — тем выше плотность смысла.
Синтаксис Honey — радикален, но целенаправлен. Он заточен под конкретные задачи:
Минималистичные исходные текста
Чёткую структуру данных
Быстрое чтение кода
Проект открыт для развития:
Telegram-канал Hexa [1] (ОС HexaOS + язык Honey)
P.S. Статья намеренно короткая — мы ценим ваше время. Примеры кода [2] и документация [3] доступны в репозитории [4] проекта.
Автор: vi_is_raven
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/yazy-k-programmirovaniya/423206
Ссылки в тексте:
[1] Telegram-канал Hexa: https://t.me/hexasoft_tg
[2] Примеры кода: https://tvoygit.ru/vi_is_lonely/pyhoney/src/branch/master/test
[3] документация: https://tvoygit.ru/vi_is_lonely/pyhoney/src/branch/master/docs/syntax.md
[4] репозитории: https://tvoygit.ru/vi_is_lonely/pyhoney
[5] Источник: https://habr.com/ru/articles/920544/?utm_campaign=920544&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.