Как стать автором
Обновить

Комментарии 28

Очень интересно и познавательно. Жду продолжения.
Кстати, возник вопрос:
Если в языке только один тип данных double, то как будут храниться, например, строки? В виде массива, в каждой ячейке которого будет ASCII код? Не слишком ли «жирно» по памяти выходит?
Это же ИГРУШЕЧНЫЙ язык, показывающий возможности LLVM.
А можно рассчитывать, что в дальнейшем язык будет модифицирован для работы с несколькими типами? Или он создается только для демонстрации?
Я думаю, что достаточно добавить булев тип, строки и массивы и можно будет нормально программировать.
В Java и C# булев тип, с точки зрения виртуальной машины, является типобезопасным синонимом3 int32(0). А в Erlang нет строк, зато есть массивы int'ов, которые можно вывести в качестве строки. Это, конечно, не очень удобно, но работает.

А вот массивы было бы неплохо добавить, да :)
главное что автор показал как сделать простой язык, все эти нововведения не сложно самому добавить.
В оригинале насколько я помню до этого дело не дошло.
Он создан только для демонстрации… Он обучает работать с LLVM и не предназначен для реального программирования. Но добавить в него ещё типы данных после прочтения всего учебника не составит никакого труда.
Спасибо! Вы реализуете мою мечту. Всегда хотел сделать свой язык, но никак руки не доходили. Может чему-то у Вас научусь.
Это мечта любого программиста )
Просто если каждый программист начнет делать язык, который будет для него идеальным и программировать только на нем — мир рухнет)))
То-то сейчас полно быстро развивающихся языков. Видимо, мир в руинах! :)
Да не в том смысле. Просто если бы был сделан реально классный язык, на котором можно сделать буквально всё, удобный, красивый и т.д. — то да, всё замечательно. А если каждый будет делать то, что будет удобно в использовании только ему…

Имхо, основная проблема в том, что каждый язык, как правило «заточен» под что то одно, и у каждого есть свои плюсы, свои минусы. То есть если мы хотим быстро сделать достаточно гибкий web-сервис — мы сядем за Python, потеряв, в частности, в производительности. Если мы хотим сделать анализ большого объёма данных за короткое время — мы сядем за сложный и трудный для понимания Perl. Нет ничего одинаково подходящего и для одной, и для другой задачи.

С одной стороны, это хорошо, что для нужной задачи у нас есть нужный инструмент. Но с другой, когда нам в одном проекте нужно соединить и то, и другое, возникают сложности. Плюс опять же, нет программистов-универсалов, всё-таки каждый более спец в своей области.
упс, не та ветка…
комментарий — не воробей)
Можно написать себе свой собственный язык под существующую виртуальную машину, типа .NET, JVM, Parrot и т.д. и писать на нем, используя совместимость на уровне байткода. Хотя рано или поздно большинству авторов таких языков надоедает их развивать.
Не поверите — моя тоже. Писал два года виртуальную машину на C++, потом она все же заработала, но пропал интерес. Взялся писать на .NET — за два месяца написал работающий .NET-совместимый язык. Можете посмотреть примеры и исходные коды — вот страничка на кодеплексе. Если возникнет желание посодействовать в дизайне и реализации версии 2.0 — милости прошу :)
Можно попробовать flex/bison, относительно просто можно создать лексический и синтаксический анализатор своего языка.
Может быть в блог «Компиляторы»?
Действительно, перенёс, спасибо, этот блог более уместен.
НЛО прилетело и опубликовало эту надпись здесь
Low Level Virtual Machine. Сразу всё стало понятно, правда? Все мучительные вопросы получили ответы.
Добавил в конце несколько ссылок для изучения
Хочу поделиться опытом.

На протяжении около десяти лет работал в проекте где было реализовано 4 языка (язык для написания веб страниц, ибо Perl был какой-то мутный, макропроцессор, ибо стандартный макропроцессор C какой-то недостаточно крутой, язык описания архитектуры процессоров и т.п.). Оглядываясь назад, понятно, что языки делались потому что было много «сильных» программистом и потому что с появлением средств типа ANTLR создание парсера языка стало ну совсем плевым делом. Ну а написать свой язык это всегда круто и интересно:)

В результате вывод такой, что первая версия делается за несколько дней (или ночей). И казалось бы вот он язык! Но. Один за другим начинают возникать вопросы. Какие нужны встроенные функции? Поддержка арифметики? Типы данных? Структуры? Массивы? Динамические массивы? Документация языка такая, что им может пользоваться кто-то кроме автора (а это могут быть десятки и сотни страниц)? Примеры? Обращение к внешним библиотекам (ну вызов функций, вызов COM). Все эти аспекты зависят от назначения языка, но можете быть уверены, что создавая язык вы вешаете на шею обузу, которую придется нести долгое время. В частности, будте готовы десятки раз отвечать на вопрос «а нахрена вы завели свой язык когда есть PPP». И ваш ответ «мой такой же но удобнее и лучше» вряд ли проканает:)

Каждый уважающий себя программист должен сделать язык. Это лучший опыт для того, чтобы научиться программировать на других языках, поскольку становится понятна «кухня», объединяющая различные языки. Но нужно быть готовым отказатся от своего в пользу общего.
Довольно много статей про создание декларативного языка, а как сделать функциональный или логический?
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории