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

Почему не существует универсального языка программирования? На этот вопрос ответили пользователи сайта Quora.

 

Дин Хью, бывший электротехник

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

Компьютер в данном случае – это чистый холст памяти, ждущий нанесения красок в виде скрипта, приложения или утилита. В зависимости от того, что вы хотите получить в итоге, и от того, с чего начинаете, вы выбираете язык программирования, каждый из которых имеет свою специфику. Некоторые языки просты и приятны в обращении, как пила или разводной ключ. К таким языкам относятся Basic и JavaScript. Для достижения высокой скорости и точности программирования существуют языки С и С++. Это утверждение может вызвать массу споров, но высокая скорость и точность в этом контексте связаны с операционными системами, алгоритмами и другими критическими для скорости задачами программирования. Мистер Тьюринг научил нас тому, что и операционную систему можно написать на Perl или Javascript, но можно и из дуба наждачной бумагой стол вышлифовать, если конечно хватит наждачной бумаги, времени и терпения. О практичности речь не идет.

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

 

Эндрю МакГрегор, инженер 

Немногие языки могут использоваться практически для любой цели, и все они различаются по сложности. К ним относятся , C++, Haskell, Rust, Algol, Lisp или Scheme, Forth, PL/1 и Assembler.

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

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

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

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

Rust же слишком молод для того, чтобы повсеместным, но дайте ему 20 лет. Возможно, этот язык близок к тому, чтобы стать универсальным языком, но самым практичным на сегодняшний день является С++.

 

 

 

Эльфеус Мэдсен, математик, притворяющийся программистом

Многие отвечали на этот вопрос, приводя в пример языки, подходящие для любых целей; C, Assembly и Machine Language являются самыми масштабными примерами. Конечно, с точки зрения Тьюринга эти языки являются завершенными, но они не настолько хороши для исследовательского программирования или прототипирования, так что они не проходят проверку на универсальность. Мне также нравится Python и Ruby, но в этих языках «близость к железу» означает «просмотрите свою программу, найдите самые активные ее части и перепишите эти части на С». Едва ли эти языки являются универсальными.

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

Некоторые из этих языков, такие как Common Lisp, Scheme и Smalltalk начинают как высокоуровневые, но при этом имеют механизмы (начиная от опционального ввода и заканчивая представлением для аппаратных команд низкого уровня с использованием встроенного ассемблера), позволяющие с легкостью достичь низкого уровня. Другие же, например, Forth, начинают как низкоуровневые, но могут с легкостью переходить на высокий уровень. Такие языки в прямом смысле позволяют создавать мини-языки, идеально вписывающиеся в оригинальный синтаксис исходного языка, что заметно упрощает решение сложных задач.

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

Итак, если эти языки способны на все, почему их не использует все больше людей? К сожалению, причина заключается в их простоте. Для ее достижения им приходится жертвовать математической приоритетностью, что многих сбивает с толку. Lisp использует префиксную нотацию - (+ 1 2 3) и получает 6. Forth использует постфиксную нотацию - «1 2 + 3 +». Получает 6. А Smalltalk оценивает все слева направо, поэтому из «1 + 2 * 3» получает 9 (это результат того, как Smalltalk передает сообщения объектам, цифры – это объекты, а операции – сообщения).

И хотя как большинство поначалу находят это странным, самое забавное заключается в том, что на самом деле все не так запутанно. Это всего лишь дело привычки. Сравните эти языки с любым языком на основе Algol (C, Pascal, PHP, Python и т. д.), который в котором присутствует иерархия выполнения математических действий, которая, как это ни парадоксально, имеет тонкие отличия от одного языка к другому. Все эти правила слишком многочисленны и труднозапоминаемы. Легче просто заключить все в круглые скобки, чтобы не пришлось беспокоиться о причудливых правилах приоритетности.

 

Уильям Шайн, кандидат наук по информатике и математике, университет Хьюстона (1995)

Как и было отмечено другими пользователями, С и семейство С являются универсальными языками. К ним относятся C, C++, Objective C, Objective C++ и Swift. Можно было бы добавить сюда Rust. Современные компиляторы С и С++ позволяют писать встраиваемый ассемблерный код. Не то, чтобы это было прекрасной идеей. И они почти все могут взаимодействовать между собой. С++ может использовать библиотеки С, Swift – библиотеки С и Objective C.

Python, Ruby, и Java могут использовать библиотеки C. В С вписаны преобразователи JavaScript. Так что взаимодействие действительно активное. Для достижения сырой производительности подходят С и компания. Если вам нужно написать много кодов быстро, первыми на очереди стоят JavaScript, Python и Ruby. Если вам важна скорость, безопасность и автоматическая сборка мусора, возможными вариантами будут C #, Java и Swift. . Если бы мне пришлось выбирать один язык программирования для всех целей, я бы выбрал C ++.

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 2
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Читайте также

 

Комментарии

Страницы

Аватар пользователя mike

Для кого этот перевод? Вперемешку с глупостями и без ответа на вопрос.

А ответ прост: языки разрабатывались в разное время для разных состояний архитектур "железа". Где-то делался упор на одно, где-то на другое и подбиралась матлогика для парадигмы. Увы, матологик много, как и амбиций разработчиков. :)

Не ищите ответ в английском бреде.

Кстати, разновидностей  C/C++ -- воз и малая тележка, изучить все невозможно, да и незачем.

"Железо" развивается. Не знали?

Кол.

Майк скоро один тут будет строчить - одинокий волк Макграйв - последний воин-комментатор КВ,  ты велик и беспощаден в своем яростном и бессмысленном (для кого?) трепе! :-) 

-3
Аватар пользователя mike

Майк скоро один тут будет строчить...

Да. Хреново это, но отвлекает от бренности жизни. :)

Спасибо, "Вести", что вы ещё живы.

+1
Аватар пользователя Dmitry

Майк скоро один тут будет строчить

действительно, даже год назад кипели не всегда "бессмысленные и беспощадные" споры, а сейчас?..

Dmitry пишет:

Майк скоро один тут будет строчить

действительно, даже год назад кипели не всегда "бессмысленные и беспощадные" споры, а сейчас?..

А какие споры кипели здесь,  лет 13 назад! Ресурс стал малопосещаем,  активисты состарились,  а Майку просто скучно. Он бы и один сюда писал,  поскольку,  администрация его еще помнит,  будет читать. 

Аватар пользователя mike

А по топику -- не?

(Думал, счас навалятся!.. Где там.)

:)

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

:)

mike пишет:

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

:)

Ну тебя в пень с твоими задачками:-)

 

Аватар пользователя mike

Petro42 пишет:

Ну тебя в пень с твоими задачками:-)

А задачки-то и нет. 

Ключевое слово -- "лучше". Оно распадается на "быстродействие" (одно решение) и "простота кода" (другое решение). В первом случае -- на асме (неск. десятков строк), во втором -- на Пайтоне -- несколько строк. Код на Си занимает промежуточное положение по этим показателям. Короче, язык = "чё надо".

Ну тебя в пень...

Грубишь. 

Аватар пользователя Dmitry

Ресурс стал малопосещаем

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

з.ы. возьму летний тайм-аут, потом почитаю Михаила, Эдуарда etc., не пропадайте smiley...

Аватар пользователя mike

Ресурс стал...

Имхо Петро имел в виду комментируемость. А так посещаемость позволяет сайту попадать в топ 100 белресурсов. Не знаю, как это удаётся. Я не спец в этих делах, мне главное, чтобы мои софтинки у заказчиков работали без нареканий.

Страницы