Чому на декілька популярних мов програмування впливає 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, яка розшифровувалась як "С-подібний об'єктно-орієнтована мова". - wikipedia.org

4. C ++

Він був розроблений Bjarne Stroustrup, починаючи з 1979 року в Bell Labs як доповнення до мови С. - wikipedia.org

5. Завдання-С

Objective-C - це відображаюча, об'єктно-орієнтована мова програмування, яка додає повідомлення в стилі Smalltalk до мови програмування C. - wikipedia.org

6. PHP

Він переписав ці сценарії як бінарні файли загального інтерфейсу шлюзу (CGI) для мови програмування C, розширивши їх, щоб додати можливість роботи з веб-формами та спілкуватися з базами даних, і назвав цю реалізацію "Особиста домашня сторінка / Форми інтерпретатора" або PHP / FI. - wikipedia.org

8. Пітон

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

ABC (мова програмування) Його дизайнери стверджують, що програми ABC, як правило, приблизно на чверть розміру еквівалентних програм Pascal або C, і більш читабельні. - wikipedia.org

9. Перл

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

10. JavaScript

JavaScript використовує синтаксис, на який впливає C. - wikipedia.org

Виявляється, більшість із них запозичує свій синтаксис у С та / або зазнає сильного впливу декількома іншими способами, принаймні у своїх початках. Чому?


15
Мати синтаксис c як не те саме, що базуватися на c.
Oded

15
Крім того, TIOBE - це нежелатний індекс.
DeadMG

3
Скоріше я можу запитати, чому мови програмування на основі С більш популярні?
Маной Р

3
@YannisRizos Велике врятування питання! Зараз насправді велике питання.
maple_shaft

16
Оскільки С - нащадок АЛГОЛу, а АЛГОЛ - це блокувати імперативні лабораторії, що Авраам є для християн, євреїв та мусульман.
Інго

Відповіді:


40

З підйомом UNIX у 1970-х його стандартна мова програмування систем C швидко стала лінгва-франкою світу програмування. Довгий час C був практично обов'язковим для кожного програміста. Як такий, той факт, що C вплинув майже на кожну мову програмування, яка вийшла після нього так чи інакше, навряд чи дивує з двох причин:

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

Але існували інші мови, і вони все ще є, деякі з них навіть переважають C - там сімейство LISP (CL, Clojure і Scheme - найпопулярніші сучасні діалекти), сім'я ML (з кількома сучасними діалектами), є ціла армія БАЗОВІ діалекти (VB.NET і VBA - це сучасна реалізація), є Паскаль та його родичі (Delphi - найвідоміший) та багато "дивних" мов, які впливали на багато інших мов і самі винайшли кілька речей; приклади включають Go, Python, Lua, Haskell (та його попередника, Miranda), Prolog та Erlang. Хоча жодна з цих мов (крім Python) не входить до вашої топ-10, багато з них мають стабільну базу користувачів та активну спільноту; вони точно не йдуть.

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

Python, до речі, має деякий вплив С, але він, звичайно, не "заснований" на C. І синтаксис, і семантика досить кардинально відрізняються від C, і це за конструкцією. Python запозичує лише функції C, де інші альтернативи однаково "хороші" (відповідно до "дзен Python" - тип import thisв інтерпретаторі python).

