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


51

Почему так много языков программирования?

А что побуждает кого-то создавать языки программирования, несмотря на то, что другие языки уже существуют?


развлекательное видео на эту тему - «Последний язык программирования» от дяди Боба Мартина ( skillmatter.com/podcast/agile-testing/bobs-last-language )
mikera

Потому что программисты любят инструменты.
Хайлем


2
Не связано: xkcd.com/927
Гонки

Это трудно оправдать, я думаю, у каждого языка есть история. Насколько мне известно, большинство языков не принесло пользы создателю. Большинство языков вращаются вокруг одних и тех же концепций и редко решают реальные проблемы или предоставляют хорошие условия. Я думаю, что к тому времени, когда они его создают, они чувствуют усталость от всего этого и, возможно, видят, как они потратили впустую свою жизнь ... Подумайте о ksh или JavaScript ..... Просто ужасные и вредные инструменты.
NoChance

Ответы:


36

Языки программирования развиваются

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

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


10
Что интересно в Erlang, так это то, что это «переосмысление чистой комнаты» модели Actor. Когда Армстронг и его друзья разработали Erlang, они не знали о работе Хьюитта и его коллег по модели актера!
Фрэнк Шиарар

@Frank: это интересно. Я этого не знал, спасибо.
Джонас

2
+1 за эволюцию. Аналогичным вопросом может быть «Почему так много видов животных и растений? Почему все еще появляются новые?»
Gyan aka Gary Buyn

1
@GaryBuyn, это всего лишь «+1 за эволюцию», если вы подписаны на эту точку зрения. Для многих аналогия с животными слишком далека.
Темная ночь

@GaryBuyn, Эмм ... это красиво , как аналогично , как «Гамлет» является «хомяка».
Pacerier

22

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


2
Это определенно верно для библиотек, фреймворков и программного обеспечения, но я лично не знаю языка, к которому это относится. У вас есть примеры?
back2dos

16
Ну, я думаю, что и C #, и Java были введены, по крайней мере частично, для решения сложностей с C ++. И теперь, если вы посмотрите на оба этих языка несколькими версиями позже, их синтаксис и наборы функций становятся достаточно сложными, когда люди начинают говорить о том, что они «за кадром». Просто мой взгляд на это, хотя я ничего не могу доказать. :-)
RationalGeek

2
Хороший вопрос, но я думаю, что другой факт связан с C # - это коммерческий продукт, который не существует по благотворительным соображениям и для принятия на рынок / сохранения ваших клиентов, продукты должны быть «улучшены» для новых выпусков и т. Д.
gf

1
Это правда. Стремление добавлять новые функции, чтобы получить больше денег с рынка, безусловно, нельзя игнорировать. Однако это обоюдоострый меч. Именно по этой причине вы можете ожидать появления новых функций от коммерчески поддерживаемого продукта. Но из продукта с открытым исходным кодом вы получаете новые функции только до тех пор, пока армия волонтеров остается заинтересованной, а у руля есть кто-то, обладающий навыками, которые пасут кошек.
RationalGeek,

C # имеет множество функций, но он все же более чистый язык, чем C ++. Более новые дополнения, такие как LINQ, позволяют вам делать то, что вы не можете легко сделать в C ++. Я думаю, что более вероятно, что есть два вида сохранения сложности - один, где некоторая сложность присуща проблеме, и один, когда, когда вы устраняете один вид избыточной сложности из ваших программ, требования становятся более сложными - сложность, такая как данные, расширяется, чтобы заполнить «пространство» доступно.
Steve314

11

По той же причине есть молотки, отвертки, ручные пилы, ленточные пилы, отбойные молотки, ломы и множество других инструментов: не каждый язык идеально подходит для каждой задачи. Некоторые языки ориентированы на конкретные проблемные области: R особенно хорош для статистического анализа, C особенно хорош для написания ядер операционной системы, Haskell особенно хорош для математических и финансовых вычислений, Erlang особенно хорош для параллельного программирования и т. Д.

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

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


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

+1 За пригодность для проблемных доменов. Ученые, которые изучают инструменты в целом, говорят, что очень общий инструмент является менее мощным, чем конкретный инструмент для конкретной задачи. Подумайте о разводном и фиксированном
ключе

8

Потому что они все отстой (так или иначе).

В настоящее время мы создали около 5000 языков для описания естественных проблем, и ни один из них не доступен для написания программ (например, «английский»).

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


15
Даже тогда они будут продолжать приходить. Только мертвые языки написаны на камне, простите за каламбур. Есть причина, по которой живые языки постоянно меняются.
Р. Мартиньо Фернандес

1
Некоторые утверждают, что естественным языком для выражения проблем является математика. Это поднимает вопрос о том, почему люди продолжают добавлять синтаксический сахар в функциональные языки, а не использовать чистое лямбда-исчисление. Я думаю, что проблемы, которые нам приходится часто решать, нелегко выразить ни в английском, ни в математике.
Steve314

5
Согласовано. Трудно выразить «я голоден», используя чистую математику.
Аарон Дигулла

1
@AaronDigulla: голодные = сумма (живот / еда), конечно :)
gbjbaanb

@AaronDigulla это хороший пример, часто вы хотите выразить вычисления. Таким образом, мы берем заданный сценарий, как: я голоден, теперь ем -> хорошо, теперь не ем -> голодать. Я думаю, что создание систем, способных вести переговоры или расширять контекст, является целью ИИ. Нормальные языки программирования выражают только то, что люди говорят им, что они должны делать, и обычно это довольно специфично, чем общее. Но так как большинство проблем сами по себе специфичны, вы можете увидеть проблему здесь.
AndreasScheinert

6

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

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


6

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


3
Есть ли документированный случай разработки языка, чтобы избежать устаревшего кода? Это утверждение кажется крайне маловероятным. Я вижу случай, когда вы хотите начать все сначала (приходит на ум .net), но не столько избежать устаревшего кода, сколько лучше включить будущий код.
Брайан Оукли

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

@BryanOakley - изначально .NET предназначался для обеспечения обратной совместимости с VB6, но они решили, что это слишком сложная проблема. В .NET все еще было много унаследованных WRT Java / J ++, на которых он базировался. Я думаю, что D - это пример языка, разработанного против унаследованного кода.
gbjbaanb

4

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

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


1
Для тех, кто не разбирался в сносках в статье в Википедии, вики-страница «Эзотерические языки» доставляет массу удовольствия: esoteric.voxelperfect.net/wiki/Main_Page
Дэвид Уинслоу

Вы не могли бы объяснить больше о том, что он делает, и почему вы рекомендуете ответить на заданный вопрос? «Ответы только на ссылки» не очень приветствуются на Stack Exchange
gnat

1
@gnat Честно говоря, я думаю, что исходный текст - это не просто ссылка, он будет коротким, но совершенно правильным ответом без ссылки. Но, учитывая, что ссылка действительно добавляет вкус, я включил в нее короткую цитату.
JK.

3

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

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

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


2

Быстрый короткий ответ

Изобретая Колесо ... Какова текущая тенденция ...

Скучный длинный ответ

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

Что я имею в виду для этого?

Ну, для «нескольких лет» программисты, Java или C # могут быть дополнительными языками программирования к существующим Cobol, (OO / Procedural) Basic, C / C ++, в то время как для «новых» программистов Java или C # являются новыми языками, в то время как Cobol, (OO / процедурный) Basic, C / C ++ для них не существует, поэтому изобретать велосипед становится обычным делом ...

И, если появятся новые тенденции в технологии, люди могут создать новый язык программирования, основанный на этой тенденции, такой как ecmascript / javascript для веб-сайтов и функционального программирования ...

Приветствия.


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

1

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

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

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

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


0

По той же причине существует так много <что угодно>, и мы продолжаем создавать новые <все>

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

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


Синдром NIH = вообще не полезен для IT-индустрии вообще.
gbjbaanb

0

Университеты предоставляют много языков программирования, как и очень крупные корпорации, такие как Ericsson (Erlang = язык Ericsson), Bell Labs (языки B и C), Google (язык Go за несколько месяцев до этого). Многие из тех, которые были написаны как часть университетских исследований, не используются много. Однако есть несколько заметных исключений. Я полагаю, что написание собственного языка / компилятора - хорошая тема для кандидатских диссертаций для людей, изучающих теорию КС или смежные дисциплины. Меня поражает, что Python является одним из первых языков, которые родились в результате совместных онлайн-усилий различных программистов вокруг единой идеи.


python-history.blogspot.com/2009/01/… подробно описывает рождение Python
Энди Дент

0

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

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


-1

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

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


-1

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

Спрашивать, почему так много языков, все равно, что спрашивать, почему C ++ 0x? :)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.