Подтвердить что ты не робот

Зачем создавать новый язык программирования?

Какова реальная польза для создания нового языка программирования? Очень маловероятно, что вы собираетесь его использовать.

Короче, как процесс создания нового языка сделает вас лучшим программистом?

4b9b3361

Ответ 1

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

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

Подобно тому, как мы изучаем новые способы кодирования решений при использовании других языков, когда мы пишем наши собственные языки, мы изучаем новые способы создания решений. См. Metaprogramming. Вопреки тому, что предлагает этот вопрос, Domain Specific Languages ​​ используются во многих средах.

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

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

Короче говоря, существует порядок разницы в программисте, который знает, как использовать инструменты, и программист, который знает, как сделать инструменты.

Ответ 2

Я могу говорить по опыту здесь...

Веселье, решение проблем с конкретными доменами, сложность в контексте

Мне нравится создавать новые языки для веселья, а также для решения проблем, связанных с доменом. Очень простой пример может быть разметкой Википедии или чем-то сложным, как Erlang, который специализируется на параллельной обработке.

Многие языки общего назначения похожи, потому что они являются универсальными. Иногда вам нужна более точная абстракция механики проблемы, которую вы решаете. Другим примером может быть макроязык M4.

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

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

компиляторы воплощают много теорий, которые лежат в основе информатики:

Перевод, абстракция, интерпретация, структуры данных, состояние... список можно продолжить. Изучение этих вещей позволит вам понять последствия вашей программы и то, что происходит под капотом. Конечно, вы можете изучать вещи независимо, но компиляторы - это отличный контекст для изучения сложных тем, таких как автоматы DFA/NDFA, анализаторы на основе стека, абстрактные синтаксические деревья....

компиляторы - красивые машины, я думаю:)

Ответ 3

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

Ответ 4

Несколько причин:

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

Ответ 5

Я добавлю, что если вы напишите семантику, чтобы ваш язык был реальным языком, а не только тем, что может быть принято какой-либо конкретной реализацией, вы узнаете огромное количество о как точно описывать компьютерное поведение:

  • Вы узнаете, какие типы поведения и нелегко описать и доказать правильность.

  • Вы узнаете, как торговать различными формализмами для описания различных видов функций.

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

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

EDIT. Если вы хотите изучить этот материал, я думаю, что самая простая отправная точка Серия Бенджамина Пирса из двух книг по типам и Языки программирования. Существует также выпускник учебника Glynn Winskel, который немного сложнее, но более ориентирован на семантику и методы доказательства.

Ответ 6

Создание Домен определенных языков очень ценно. Вместо того, чтобы думать только о языках общего назначения, подумайте о создании так называемых "маленьких языков", которые четко выражают абстракции в вашем проекте.

Например, в недавнем проекте я решил использовать шаблон команды для управления уровнем обслуживания. Я нашел некоторое повторение в моем командном коде, поэтому написал небольшой компилятор, который принимает простой язык, который выражает команды и испускает реализации команд на "базовом" языке.

Ответ 7

По той же причине, что принятие курса по построению компилятора в университете принесет пользу вам, даже если вы никогда не пишете ни одного компилятора за всю свою жизнь. Взгляните под капот, если сможете.

Ответ 8

В дополнение к тому, что AltCognito сказал, что является теоретической/академической перспективой, созданы узкоспециализированные языки для эффективного решения конкретных проблем, когда существующие "универсальные" языки либо крайне неэффективны для вашей задачи, либо просто нет простой в использовании существующий вариант.

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

В дополнение к этому, зная, как создавать компилятор, вы сможете лучше понимать языки в целом и языки, с которыми вы работаете, в частности. У вас будет лучшая оценка синтаксиса и компромиссов, которые разработчики языка взяли, когда они написали свои спецификации.

Это не то, что написание компиляторов делает вас лучшим программистом. Это глубокое понимание теории языка и дизайна компилятора, что делает вас лучше.

Ответ 12

как процесс создания нового языка сделает вас лучшим программистом?

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

Ответ 13

В основном вы делаете это ради удовольствия или расширяете свое понимание предмета.

Я не согласен с тем, что создание нового языка влияет на производительность - производительность чего? Скорость выполнения IMHO не должна зависеть от языковых конструкций, а от того, на какой язык переводится, - что-то другое: например, создание синтаксиса для языка и написание для него компилятора/виртуальной машины.

Ответ 15

Я хочу, чтобы управляемый язык позволял возиться со своими внутренностями в качестве стандартной практики. Вид как Ruby duck punching в более широком масштабе.

Я должен, как клиент библиотеки, иметь возможность обменивать библиотечные функции, которые не выполняют то, что я хочу.

Что меня смущает .NET. Ошибки в рамках Microsoft не будут исправлены, и благодаря подписанию GAC я не могу. И даже если бы это не было для подписания GAC, hotpatching глобальная библиотека - плохая идея (может сломать другое приложение).

Ответ 16

Мне для меня все равно, как работают компиляторы, не заботятся об обучении новым языкам и не заботятся об использовании языков сценариев, таких как perl и javascript. Меня гораздо больше интересуют способы создания больших программ (или их построения). По-прежнему нет хороших решений для того, чтобы сделать программное обеспечение LARGE простым в использовании в качестве прототипированного кода. Языки программирования не помогают. Они решают тривиальные проблемы, такие как сортировка и освобождение памяти, и оставляют вас борется в одиночку с проблемами, которые действительно имеют значение (которые препятствуют вам или вашей фирме потерять деньги).