Почему не может быть «универсального» языка программирования, который бы служил всем целям? [закрыто]

57

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

оборота киллоун
источник
23
Термин «лучший» является субъективным, поэтому вы никогда не получите универсально признанного лучшего. Конечно, существует довольно много языков, которые подходят для широкого спектра разработок на всех платформах. C ++ и Java являются основными двумя.
GrandmasterB
5
@GrandmasterB Вы забыли C #
Даниэль Литтл
15
Существует, это называется «C»
Мартин Беккет
9
у нас как вида есть врожденная способность не соглашаться (в силу нашей индивидуальности), поэтому мы никогда не согласимся с тем, что требуется повсеместно, и, следовательно, никогда не будет одного (по крайней мере, одного, созданного людьми!)
Ним
9
Универсальный язык программирования? Вы имеете в виду, аналог универсального человеческого языка, на который все перешли так много лет назад?
Kyralessa

Ответы:

116

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

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

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

Конструкция ножа и его гибкость привели к всемирному признанию ...

комара
источник
26
По той же причине вы не привели минивэн в гонку драг. По той же причине вы не подносите водяной пистолет к поединку.
Крис
20
@Chris Что если это дуэль с водяным пистолетом?
Расти
44
По той же причине вы никогда не вступаете с сицилийцем, когда на кону смерть.
Расти
6
Если бы у вас был швейцарский армейский нож, который делал все, что нужно для постройки дома, был бы он полезен для любого из них?
Брэд Мейс
4
Этот ответ - ужасная аналогия. Возможно, если бы вы написали: поскольку французский язык допускает другую точность выражения, чем английский, мне, возможно, понравилась бы аналогия. Но компьютерные языки - это не «вещи» и не человеческие языки. Правильный ответ: мы не знаем. Это потребует большего понимания того, как люди выражают логику и как они достигают этой точки. Кроме того, некоторые языки являются «метаязыками», способными выражать другие DSL. Должны ли мы включить их в ваш вопрос?
Диббеке
80

Потому что

  1. никто не хочет переписывать весь унаследованный код.
  2. Трудно согласовать все цели
  3. Как только вы составите полный список целей, они изменятся, прежде чем вы сможете его построить.
  4. Кто-то начал бы совершенно другой язык из-за новой цели.
  5. Microsoft
  6. яблоко
  7. Открытый исходный код
  8. Что бы мы сделали со всеми Вавилонскими Рыбами?
  9. Не мог даже сделать SQL универсальным.
оборота Джеффо
источник
Вы остановились. Я ожидал один из тех ха-ха-только-серьезных "Топ-10" списков.
Джеффри Хантин
4
+1 за предотвращение, по крайней мере на данный момент, кампании «Спасите Вавилонскую рыбку». Чертовы хиппи
Расти
2
Что касается Вавилонской Рыбы, приготовь суши!
Muad'Dib
1
Что касается пункта 1, весь унаследованный код в конечном итоге либо придется переписывать в любом случае с использованием новейших средств в коде / библиотеках, либо он не сможет эффективно работать без нелепой суммы расходов на поддержку.
Майкл
38

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

Вот почему встроенные контроллеры полета написаны на C, а веб-сайты написаны на PHP, Java, Rails, .NET и многих других.

Для встроенного контроллера полетов у меня есть около 128 КБ памяти, и, кроме того, если мой код получает необработанное исключение, когда самолет падает, 200 человек погибают, а мне предъявляют иск на сумму 1 млрд. Долл., И мне приходится посылать инженеров на все аэропорт в мире, чтобы исправить самолеты, которые основаны, теряя моих клиентов $ 10 миллионов в день. Я должен работать с языком, который очень плотный и имеет небольшое количество движущихся частей, которые могут работать неправильно.

Для моего веб-приложения у меня есть несколько ГБ памяти для работы, но скорость сети ограничена (в меньшей степени каждый день, но это, вероятно, самое большое ограничение в Интернете). Я буду искать язык, который дает мне массу функций и производит вывод, который может быть передан максимально быстро. Мне действительно все равно, если мой сайт выйдет из строя, я, возможно, потеряю несколько продаж (100 долларов) и мне придется исправлять вариант использования, который бомбил, ничего страшного

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

Билл Липер
источник
3
Большинство сайтов, которые действительно зарабатывают деньги, потеряют более 100 долларов, если они испытывают значительные простои. Не для того, чтобы предположить, что это сопоставимо с ситуацией жизни или смерти, но, тем не менее, это значительно снижает риск.
Aaronaught
3
Есть ли у вас какие-либо идеи, как фальшивый Facebook. Они недавно отправили, они нажимают код каждые 37 минут. Их сайт постоянно блокируется тем или иным способом, и у них в резерве миллион билетов. Суть в том, что с сетью никто не умрет, вы «можете» потерять несколько продаж, но в целом не очень большой риск. Большинство проблем, с которыми вы сталкиваетесь, затронут лишь нескольких клиентов, а не всю базу
Билл Липер
24
  1. Идите в свой гараж (или в гараж своих родителей).
  2. Откройте ящик для инструментов.
  3. Если вы видите более одного инструмента, подумайте, как это относится к вашему вопросу.

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

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

Аналогичным образом, профессиональные разработчики программного обеспечения должны обладать достаточным набором инструментов для осуществления своей торговли. Если вы откроете свою панель инструментов и увидите только [программный эквивалент] отвертки Philips, то вы не сможете считать себя профессионалом.

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

brettmjohnson
источник
Это для в том числе "родительский гараж". Это действительно проясняет, так как у меня нет гаража.
Дэн Розенстарк
5
Лучшая аналогия была бы в том, что язык похож на набор инструментов, а не на отдельный инструмент.
Том Хотин - tackline
4
В коробке может быть 20 разных инструментов. Но держу пари, что вам нужен только один язык для их описания.
ThomasX
2
В наши дни набор инструментов больше похож на библиотеки, доступные для данного языка.
Майкл
18

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

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

Что если языком программирования был набор инструментов?

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

Концепция уже существует частично. Например, языки, такие как Nemerle, позволяют вам добавлять синтаксис к языку , и, таким образом, вы можете взять «лучшую функцию из языка X» и добавить ее в Nemerle (или свой собственный). Это не обязательно означает, что вы все время должны писать собственные макросы - каждый язык (или парадигма) может быть определен внутри макроса в стандартной библиотеке - так, чтобы вы могли import Haskell; import Prolog;, и начать писать на двух языках, как если бы он был частью Твой язык?

Тогда возникает вопрос - как вы можете настроить функции различных языков / парадигм для взаимодействия друг с другом? Хотя я не могу ответить на это, фреймворки, такие как .Net и JVM, предлагают некоторые решения - языки по крайней мере частично совместимы из-за способа их компиляции. Вы можете взять любой код, написанный на C #, например, и использовать его из F # без нареканий.

«Проблема» с решением, как сегодня, заключается в том, что для совместного использования этих языков необходимо создавать их как отдельные проекты, которые не могут ссылаться друг на друга - у вас может быть только односторонняя ссылка. Языковой барьер состоит в том, что каждый проект компилирует все свои файлы отдельно в Common Intermediate Language, прежде чем любой другой проект сможет получить к нему доступ.

