Почему создают новый язык программирования? [закрытый]

sudoPassword = 'mypass'
command = 'mount -t vboxsf myfolder /home/myuser/myfolder'
p = os.system('echo %s|sudo -S %s' % (sudoPassword, command))

Попробуйте и дайте мне знать, если это работает. : -)

И вот этот:

os.popen("sudo -S %s"%(command), 'w').write('mypass')

23
задан Pranav 29 May 2009 в 14:07
поделиться

16 ответов

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

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

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

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

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

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

40
ответ дан 29 November 2019 в 00:47
поделиться

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

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

Это то, что сводит меня с ума. СЕТЬ. В структуре есть ошибки, которые Microsoft не исправит, и благодаря подписанию GAC я не могу. И даже если бы не подписывание GAC, горячее исправление глобальной библиотеки - плохая идея (может сломать какое-то другое приложение).

0
ответ дан 29 November 2019 в 00:47
поделиться
0
ответ дан 29 November 2019 в 00:47
поделиться

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

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

0
ответ дан 29 November 2019 в 00:47
поделиться

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

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

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

1
ответ дан 29 November 2019 в 00:47
поделиться

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

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

1
ответ дан 29 November 2019 в 00:47
поделиться

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

2
ответ дан 29 November 2019 в 00:47
поделиться

Меня, например, не волнует, как работают компиляторы, не волнует изучение новых языков и нет дела до с использованием языков сценариев, таких как perl и javascript. Меня гораздо больше интересует, как создаются (или должны создаваться) большие программы. До сих пор нет хороших решений, позволяющих сделать БОЛЬШОЕ программное обеспечение столь же простым в использовании, как прототипный код. Языки программирования здесь не помогают. Они решают тривиальные проблемы, такие как сортировка и освобождение памяти, и оставляют вас наедине с проблемами, которые действительно важны (которые удерживают вас или вашу фирму от потери денег).

Меня не интересует изучение новых языков, и меня не волнует использование языков сценариев, таких как perl и javascript. Меня гораздо больше интересует, как создаются (или должны создаваться) большие программы. До сих пор нет хороших решений, позволяющих сделать БОЛЬШОЕ программное обеспечение столь же простым в использовании, как прототипный код. Языки программирования здесь не помогают. Они решают тривиальные проблемы, такие как сортировка и освобождение памяти, и оставляют вас наедине с проблемами, которые действительно важны (которые удерживают вас или вашу фирму от потери денег).

Меня не интересует изучение новых языков, и меня не волнует использование языков сценариев, таких как perl и javascript. Меня гораздо больше интересует, как создаются (или должны создаваться) большие программы. До сих пор нет хороших решений, позволяющих сделать БОЛЬШОЕ программное обеспечение столь же простым в использовании, как прототипный код. Языки программирования здесь не помогают. Они решают тривиальные проблемы, такие как сортировка и освобождение памяти, и оставляют вас наедине с проблемами, которые действительно важны (которые удерживают вас или вашу фирму от потери денег).

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

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

-3
ответ дан 29 November 2019 в 00:47
поделиться

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

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

2
ответ дан 29 November 2019 в 00:47
поделиться

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

2
ответ дан 29 November 2019 в 00:47
поделиться

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

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

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

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

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

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

3
ответ дан 29 November 2019 в 00:47
поделиться

The PRAGMA statement suggested by @pragmanatu works fine through any programmatic interface, too. Alternatively, the sql column of sqlite_master has the SQL statement CREATE TABLE &c &c that describes the table (but, you'd have to parse that, so I think PRAGMA table_info is more... pragmatic;-).

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

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

РЕДАКТИРОВАТЬ : Если вы хотите изучить этот материал, я думаю, что самой простой отправной точкой является Серия двух книг Бенджамина Пирса по типам и языкам программирования . Существует также учебник для выпускников Глинна Винскеля , который немного сложнее, но больше ориентирован на семантику и методы доказательства.

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

РЕДАКТИРОВАТЬ : Если вы хотите изучить этот материал, я думаю, что самая простая отправная точка - это серия двух книг Бенджамина Пирса по типам и языкам программирования . Существует также учебник для выпускников Глинна Винскеля , который немного сложнее, но больше ориентирован на семантику и методы доказательства.

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

РЕДАКТИРОВАТЬ : Если вы хотите изучить этот материал, я думаю, что самая простая отправная точка - это серия двух книг Бенджамина Пирса по типам и языкам программирования . Существует также учебник для выпускников Глинна Винскеля , который немного сложнее, но больше ориентирован на семантику и методы доказательства.

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

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

4
ответ дан 29 November 2019 в 00:47
поделиться

Множественные причины:

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

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

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

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

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

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

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

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

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

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

12
ответ дан 29 November 2019 в 00:47
поделиться

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

6
ответ дан 29 November 2019 в 00:47
поделиться

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

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

2
ответ дан 29 November 2019 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: