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

Почему не существует универсального языка программирования? На этот вопрос ответили пользователи сайта 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!

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

 

Комментарии

Страницы

Dmitry пишет:

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

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

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

Пожалуй,  поступлю также. 

Страницы