Шагом к устранению этого барьера будет возможность компиляции кода на разных языках (например, C # и F #) внутри одного проекта. Теоретически вы можете скомпилировать каждый файл отдельно (или в группах - если они имеют частичные типы или циклические ссылки), а затем скомпилировать файлы другого языка, которые могут получить доступ к уже скомпилированным (CIL) объектам. Вы должны были бы строго определить порядок компиляции, чтобы это работало, хотя - но порядок компиляции уже требуется в случае F #.

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

Марк Н
источник
4
Весь мир не ПК. Большинство процессоров на этой планете имеют менее 64 Кбайт общего объема памяти. Язык, который можно использовать на этих процессорах, должен быть настолько далеким от тех, которые большинство на этом форуме, похоже, используют, чтобы ваш универсальный язык в конечном итоге стал расширенным языком ассемблера. Я думаю, что это будет называться "C".
ɐɪ
10

Лучшие свойства некоторых языков противоречат лучшим возможностям других.

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

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

Билл
источник
но если бы эти функции были включены / отключены в соответствии с необходимостью, например: вы могли бы включить отражения с учетом типа и отключить возможность свободно типизированного языка и т. д.
killown
2
и если бы вы попытались объединить множество языковых функций в один язык, который мог бы делать все что угодно, вы бы получили много избыточности, путаницы, ошибок из-за различных способов использования различных комбинаций функций и большого количества потраченные впустую усилия, определяя, какую парадигму вы используете в этой строке.
killown, вы правы, но решение проблемы с помощью ультраконфигурируемого языка делает язык трудным в использовании, как описывает fennic. Мне нравится гибкий язык, который позволяет вещи, даже если они опасны в некоторых случаях, но уровень конфигурации, который вам нужно будет объединить с некоторыми концепциями, сделает его более сложным, чем просто отступить и написать решение на низкоуровневом C или что-то в этом роде. ,
Билл
1
+1 за противоречивые черты
Фрэнк Шиарар
Я думаю, что проблема не только в том, что языковые особенности конфликтуют, а в том, что многие языки предполагают базовую структуру, которая включает в себя функции, которые накладывают определенный уровень накладных расходов, но позволяют упростить определенные операции. Языки также обычно имеют определенные «типичные шаблоны использования», связанные с ними. Выбор того, какие функции должны быть включены в структуру, и какие шаблоны кодирования следует использовать, включает компромиссы; и различные комбинации функций и шаблонов лучше для разных приложений.
суперкат
7

"Мастер на все руки, да путем ничего и не умеет." приходит на ум

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

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

ChrisF
источник
4

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

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

оборота Bigown
источник
4

Из-за чего-то, что я называю «парадоксом обобщения / специализации», которое, вероятно, имеет другое название и на самом деле не является парадоксом

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

Homde
источник
2
Я бы согласился с вами, за исключением того, что можно иметь специализированные библиотеки на обобщенном языке.
dan_waterworth
@dan: Согласен, но только если язык ориентирован на предоставление функций авторам библиотек. Мои два любимых языка - D и Python. Оба являются довольно универсальными языками (особенно D), но оба имеют множество функций для авторов библиотек, так что вы можете создавать свои собственные библиотеки для обработки специализированных вещей. Я презираю специфичные для супер домена языки, такие как Matlab и R.
dsimcha
4

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

Это также верно для языков программирования.

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

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

«Лямбды» всегда были возможны в C. Синтаксис отключен, включая код, разбросанный по всему проекту / файлу, поэтому это не было предпочтительным решением. С версией no-capture / upvalue / etc определите функцию где-нибудь еще и передайте указатель на функцию. (см. qsort () ). Чтобы использовать лямбда-выражения с захваченными значениями, количество и сложность кода, который вы должны написать, сильно возрастают - насколько я знаю, на самом деле никто никогда не писал код для использования этого метода программирования на C. В отличие от языков, где лямбды являются частью языка и используются повсеместно.

Основное различие между C и C ++, как вы можете задать C ++ , чтобы заботиться о вещах для вас; но тогда из одной строки кода вы уже не видите, сколько вы на самом деле просите об этом. Ответ становится: это зависит (от всего этого другого кода).

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

MaHuJa
источник
2
«На некоторых других языках идея путешествий во времени никогда не возникнет у ее носителей». Нужна цитата. Гипотеза Сапира-Уорфа никоим образом не получила широкого распространения, особенно в ее сильной форме.
Мухаммед Алкарури
4

Невозможность по техническим причинам иметь универсальный язык? Это полная чушь. Вы могли быиметь универсальный язык, который охватывает все основы. Проблема в основном историческая: разные языки были придуманы, чтобы делать разные вещи и использоваться в разных сообществах. Многие из них застряли. Добавьте к этому предпочтения (vi! Emacs! Подождите, я имел в виду Java! C #, подождите, я имел в виду Microsoft, Open Source и т. Д. И т. Д.) И общее вложение исторических происшествий ... Посмотрите на естественные языки на крошечной земле Масса, как некоторые европейские страны, чтобы увидеть, насколько сумасшедшей может стать эта тема. В некоторых городах есть своя гордость и радость, маленький диалект, на котором говорят только они. Нации и сообщества программистов ничем не отличаются, и сообщества программистов не являются более рациональными. Если бы они были, мы бы все говорили на эсперанто и программировали на Универсальном что-нибудь «что-то» ...

Яр
источник
1
Проблема глубже, чем это. Чем больше опций вы сделаете доступными, тем больше нужно будет указать явно, а не как неявный способ работы на этом языке. Проблемы становятся более очевидными, если вместо сравнения Java с C # вы сравниваете Java с Prolog. Наличие возможностей обоих на одном языке усложнит синтаксис составного языка. Более разумный выбор может заключаться в том, чтобы свести синтаксис к минимуму и позволить реализовать любую функцию в качестве библиотеки метапрограммирования. Это в основном то, что делает Lisp, хотя его ядро ​​недостаточно низко для некоторых заданий.
Steve314
4

Ошибочно думать, что «объединение всех функций» сделает язык лучше.

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

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

  • Языки структурированного программирования (C, Pascal) - убирает «goto», заменяет процедуры и структурированные циклы и т. Д.
  • Java - убирает «ручное управление памятью», заменяет GC / управляемую память
  • Haskell / Clojure - выводит "неуправляемое изменяемое состояние"
  • Лисп - отбирает большую часть "синтаксиса языка", заменяет гибкое гомоиконичное дерево s-выражений

Дядя Боб Мартин - последний язык программирования

mikera
источник
«Языки структурированного программирования (C, Pascal) - убирает« goto », заменяет процедуры и структурированные циклы и т. Д.» - Извините, вы не правы: C имеет goto. Но мне нравится остальная часть ответа. Главное, что делает C, это позволяет вам не заботиться о том, где именно в памяти все находится и что находится в каком регистре, в какое время, и это скрывает счетчик программы (опять же, с точки зрения точного адреса, на котором он находится. Вы можете переместить его почти на уровне точности сборки с goto).
Wyatt8740
0

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

Тем не менее Cobra выглядит многообещающе в том смысле, что обладает всеми приятными возможностями других языков. :-)

Andrea
источник
0

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

C до сих пор существует, хотя с тех пор было изобретено много новых языков.

Вы могли бы сказать, что python такой универсальный язык, но есть и ruby.

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

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

Это хорошая вещь.

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

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

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

  • Зрелость: Мы создавали компьютерные языки, вероятно, менее века. У нас пока нет ответа, потому что мы еще не знаем всех вопросов.

  • Отдельное происхождение: Не уверен, что это правильное слово, но в мире существует множество систем письменности, которые появились во многих географических регионах. Подумайте о клинописи, которая была частично продиктована требованиями вырезания в глиняных табличках. Вспомните санскрит, греческий, иврит, римский, арабский алфавиты. Иероглифы, китайский метод красивого письма с более чем 6000 символами, который используется во многих странах Восточной Азии. Подумайте о более современных смешанных алфавитах с фонетической основой, таких как кириллица, катакана и хиригана. Я не лингвист, так что не оскорбляйте неточности слишком резко, но когда культурам всего мира нужно что-то, они создают это и делают это своими силами по необходимости. Компьютерные языки появились вместе, когда было много общения по всему миру, например, системы Imperial и Metric, пришел из мест с мощной идеей лидерства. Но языки программирования служат многим различным культурам (некоторые из них корпоративные культуры), поэтому они отражают людей, которые их создали. Компьютерные языки идут с культурным наследием, которое сформировало их дизайн и использование. В культуре ядра ОС маловероятно, что C и C ++ скоро станут устаревшими для Java (или наоборот), потому что они позволяют генерировать собственный код, тесно / эффективно взаимодействовать с оборудованием для создания уровней аппаратной абстракции и имеют значительную установленную базу.

  • Проектирование дизайна. Языки программирования используют разные организационные парадигмы. COBOL и Ada были из комитетов, которые были частью DOD, которые имели большую иерархию. Если я правильно помню, C, C ++, Java и, вероятно, многие другие пришли от одного или нескольких дизайнеров. Фред Брукс сравнивает результаты работы комитета с дальновидными подходами в своей статье «Дизайн дизайна» (http://www.youtube.com/watch?v=pC-DlX-PaF4). Если бы сегодня мы сели, чтобы выбрать да Винчи или комитет для определения универсального языка программирования, мы знали бы, кого или каким способом он должен быть спроектирован?

DeveloperDon
источник
0

Может быть, немного по-другому:

Что такое язык? Чтобы быть до смешного простым, это словарный запас, синтаксис и семантика.

Что первое, что вы делаете с языком программирования?
Вы определяете вещи - классы, переменные, методы - вы расширяете словарный запас и семантику.

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

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

Майк Данлавей
источник
0

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

  • Для языковых возможностей «лучший» является субъективным или, по крайней мере (бесконечно) спорным.
  • Некоторые функции не совместимы; Хорошая особенность одного языка может взорваться в сочетании с хорошей чертой другого.
  • Мы еще не закончили с новыми функциями.

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

оборота наступающей бури
источник
-2

Visual Batch - это попытка настраиваемого языка программирования. Ссылка ниже показывает, как этот интерфейс программирования может быть адаптирован к потребностям универсального языка программирования.

http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4

user14869
источник
-2

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

На что это похоже? Строка 0-9 и AF.

Но это сука в использовании. Таким образом, Алан изобретает язык, который может быть переведен на машинный язык и более соответствует тому, что хочет сделать Алан. Билл придумывает другой язык для того, что Билл хочет сделать. Вскоре у вас есть Кобол и Фортран, Лисп и Ява. Все они - просто упрощенные версии машинного языка, легче писать определенные типы программ, но труднее или невозможнее писать другие типы программ. Один хорош для учета, другой хорош для управления космическим челноком.

Энди Кэнфилд
источник
6
Машинный язык не универсален; даже не близко. У каждой машины свой язык.
Хазен
3
Кроме того, это не строка 0-9 и AF. Это 1 и 0.
Дэвид Конрад
@hasen @ Дэвид, разве не разумно предположить, как у @Анди, что каждый язык, с одной точки зрения, является предметно-ориентированным языком и построен на других языках?
Арманд
Я сказал 0-9 и AF, потому что это то, что вы должны были знать, чтобы использовать коды с несколькими штампами на клавишном станке. Это выглядит как 0-1 или 0-15 или 0-255, если вы берете это в качестве чисел, в зависимости от того, насколько большой кусок за раз. И Хансен прав; каждый тип машины имеет свой собственный язык. Почти все ПК сегодня принимают 80386 кодов; даже мой телефон будет! Но iPad не будет.
Энди Кэнфилд
@hasenj и с совершенно разными характеристиками. Мышление, необходимое для программирования 6502, отличается от программирования на x86 и, в свою очередь, отличается от чипа RISC. Очень далеко от универсального.
-2

Просто так,

нет УНИВЕРСАЛЬНОГО компьютера.

не УНИВЕРСАЛЬНАЯ форма плиты.

не УНИВЕРСАЛЬНЫЙ программист.

и даже не УНИВЕРСАЛЬНЫЙ клиент.

Просто нам нужен другой для другого. ;)

necixy
источник
-2

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

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

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

Офир Йоктан
источник
1
Я никогда не видел ни одного достойного корпоративного проекта, использующего менее 4 разных языков. И я не верю ни в одну из этих «выгод» от выбора неподходящих инструментов. Это никогда не работает.
SK-logic
-3

Я думаю, что все ответы «потому что вы не вырезаете статуи карандашом» не имеют смысла.

Кто здесь, TRULY выбирает язык перед каждым новым проектом?

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

C # запрограммирован на / для Windows (хорошо, есть Mono, кто-нибудь здесь запускает C # под приложением Mono каждый день?), И это заставляет пользователей покупать Windows7 / 8, и это зарабатывает деньги для Microsoft.
Другие компании делают то же самое, тогда открытый исходный код знает лучше, а также господин гений ... и у нас много похожих друг на друга языков, это просто эгоистичная природа человечества.

бабуин
источник
Согласовано - нам в основном нужен только «безопасный» язык высокого уровня, «небезопасный» язык системного программирования низкого уровня, все языки ассемблера (по одному на процессор, они неизбежны, но скрыты), а также специальное назначение (специфично для домена) языки (например, SQL). Реальная проблема заключается в том, что никто не может объявить язык «устаревшим» (даже когда разработчик языка пытается это сделать - например, Python 2 против Python 3). Больше новых языков каждый год и отсутствие старых языков означает, что в конечном итоге будет использоваться больше языков, чем программистов. ;-)
Брендан
-5

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

Джордж Кэмпбелл
источник
1
«Сохраненные деньги» - это (несмотря на все усилия бухгалтеров) расплывчатая и туманная концепция в течение жизненного цикла. Подобно тому, как механики не смогли стандартизировать даже один размер ключа, не говоря уже о полном наборе инструментов, так и программная инженерия не смогла стандартизироваться, потому что существует очень много критериев для выбора инструмента (языка) или даже процессора / ОС / среды
Эндрю