it-roy-ru.com

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

Топ-10 языков программирования, согласно индекс TIOBE , похоже, находятся под сильным влиянием C:

1. Java

Язык выводит большую часть своего синтаксиса из C и C++, но имеет более простую объектную модель и меньше средств низкого уровня. - wikipedia.org

2. С

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

3. C #

Во время разработки .NET Framework библиотеки классов изначально создавались с использованием системы компилятора управляемого кода под названием Simple Managed C (SMC). В январе 1999 года Андерс Хейлсберг сформировал команду для создания нового языка под названием Cool, который обозначал "C-подобный объектно-ориентированный язык". - wikipedia.org

4. C++

Он был разработан Бьярном Страуструпом с 1979 года в Bell Labs как усовершенствование языка Си. - wikipedia.org

5. Objective-C

Objective-C - это отражающий объектно-ориентированный язык программирования, который добавляет обмен сообщениями в стиле Smalltalk к языку программирования C. - wikipedia.org

6. PHP

Он переписал эти сценарии как двоичные файлы Common Gateway Interface (CGI) языка программирования C, расширив их, чтобы добавить возможность работать с веб-формами и взаимодействовать с базами данных, и назвал эту реализацию "Персональная домашняя страница/интерпретатор форм" или PHP/FI. - wikipedia.org

8. Python

Python был задуман в конце 1980-х годов, и его реализация была начата в декабре 1989 года Гвидо ван Россумом в CWI в Нидерландах как преемник языка программирования ABC (сам по себе вдохновленный SETL), способного обрабатывать исключения и взаимодействовать с операционной системой Amoeba. - wikipedia.org

ABC (язык программирования) Разработчики утверждают, что программы на ABC обычно примерно на четверть меньше, чем эквивалентные программы на Pascal или C, и более читабельны. - wikipedia.org

9. Perl

Perl заимствует функции из других языков программирования, включая C, сценарии оболочки (sh), AWK и sed. - wikipedia.org

10. JavaScript

В JavaScript используется синтаксис, на который влияет синтаксис языка C. - wikipedia.org

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

24
John Isaiah Carmona

С появлением UNIX в 1970-х годах его стандартный язык системного программирования C быстро стал lingua franca мира программирования. Долгое время C был практически обязательным для каждого программиста. Таким образом, тот факт, что C оказал влияние почти на каждый язык программирования, который так или иначе появился после него, вряд ли удивителен по двум причинам:

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

Но другие языки существовали, и они все еще существуют, некоторые из них даже предшествуют Си - есть семейство LISP (CL, Clojure и Scheme - самые популярные современные диалекты), семейство ML (с несколькими современными диалектами), есть целая армия ОСНОВНЫЕ диалекты (VB.NET и VBA являются современными реализациями), есть Паскаль и его родственники (Delphi - самый известный), а также множество "странных" языков, которые повлияли на многие другие языки и сами изобрели несколько вещей; примеры включают Go, Python, Lua, Haskell (и его предшественник Miranda), Prolog и Erlang. Хотя ни один из этих языков (кроме Python) не входит в ваши топ-10, многие из них имеют стабильную базу пользователей и активное сообщество; они, конечно, не уходят.

Кроме того, следует отметить, что степень влияния C на этих языках сильно разнится: от почти 100% C-совместимых языков C++ и Objective-C до Python (который намеренно отказывается от многих синтаксических особенностей языка Си). И это только синтаксис: с точки зрения семантики, большинство языков в этом списке не имеют много общего с Си. Подавляющее большинство имеет встроенную в язык систему управления памятью и, следовательно, семантику копирования. передача аргументов и т. д. очень разные. Например, JavaScript имеет сильные семантические влияния от Scheme, в то время как его синтаксис был разработан так, чтобы напоминать Java (который, в свою очередь, основывает свои биты и -составляет синтаксис на C, но не его семантику.) Другие различия (за исключением C++ и Objective-C, которые в основном обратно совместимы с C) включают обработку ошибок, правила области видимости, стандартные библиотеки, включение внешнего кода (#include) и тот факт, что многие из этих языков "виртуализированы", то есть работают на интерпретаторе, JIT-компиляторе или виртуальной машине.

Между прочим, Python имеет некоторое влияние на C, но он определенно не "основан на" C. И синтаксис, и семантика довольно радикально отличаются от C, и это по замыслу. Python заимствует функции только из C, где другие альтернативы одинаково "хороши" (согласно "Zen of Python" - введите import this в python интерпретатор).

Что касается будущего программирования; предсказания меняются. Влияние C не проходит, но недавние разработки в области аппаратного обеспечения (многоядерные машины становятся обычным явлением, мощные графические процессоры, процессоры перестают быть типичным узким местом для производительности, быстрые надежные сетевые соединения и т.д.) Требуют радикально различных подходов к программированию. В основном. Любой, кто когда-либо писал многопоточное распределенное приложение на императивном языке, может сказать, что это невероятно сложно, в то время как языки наподобие Haskell имеют функции, которые устраняют большинство типичных проблем и предлагают более абстрактный и более структурированный подход к распределенной, параллельной и параллельной обработке (чистота является важной концепцией в этом контексте). Более новые языки программирования (например, C # или D) уже включают в себя множество функций для поддержки такой идиомы. В любом случае, ни сильное влияние C не оказало на программирование, ни существование не-C-подобных языков не исчезает.

41
tdammers

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

Однако временная шкала "История компьютерных языков" ( http://www.levenez.com/lang/ ) содержит все возможные ответы.

1
S.Lott

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

Также я думаю, что синтаксис в стиле C относительно легко читается. Для сравнения с Паскалем использование символов "{" и "}" для блоков кода более разборчиво, чем "начало" и "конец", которые оптически очень похожи на идентификаторы. Python еще более разборчив, но включение пробелов в синтаксис открывает новые проблемы с редактированием. Другой пример: LISP и JavaScript разделяют несколько идей, но когда то же самое написано на C- синтаксис стиля, он менее неясен.

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

0
Viliam Búr