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

23

Топ 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. Цель-C

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

6. PHP

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

8. Питон

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 и / или находятся под сильным влиянием нескольких других способов, по крайней мере, в начале. Зачем?

Джон Исайя Кармона
источник
15
Наличие c подобного синтаксиса не совпадает с основанным на c.
Одед
15
Кроме того, TIOBE - это мусорный индекс.
DeadMG
3
Скорее, я могу спросить, почему языки программирования на C более популярны?
Manoj R
3
@YannisRizos Отличное решение вопроса! Это на самом деле большой вопрос сейчас.
maple_shaft
16
Потому что C является потомком ALGOL, а ALGOL предназначен для того, чтобы блокировать императивные лабораторные работы, как Авраам, для христиан, евреев и мусульман.
Инго

Ответы:

40

С появлением UNIX в 1970 -х годах, его стандартные системы программирования языка C быстро стал общепринятым языком в мире программирования. Долгое время 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 (который намеренно отказывается от многих синтаксических возможностей языка C). И это только синтаксис: с точки зрения семантики большинство языков в этом списке не имеют много общего с C. Подавляющее большинство имеет встроенную в язык систему управления памятью и, следовательно, семантику копирования, передачу аргументов и т. Д. , очень разные. Например, 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) уже включают в себя множество функций для поддержки такой идиомы. В любом случае,

tdammers
источник
Хороший ответ, но «процессор перестает быть типичным узким местом производительности»? По моему опыту, проблем с производительностью предостаточно - процессор, IO, вы называете это. Если нет, профилировщики не будут необходимы, даже если они не очень эффективны.
Майк Данлавей
6
@MikeDunlavey: Обычно узкие места, с которыми я сталкиваюсь, вызваны вводом-выводом, сетью, производительностью кэша ЦП, пропускной способностью шины и (неэффективной) межпроцессорной связью. В те времена процессор был почти неизбежным узким местом; это просто больше не правда.
tdammers
1

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

Тем не менее, хронология «История компьютерных языков» ( http://www.levenez.com/lang/ ) содержит все возможные ответы.

С. Лотт
источник
6
Поскольку Великобритания от 1600-1880 примерно был главным промышленным и финансовым центром мира, а затем в Соединенных Штатах с 1880 года по настоящее время (<- спорное). Он стал языком международного бизнеса, и на нем свободно говорят более 2 миллиардов человек по всему миру. Никто не хочет говорить по-испански или по-голландски :)
maple_shaft
6
@maple_shaft - "никто не хочет говорить по-испански" ?! ... ты вообще знаешь, во скольких странах на нем говорят? en.wikipedia.org/wiki/Spanish_language
Ладья
12
@ S.Lott: Вы имеете в виду ту часть, где Британская империя была самой большой империей, которая когда-либо существовала, и занимала 25% всей поверхности мира? Что за "не мощный"?
DeadMG
3
@DeadMG: я не говорю о мире. Я говорю о США в 1700-х годах, когда французы заключили англичан в небольшую область вдоль побережья. Я говорю о том, что британцы проигрывают военные действия только в этом театре. Французы четко контролировали большую часть того, что он стал США. Еще. США завели разговор по-английски. Не французский Тот же анализ относится и к C. Это сложная история с большим количеством влияющих факторов. Там нет тривиального, погладить ответ.
S.Lott
4
@ S.Lott Французы не выиграли каждую встречу. Просто глядя на Северную Америку, они выиграли большинство; но проигрыш 4 из 5 главных сражений в АН в 1559/60 привел к сокрушительному поражению в театре. Взятия Фортов Тикондерога и Ниагара, Равнины Авраама и битвы при Рестигуше - все это были победы британцев. Отрезав снабжение / подкрепление, последний сделал победу французов в Сент-Фуа неактуальной.
Дэн Нили
0

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

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

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

Вильям Бур
источник
-1

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

Влияние Си исходит из многих источников - оно низкого уровня, широко распространено, имело поддержку как в кругах Unix, так и в кругах Microsoft. Это также выживание самой подходящей проблемы - легко увидеть, что краткий C-подобный синтаксис был более привлекательным, чем многословный, основанный на Алголе синтаксис Паскаля и других конкурентов C в 1970-х и 1980-х годах. Следовательно это было широко принято языками, которые прибыли после этого.

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

Хороший хронологический обзор истории языка, чтобы обдумать

scrwtp
источник
Ты не правильно понял. И PASCAL, и C являются потомками ALGOL.
Инго
Да, но сам Алгол является потомком Фортрана и выбрал некоторые конструкции, о которых я говорил, (программа, конец, подпрограмма по сравнению с скобками с). Тем не менее, на самом деле я имел в виду алголоподобный синтаксис. Ред.
scrwtp
краткий C-подобный синтаксис был более привлекательным, чем многословный производный от Алгола Паскаль и другие конкуренты C в 70-х и 80-х годах +1 за это. начинающие программисты - люди тоже конечные начинающие - те, кто считал, что удобно ставить знаки препинания на слова вроде начала и конца, проигравшие битву на фигурные скобки конец истории
комнат
Я не вижу доказательств того, что синтаксис C менее скрыт, за исключением того, что большинство разработчиков знают C или какой-то язык, связанный с C, и поэтому он выглядит более знакомым. AFAICT, C победил Pascal из-за его структуры и того факта, что реализациям не приходилось накатывать свои собственные ссылки, а не синтаксис.
Дэвид Торнли
@ Дэвид. Из того, что я помню, одной из причин победы C над другими языками была относительная простота доступа к памяти в C (то есть указатели). Я знаю, что сейчас они открыты, но тогда, когда 1 КБ ОЗУ было много памяти, это была очень мощная функция языка. Я знаю, что другие языки предоставляют функции, подобные указателю, но не так легко, как C.
Данк
-3

Большинство языков, которые вы перечисляете, практически не имеют ничего общего с Си, кроме несущественного синтаксического сходства. Единственными двумя действительными производными C являются Objective-C и C ++.

DeadMG
источник
Если мы не рассматриваем синтаксис, то единственными различиями между любыми языками является наличие общих языковых конструкций (циклы, условные выражения, переменные, абстракции подобных классов и замыканий и т. Д.) И то, что все они соответствуют поведению машины. код. Все языки низкого уровня похожи друг на друга, и на этом этапе все языки высокого уровня чрезвычайно похожи друг на друга.
maple_shaft
2
Не следует думать о языке как о его функциональности, а о том, как он передает поведение приложения. Ваш исходный код - ваш самый низкий уровень документации, и один пишет исходный код для людей, а НЕ для машин . Если бы мы писали код строго для машин, то все мы были бы программировать на ассемблере.
maple_shaft
1
@maple_shaft: Совершенно верно! В одном из интервью меня попросили объяснить разницу между машинным языком (ассемблер) и языком программирования. Мой ответ был: «Машинный язык для машин, язык программирования для программистов».
Треб
1
@maple_shaft: синтаксис не имеет отношения к его общению с людьми . Если бы я заменил английское слово другим написанием, английский все равно был бы тем же языком. Синтаксическая форма не имеет значения, коммуникативной является языковая семантика.
DeadMG
3
@DeadMG: Но вопрос о синтаксисе. Вы можете рассмотреть синтаксические сходства быть несущественными, но человек , задающий вопрос , хочет знать , почему эти несущественные сходства существуют .
Николь Болас