2010-11-27 3 views
1

В университете я специализировался в теории компилятора и грамматиках, поэтому имею хороший опыт в этой области (хотя давно), и знаю, что создание компилятора является огромным крупным делом, по крайней мере, для языка, такого как C++.Как люди собираются создавать свои собственные языки программирования?

Так что я смущен относительно большого количества языков программирования, которые, по-видимому, созданы людьми, а не большими группами людей, работающих в компании. Например, Ruby, по словам Википедии, был создан одним человеком - я не знаю языка, возможно, это невероятно просто, но, судя по всему, в нем присутствуют загрузочные самолеты созданных языков.

Так как же вы идете о создании своего собственного языка (который не слишком прост, чтобы быть бесполезным) как личность и не тратить всю свою жизнь на это?

Есть ли хорошие книги по этому вопросу (а не компиляторы и вообще спецификации)?

+0

Этот вопрос звучит, как [Programmers.SE] (http://programmers.stackexchange.com/) было бы лучше. – 2010-11-27 01:53:51

ответ

1

Я немного погулял по пути создания собственного языка. Я начал делать это, чтобы представить требования, аналитические и конструктивные конструкции, а не компилятор кода. Для этого может оказаться полезным даже очень простой язык. Мне показалось, что это важно, чтобы читать и писать такие конструкции в очень ограниченной версии англоязычных предложений шаблонов. Тогда стало полезно, чтобы язык машины был читабельным, и поэтому я построил лексеры и синтаксические анализаторы для чтения языка с использованием Lex и Yacc. По мере того как я ушел, я расширил язык и его парсеры, чтобы иметь дело с расширениями.

Я знаю, что это очень длинный путь от надежного компилятора для такого обширного языка, как C++, но иллюстрирует одну мотивацию для спуска этого маршрута. Я бы предположил, что ваше представление о простых языках как о бесполезном является преувеличением. Даже очень ограниченный язык может быть весьма полезным.

0

Хотя у меня в основном нет опыта в создании языков самостоятельно, у меня есть хорошее количество опыта обучения новых, так что я мог бы предположить, что это -

Программирование отрасли является рынок языков. Языки растут и падают в популярности на основе их простоты, чтобы учиться и использовать, отсутствия коммерческих и юридических ограничений, применимости к реальным ситуациям, гибкости и власти. Если вы хотите, чтобы ваш язык был популярен в один прекрасный день, попробуйте пойти на это.

Если вы разрабатываете игрушечный язык сами по себе (как это делают многие компьютерщики), это интересное теоретическое упражнение и по-прежнему вполне справедливо, но вы не можете ожидать, что оно станет столь же распространенным.

3

(хотя давным-давно) и знаю, что создание компилятора является огромным событием, по крайней мере, для такого языка, как C++.

Много вещей сговорились, чтобы сделать вещи проще:

  1. компьютеры имеют намного больше оперативной памяти и скорость. Значительная часть проблемы написания ранних компиляторов заключалась в том, чтобы делать это эффективно и с минимальной памятью. Вот почему C может скомпилироваться за один проход: в то время у вас может не хватить памяти, чтобы даже вместить в нее весь исходный файл. Там, где раньше магия написания компилятора оптимизировала представление таблицы символов и разбора так быстро, насколько это было возможно физически, теперь вы можете делать все гораздо проще и проще.

  2. Базовая технология улучшилась. Большинство языков имеют приятные простые в использовании библиотеки парсеров, высокоуровневые структуры данных (таблицы символов - это привязка, если у вас уже есть хорошая реализация хэш-таблицы!) И другие инструменты, позволяющие значительно упростить процесс запуска и запуска компилятора или интерпретатора.

  3. GC является вездесущим. Большинство новых языков, создаваемых сегодня, собирают мусор. Это упрощает разработку языка (вам не нужно указывать детальное семантику памяти). В то же время вы можете настроить таргетинг на какую-то существующую платформу GC, такую ​​как CLR или JVM, так как автор языка, вам не нужно писать свой собственный GC. Фактически, таргетинг на CLR или JVM делает вашу работу в качестве компилятора намного проще: в качестве платформы более высокого уровня байт-код встречается с вами на полпути.

  4. Большинство новых языков динамически типизированы. Большинство создаваемых новых языков динамически типизируются. Это много проще в проектировании и реализации. Я обнаружил, что большинство проблем в разработке языка - это разработка системы типов. Аналогичным образом, компиляция или интерпретация статического языка является более сложной задачей. Динамические языки, где все просто мешок для имущества, на удивление легко встают и работают.

  5. Опять же, компьютеры имеют намного больше оперативной памяти и скорости. В тот же день, если ваш язык должен был иметь какие-либо шансы на успех, ему необходимо было скомпилировать эффективный машинный код, эффективно использовать память и быстро работать. В противном случае это было бы необычно медленным. Теперь, когда компьютеры работают намного быстрее, даже медленный язык, такой как Ruby, по-прежнему достаточно быстрый для многих реальных применений. Как писатель компилятора вам не нужно столько навыков оптимизации, как вы привыкли.

Стоит также отметить, что не один делает новый язык, как сложно, как C++ в эти дни. C++ действительно близок к вершине сложности языка.