почему бы не объединить лучшие возможности всех существующих языков программирования и не приспособить его к универсальному языку программирования?
почему бы не объединить лучшие возможности всех существующих языков программирования и не приспособить его к универсальному языку программирования?
Ответы:
По той же причине вы не используете швейцарский армейский нож, чтобы вырезать курицу ...
Швейцарский армейский нож, как правило, имеет лезвие, а также различные инструменты, такие как отвертки и консервные ножи и многие другие. Эти насадки укладываются в рукоятку ножа через механизм шарнирной точки ...
Конструкция ножа и его гибкость привели к всемирному признанию ...
Потому что
То, что у вас есть в программировании, является очень большой проблемной областью. Эта область чрезвычайно и во многих направлениях.
Вот почему встроенные контроллеры полета написаны на C, а веб-сайты написаны на PHP, Java, Rails, .NET и многих других.
Для встроенного контроллера полетов у меня есть около 128 КБ памяти, и, кроме того, если мой код получает необработанное исключение, когда самолет падает, 200 человек погибают, а мне предъявляют иск на сумму 1 млрд. Долл., И мне приходится посылать инженеров на все аэропорт в мире, чтобы исправить самолеты, которые основаны, теряя моих клиентов $ 10 миллионов в день. Я должен работать с языком, который очень плотный и имеет небольшое количество движущихся частей, которые могут работать неправильно.
Для моего веб-приложения у меня есть несколько ГБ памяти для работы, но скорость сети ограничена (в меньшей степени каждый день, но это, вероятно, самое большое ограничение в Интернете). Я буду искать язык, который дает мне массу функций и производит вывод, который может быть передан максимально быстро. Мне действительно все равно, если мой сайт выйдет из строя, я, возможно, потеряю несколько продаж (100 долларов) и мне придется исправлять вариант использования, который бомбил, ничего страшного
Веб-сайты не были написаны на C более 15 лет (кто-нибудь делает какие-либо сценарии cgi?), И, насколько я знаю, диспетчеры полетов только сейчас начинают смотреть на C ++, но даже тогда очень ограниченно.
Если у вас нет ящика с инструментами, или у вас есть только один из тех маленьких молотков с битами отвертки в полой ручке, тогда я вас очень сочувствую.
Шутки в сторону. Если вы идете в автомагазин, у вашего механика есть только один универсальный инструмент? Он (или она) - профессионал с инструментами профессионального уровня, специально предназначенными для выполнения различных задач по ремонту автомобилей.
Аналогичным образом, профессиональные разработчики программного обеспечения должны обладать достаточным набором инструментов для осуществления своей торговли. Если вы откроете свою панель инструментов и увидите только [программный эквивалент] отвертки Philips, то вы не сможете считать себя профессионалом.
Вы можете повернуть болт с помощью гаечного ключа с открытым концом, торцевого ключа, гаечного ключа с храповым механизмом или разводного гаечного ключа. Вы можете даже повернуть болт в крайнем случае с помощью плоскогубцев, неуклюжих, с незначительными или серьезными повреждениями. Но затянуть болт кувалдой довольно сложно.
Другой вид ответа на других - я на самом деле думаю , что есть потенциал для языка , чтобы стать «универсальным» один, позволяя особенности и парадигмы многих других языков, хотя и не может быть, строго разработан языком , который вы могли бы думать.
Чтобы использовать приведенную выше аналогию Бретмджонсона , идея о том, что каждый язык программирования является инструментом внутри коробки (или на швейцарском армейском ноже), является допущением, которое делают все, но на самом деле является ошибочным допущением.
Что если языком программирования был набор инструментов?
Я имею в виду, что если вы можете добавлять и удалять функции из языка по своему усмотрению и иметь свой собственный набор инструментов с необходимыми в нем инструментами - даже если инструменты предназначены для разных целей.
Концепция уже существует частично. Например, языки, такие как Nemerle, позволяют вам добавлять синтаксис к языку , и, таким образом, вы можете взять «лучшую функцию из языка X» и добавить ее в Nemerle (или свой собственный). Это не обязательно означает, что вы все время должны писать собственные макросы - каждый язык (или парадигма) может быть определен внутри макроса в стандартной библиотеке - так, чтобы вы могли import Haskell; import Prolog;
, и начать писать на двух языках, как если бы он был частью Твой язык?
Тогда возникает вопрос - как вы можете настроить функции различных языков / парадигм для взаимодействия друг с другом? Хотя я не могу ответить на это, фреймворки, такие как .Net и JVM, предлагают некоторые решения - языки по крайней мере частично совместимы из-за способа их компиляции. Вы можете взять любой код, написанный на C #, например, и использовать его из F # без нареканий.
«Проблема» с решением, как сегодня, заключается в том, что для совместного использования этих языков необходимо создавать их как отдельные проекты, которые не могут ссылаться друг на друга - у вас может быть только односторонняя ссылка. Языковой барьер состоит в том, что каждый проект компилирует все свои файлы отдельно в Common Intermediate Language, прежде чем любой другой проект сможет получить к нему доступ.
Шагом к устранению этого барьера будет возможность компиляции кода на разных языках (например, C # и F #) внутри одного проекта. Теоретически вы можете скомпилировать каждый файл отдельно (или в группах - если они имеют частичные типы или циклические ссылки), а затем скомпилировать файлы другого языка, которые могут получить доступ к уже скомпилированным (CIL) объектам. Вы должны были бы строго определить порядок компиляции, чтобы это работало, хотя - но порядок компиляции уже требуется в случае F #.
Во всяком случае, я не говорю, что "определенно может быть универсальный язык". Я предполагаю, что есть потенциал для гораздо лучшей совместимости между языками, чем то, что существует в настоящее время. На самом деле, вряд ли это очень скоро улучшится, просто из-за огромного объема работы по реализации языка и библиотек, инструментов и т. Д., Необходимых для его использования.
Лучшие свойства некоторых языков противоречат лучшим возможностям других.
Например: отражения с учетом типа - это действительно хорошая функция, но она не будет стоить слишком дорого на языке с плохой типизацией, но иногда свободная типизация может быть реальным преимуществом.
Даже на одном языке вы не всегда можете использовать все лучшие функции одновременно, потому что они конфликтуют друг с другом.
"Мастер на все руки, да путем ничего и не умеет." приходит на ум
Некоторые программы требуют скорости, другие - большого объема памяти или быстрого доступа к диску. Некоторые языки хороши в одном, но плохи в другом - я не думаю, что вы получите язык, который был бы хорош вообще.
Таким образом, хотя вы можете написать практически любую программу на любом языке, то, что вы получите, не обязательно будет «лучшей» программой, которую вы могли бы написать для решения этой проблемы.
Есть. Без инструмента лучше всем, но некоторые инструменты , как и многие другие языки программирования служат для всех целей, а не лучше всех.
Вы можете выбрать лучший инструмент для работы, но есть языки программирования, которые можно использовать для любых целей, и вы можете выбрать их. Я не рекомендую это, но это возможно.
Из-за чего-то, что я называю «парадоксом обобщения / специализации», которое, вероятно, имеет другое название и на самом деле не является парадоксом
Чем более обобщенный язык программирования, тем больше кода требуется для достижения чего-либо. Чем более специализированный язык, тем меньше вы можете достичь с ним.
Языки формируют способ мышления людей. Это верно для естественных языков. Если ребенок знает только один язык с цифрами «один, два, много», учить его детской математике ... сложно. (Извините, у меня нет ссылки) В английском мы говорим о разных временах, как будто они были местами - поэтому концепцию путешествия во времени можно представить. На некоторых других языках идея путешествий во времени никогда не возникнет у ее носителей.
Это также верно для языков программирования.
Следовательно, если у нас будет один язык программирования, все будут думать обо всех вычислительных задачах одинаково. Таким образом, мы не будем изучать альтернативы, и лучший способ что-то сделать останется нераскрытым.
Наиболее близкая вещь, которую мы имеем к универсальному языку, - это C. Язык C очень близко соответствует базовым аппаратным концепциям (как на самом деле все делается на оборудовании), и программы на каждом * языке могут быть преобразованы в C. (Посмотрите, как CFront использовал компиляторы C для ассемблера задачи) Проблема с C в основном в том, что вышеупомянутые преобразования не имеют смысла с точки зрения программистов на C.
«Лямбды» всегда были возможны в C. Синтаксис отключен, включая код, разбросанный по всему проекту / файлу, поэтому это не было предпочтительным решением. С версией no-capture / upvalue / etc определите функцию где-нибудь еще и передайте указатель на функцию. (см. qsort () ). Чтобы использовать лямбда-выражения с захваченными значениями, количество и сложность кода, который вы должны написать, сильно возрастают - насколько я знаю, на самом деле никто никогда не писал код для использования этого метода программирования на C. В отличие от языков, где лямбды являются частью языка и используются повсеместно.
Основное различие между C и C ++, как вы можете задать C ++ , чтобы заботиться о вещах для вас; но тогда из одной строки кода вы уже не видите, сколько вы на самом деле просите об этом. Ответ становится: это зависит (от всего этого другого кода).
Некоторые языки программирования отлично подходят для конкретных задач, но там, где большинство современных программ, используемых по всему миру, просто не имеет смысла, если они запрограммированы на этом языке. То есть, если для начала можно использовать язык для реализации этой программы, то это не само собой разумеющееся.
Невозможность по техническим причинам иметь универсальный язык? Это полная чушь. Вы могли быиметь универсальный язык, который охватывает все основы. Проблема в основном историческая: разные языки были придуманы, чтобы делать разные вещи и использоваться в разных сообществах. Многие из них застряли. Добавьте к этому предпочтения (vi! Emacs! Подождите, я имел в виду Java! C #, подождите, я имел в виду Microsoft, Open Source и т. Д. И т. Д.) И общее вложение исторических происшествий ... Посмотрите на естественные языки на крошечной земле Масса, как некоторые европейские страны, чтобы увидеть, насколько сумасшедшей может стать эта тема. В некоторых городах есть своя гордость и радость, маленький диалект, на котором говорят только они. Нации и сообщества программистов ничем не отличаются, и сообщества программистов не являются более рациональными. Если бы они были, мы бы все говорили на эсперанто и программировали на Универсальном что-нибудь «что-то» ...
Ошибочно думать, что «объединение всех функций» сделает язык лучше.
У вас больше шансов получить раздутый, сложный, нечитаемый беспорядок.
Хороший языковой дизайн требует выбора и компромиссов. Возможно, лучшие / самые революционные / самые успешные языки - это те, которые что- то извлекают и предоставляют лучшую альтернативу, а не добавляют новые вещи.
Дядя Боб Мартин - последний язык программирования
goto
. Но мне нравится остальная часть ответа. Главное, что делает C, это позволяет вам не заботиться о том, где именно в памяти все находится и что находится в каком регистре, в какое время, и это скрывает счетчик программы (опять же, с точки зрения точного адреса, на котором он находится. Вы можете переместить его почти на уровне точности сборки с goto).
Нет такого инструмента, который обладает всеми лучшими функциями. Например, приятные особенности Javascript и Scheme заключаются в том, что они маленькие, поэтому, если вы начнете упаковывать функции, вы уже потеряли их.
Тем не менее Cobra выглядит многообещающе в том смысле, что обладает всеми приятными возможностями других языков. :-)
Потому что, если вы создадите такой язык, это будет еще один новый язык. Вы можете получить большую базу поклонников, но все остальные языки все еще будут существовать.
C до сих пор существует, хотя с тех пор было изобретено много новых языков.
Вы могли бы сказать, что python такой универсальный язык, но есть и ruby.
Причина, по которой существует много языков, заключается просто в том, что есть много программистов, и некоторые из них любят создавать новые языки.
Причина, по которой нет единого универсального языка, с которым все согласны, заключается в том, что программирование как ремесло не продиктовано каким-либо учреждением, которое принимает все решения. Каждый волен делать то, что хочет.
Это хорошая вещь.
Со всем, что написано до сих пор, трудно добавить много нового обоснования, но я добавлю несколько.
Эволюция: это не просто биологические системы, которые внедряются, видоизменяются и претерпевают выживание наиболее приспособленных конкурентов за ресурсы и нишу, которую они называют своей. Конкуренция хороша и толкает вещи вперед.
Зрелость: Мы создавали компьютерные языки, вероятно, менее века. У нас пока нет ответа, потому что мы еще не знаем всех вопросов.
Отдельное происхождение: Не уверен, что это правильное слово, но в мире существует множество систем письменности, которые появились во многих географических регионах. Подумайте о клинописи, которая была частично продиктована требованиями вырезания в глиняных табличках. Вспомните санскрит, греческий, иврит, римский, арабский алфавиты. Иероглифы, китайский метод красивого письма с более чем 6000 символами, который используется во многих странах Восточной Азии. Подумайте о более современных смешанных алфавитах с фонетической основой, таких как кириллица, катакана и хиригана. Я не лингвист, так что не оскорбляйте неточности слишком резко, но когда культурам всего мира нужно что-то, они создают это и делают это своими силами по необходимости. Компьютерные языки появились вместе, когда было много общения по всему миру, например, системы Imperial и Metric, пришел из мест с мощной идеей лидерства. Но языки программирования служат многим различным культурам (некоторые из них корпоративные культуры), поэтому они отражают людей, которые их создали. Компьютерные языки идут с культурным наследием, которое сформировало их дизайн и использование. В культуре ядра ОС маловероятно, что C и C ++ скоро станут устаревшими для Java (или наоборот), потому что они позволяют генерировать собственный код, тесно / эффективно взаимодействовать с оборудованием для создания уровней аппаратной абстракции и имеют значительную установленную базу.
Проектирование дизайна. Языки программирования используют разные организационные парадигмы. COBOL и Ada были из комитетов, которые были частью DOD, которые имели большую иерархию. Если я правильно помню, C, C ++, Java и, вероятно, многие другие пришли от одного или нескольких дизайнеров. Фред Брукс сравнивает результаты работы комитета с дальновидными подходами в своей статье «Дизайн дизайна» (http://www.youtube.com/watch?v=pC-DlX-PaF4). Если бы сегодня мы сели, чтобы выбрать да Винчи или комитет для определения универсального языка программирования, мы знали бы, кого или каким способом он должен быть спроектирован?
Может быть, немного по-другому:
Что такое язык? Чтобы быть до смешного простым, это словарный запас, синтаксис и семантика.
Что первое, что вы делаете с языком программирования?
Вы определяете вещи - классы, переменные, методы - вы расширяете словарный запас и семантику.
Почему? Так что теперь вы можете сказать то, что вы не могли сказать раньше.
Нравится вам это или нет, вы создали новый специальный язык.
ИМХО, вещь, которую нужно искать на языке общего назначения, - это если она позволяет легко создавать языки специального назначения.
Помимо точения армейского ножа аргумента (который имеет точку - это более сложно разработать хорошую широкий спектр языка , чем предметно-ориентированного один - но это не означает , что такой язык не был бы и возможно и хорошая идея), есть проблемы с «сочетанием лучших возможностей»:
Короче говоря, языковой дизайн сложнее и сложнее. Хотя, возможно, вы захотите взглянуть на Scala .
Visual Batch - это попытка настраиваемого языка программирования. Ссылка ниже показывает, как этот интерфейс программирования может быть адаптирован к потребностям универсального языка программирования.
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
Существует универсальный язык программирования. Он называется «машинный язык», и все на любом другом компьютерном языке в конечном итоге выполняется как машинный язык.
На что это похоже? Строка 0-9 и AF.
Но это сука в использовании. Таким образом, Алан изобретает язык, который может быть переведен на машинный язык и более соответствует тому, что хочет сделать Алан. Билл придумывает другой язык для того, что Билл хочет сделать. Вскоре у вас есть Кобол и Фортран, Лисп и Ява. Все они - просто упрощенные версии машинного языка, легче писать определенные типы программ, но труднее или невозможнее писать другие типы программ. Один хорош для учета, другой хорош для управления космическим челноком.
Большинство ответов здесь сосредоточены на использовании лучшего инструмента для каждой проблемы. Я не верю, что это достаточно веская причина.
Если вы смотрите на крупные компании, то обычно компания склонна использовать один (или небольшое количество) языков и технологий, даже если для конкретного проекта есть какой-то лучший язык.
Это сделано потому, что преимущества, возникающие в результате улучшенной стандартизации, упрощенной поддержки, совместного использования кода и т. Д. (В большинстве случаев) превышают добавленную стоимость конкретного языка.
Я думаю, что все ответы «потому что вы не вырезаете статуи карандашом» не имеют смысла.
Кто здесь, TRULY выбирает язык перед каждым новым проектом?
Правда, нам нужно всего лишь несколько языков программирования, и мир программирования будет лучше таким образом: люди будут сосредоточены на создании на язык сценариев лучше вместо того , чтобы быть разбросаны по питон / рубин / Perl / younameit, например.
C # запрограммирован на / для Windows (хорошо, есть Mono, кто-нибудь здесь запускает C # под приложением Mono каждый день?), И это заставляет пользователей покупать Windows7 / 8, и это зарабатывает деньги для Microsoft.
Другие компании делают то же самое, тогда открытый исходный код знает лучше, а также господин гений ... и у нас много похожих друг на друга языков, это просто эгоистичная природа человечества.
Мы должны обратиться к экономике, чтобы ответить на этот вопрос. Если бы это сэкономило деньги на бизнес, если бы у нас был только один язык, мы бы его имели. Они будут стандартизировать это и потребовать, чтобы все использовали это. Другие языки томились бы в пыльных академических зданиях и подвалах энтузиастов с дикими глазами. Этого не произошло, поэтому их использование не должно быть стимулом для получения прибыли на универсальном языке программирования, иначе можно было бы к настоящему времени эволюционировать.