Що стосується майбутнього програмування; прогнози різні. Вплив C не згасає, але останні розробки в апараті (багатоядерні машини стають звичними, потужні GPU, процесор перестає бути типовим вузьким місцем продуктивності, швидкі надійні мережеві з'єднання тощо) вимагають кардинально різних підходів до програмування загалом. Кожен, хто коли-небудь писав багатопотокове розподілене додаток на необхідній мові, може сказати, що це надзвичайно важко, тоді як мови, як Haskell, мають функції, які усувають більшість типових проблем і пропонують більш абстрактний і більш структурований підхід до розподіленої, одночасної та паралельної обробки (чистота є важливим поняттям у цьому контексті). Новіші мови програмування (наприклад, C # або D) вже містять багато функцій для підтримки такої ідіоми. У будь-якому випадку,


Приємна відповідь, але "ЦП перестає бути типовим вузьким рівнем продуктивності"? На мій досвід, проблем з продуктивністю багато - CPU, 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 років призвів до нищівної поразки в театрі. Захоплення фортів Тикондерога та Ніагари, рівнини Авраама та битва при Рестігуше були усіма перемогами англійців. За рахунок припинення поставок / підкріплення останній зробив перемогу французів у "Сент-Фою" неважливою.
Dan Neely

0

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

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

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


-1

Мови програмування розвиваються з часом так само, як природні мови, при цьому деякі старі мови впливають на цю еволюцію сильніше, ніж інші, тоді як інші затухають у незрозумілості та їх вплив важче простежити на рівні поверхні, тобто синтаксису.

Вплив C походить з багатьох джерел - він низький, широко розповсюджений, мав підтримку як в колах Unix, так і в Microsoft. Це також виживання найбільш придатного питання - легко помітити, що лайний синтаксис подібний С мав більше привабливості, ніж багатослівний синтаксис Паскаля та інших конкурентів С у 1970-х та 1980-х роках. Отже, вона була широко прийнята мовами, що прийшли після неї.

Коли нині зростає важливість багатопотокового програмування та функціональних мов, які особливо добре підходять до нього, я б сказав, що ми побачимо, що їх вплив зростатиме в майбутньому. Справа в суті: Python, який навіть внесли цей список у пост запитання.

Приємний перегляд історії мов, на який слід замислитися


Ви неправильно зрозуміли І PASCAL, і C є нащадками ALGOL.
Інго

Щоправда, але сам Алгол є потомком Фортран і вибрав деякі конструкції, про які я мав на увазі (програма, кінець, підпрограма порівняно з дужками c). Все-таки те, що я мав на увазі, був насправді синтаксисом, схожим на Алголь. Відредаговано.
scrwtp

короткий C-подібний синтаксис мав більше привабливості, ніж багатослівний синтаксис, що походить від Algol Паскаля та інших конкурентів C у 70-80-х роках +1. починають програмісти - люди теж закінчуються, починають ті, хто вважав, що зручно зіставляти знаки пунктуації на слова, такі як початковий кінець, програв битву з фігурними дужками кінець історії
гнат

Я не бачу жодних доказів того, що синтаксис C є менш незрозумілим, за винятком того сенсу, що більшість розробників знає C чи якусь мову, що стосується С, і тому це виглядає більш звично. AFAICT, C перемогла Паскаля через його структуру, і той факт, що реалізаціям не довелося наводити власне посилання, а не синтаксис.
Девід Торнлі

@ Девід - Як я пам’ятаю, одна з причин, коли C перемагала над іншими мовами, була через відносну легкість доступу до пам’яті в C (тобто вказівники). Я знаю, що вони вже зараз, але коли в 1 КБ оперативної пам’яті було багато пам’яті, це була дуже потужна особливість мови. Я знаю, що інші мови надавали вказівники, як функції, але жодна так легко, як C.
Данк

-3

Більшість мов, які ви перераховуєте, практично не мають нічого спільного з C, окрім невідповідної синтаксичної подібності. Єдині два фактичних похідних C - це Objective-C і C ++.


Якщо ми не розглядаємо синтаксис, то єдиними відмінностями між будь-якими мовами є наявність загальних мовних конструкцій (циклів, умовних змін, змінних, абстракцій таких як класи та закриття тощо) та що всі вони прирівнюють до поведінки машини код. Всі мови низького рівня схожі між собою, і всі мови високого рівня в цей момент надзвичайно схожі між собою.
maple_shaft

2
Ви не повинні думати про мову, як про функціональність, а про те, як вона передає поведінку додатку. Ваш вихідний код - це ваш найнижчий рівень документації, і він пише вихідний код для людей, а НЕ для машин . Якби ми писали код строго для машин, то всі ми б кодували в зборах.
maple_shaft

1
@maple_shaft: Цілком правильно! Мене в інтерв'ю попросили пояснити різницю між машинною мовою (асемблером) та мовою програмування. Моя відповідь була: "Мова машини - це для машин, мова програмування - для програмістів".
Треб

1
@maple_shaft: Синтаксис не має значення щодо його спілкування з людьми . Якби я замінив англійське слово іншим правописом, англійська мова все одно була б тією ж мовою. Синтаксична форма не має значення, комунікативна - мовна семантика.
DeadMG

3
@DeadMG: Але питання стосується синтаксису. Ви можете вважати синтаксичну схожість неактуальною, але людина, яка задає питання, хоче знати, чому ці неактуальні подібності існують .
Нікол Болас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.