Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?
Кажен москаль выбирает Паскаль.
Хохлы же уси пишут на Си.
Спят подружки вредные
Безмятежным сном.
Снятся мышкам хлебные
Крошки под столом,
Буратинам — досточки,
Кошкам — караси,
Всем собакам — косточки,
Программистам — Си.
Когда сторонники Паскаля, Модулы, Оберона объясняют причины популярности языков с Си-подобным синтаксисом
(С++, С#, Java, Javascript, Perl, PHP, D), то фигурируют, как правило, аргументы, к самому языку отношения не имеющие.
Вот в чем, на их взгляд, основные причины.
-
Своей популярностью Си обязан операционной системе Unix.
Эта популярная ОС написана на Си, поэтому для её разработки и развития для разных платформ так же требовалось знание Си.
Windows тоже написана на Си.
Далее настал черёд Linux и FreeBSD: они тоже написаны на Си.
Масса менее распространённых операционных систем тоже написаны на Си.
Всё это в значительной мере сыграло в пользу Си.
-
Став популярным, Си включил закон больших чисел: чем больше программистов, пишущих на Си, тем больше программ пишется на Си.
Чем больше программ пишется на Си, тем больше требуется программистов на Си.
-
Имея идеи по развитию языков, программисты не захотели воплощать эти идеи в непопулярных языках программирования.
Идеи реализовались, в первую очередь, в языках Си-направления.
Это привлекло, в свою очередь, внимание к этим новинкам и к этим языкам.
Эти новшества привели к появлению С++ и Objective-C, Java и C#, Perl и PHP.
Круг стороников синтаксиса Си постоянно расширяется.
«Недруги» Си подчёркивают различие школ в Европе и Америке.
Европа академична, математична, научна.
Америка антинаучна.
Антинаучна настолько, что у них даже земной шар в ранних версиях Internet Explorer вращался в обратную сторону.
Их кибернетика — это ремесленничество недоучек из гаражей, гоняющихся за своей американской мечтой.
Эти недоучки даже не удосужились обзавестись высшим образованием.
Их подход — сочетание шаманства и поклонения золотому тельцу.
Это победа ковбойского принципа: «Побеждает тот парень, который стреляет первым».
Европейских интеллигентов в очках грубо потеснили.
Далее дискуссия на тему C vs Pascal может проходить примерно в таком ключе:
C: У нас гораздо больше сторонников. Плюс ещё — множество успешных проектов.
Pascal: «Пипл хавает»? Это не аргумент!
C: Да, но автор C++ — европеец. Американский Си был дополнен Бъярном Строуструпом идеями из европейской Симулы-67 и Алгола-68.
Да и C# написан Андерсом Хейльсбергом, тоже европейцем.
Много лет, между прочим, лелеявшим Pascal и Delphi.
Pascal: Ренегатство — тоже не аргумент!
C: Но разница в стилях программирования — это как разница между хоккеем североамериканским и европейским.
Кому что больше нравится...
Pascal: Нет, разница не в стиле, а научности или антинаучности школ программирования!
C: . . .
Давайте поставим многоточие, чтобы прекратить религиозную войну в зародыше.
Лучше рассмотрим по существу собственно достоинства и недостатки языков.
Для начала — только синтаксиса.
Эта та вешалка, с которой начинается театр.
Сейчас вполне очевидно, что человек для передачи своих знаний компьютеру будет использовать не естественные,
а искусственные языки.
Эти языки — некая смесь математических обозначений с вкраплениями слов естественных языков.
Си, Паскаль и прочие — это лишь вариации на тему, как это удобнее сделать.
В естественной речи, в математической записи и в Си-подобных языках есть нечто, их объединяющее.
В предложениях, приведённых ниже, есть:
a) слова, благодаря которым в предложениях появляется смысл.
b) символы синтаксиса и пунктуации, обозначают начало и конец предложения,
делают их вопросительными или восклицательными.
В естественном языке есть два «алфавита»: первый действительно является алфавитом, второй же — это знаки препинания.
У них разные роли.
Из букв алфавита слагаются слова, из слов — фразы и предложения.
Знаки препинания лишь делят фразы и предложения, оформляют их.
Важно при этом, что они выглядят иначе!
Если фразу
Мама, я хочу есть! Мы скоро пойдём домой?
записать другим способом
Мама зпт я хочу есть воскл Мы скоро пойдём домой вопр
то он не понравится.
Но ведь это как раз в духе Паскаля!
Бесконечные «begin» и «end» как раз и являются знаками препинания, но записываются при этом буквами.
Из-за этого глазам не на что «опереться».
Первый взгляд лишь приносит впечатление однородного массива букв.
Языки линии Си в этом плане логичнее, хотя и в них есть знаки препинания, записанные словами.
Всё вышесказанное не означает, что Си-подобные языки совершенны.
В них много общепризнанных недостатков, в том числе и в синтаксисе.
До них тоже дойдут наши руки...
Но своей популярностью Си обязан не только синтаксису.
Он концептульно близок к архитектуре компьютеров.
Не даром его в своё время некоторые называли «машинно-ориентированным языком высокого уровня».
Он позволил отойти от программирования на машинных языках.
Программы на Си лишь немного уступали по скорости программам, написанным на ассемблере.
А вот взгляд на популярность C и C++ Александра Степанова, автора STL.
Теперь давайте подумаем, почему C — замечательный язык.
Принято считать, что C — это такой большой «хак», который преуспел, т.к. Юникс был написан на нём.
Я не согласен.
В течение долгого периода времени компьютерные архитектуры эволюционировали,
не в силу того, что какие-то умные люди выяснили, как развивать архитектуры,
но по причине нужды самых разных программистов решать реальные проблемы.
На самом деле, «умные» люди в то время продвигали тэгированные (ЛИСП-ориентированные) архитектуры,
что, конечно, было не очень-то релевантно основным нуждам разработчиков.
Компьютеры, которые были способны иметь дело только с числами, эволюционировали в компьютеры с побайтово адресуемой памятью,
плоскими пространствами адресов и указателями.
Это было естественной эволюцией, отражающей растущее множество проблем, которые решали люди.
C, отразивший гений Дениса Риччи, предоставил минимальную модель компьютера,
которая как результат развития была получена в течение прошедших 30 лет.
C не был быстрым хаком. По мере того как компьютеры эволюционировали до возможности обработки всех видов проблем,
C, являясь минимальной моделью такого компьютера, стал очень популярным языком для решения
всех видов проблем в различных областях с высокой степенью эффективности.
В этом и состоит секрет переносимости C: он является лучшем представлением абстрактного компьютера, которое мы имеем.
Конечно, абстракция осуществлена над множеством реальных компьютеров, а не каких-то воображаемых вычислительных устройств.
Более того, люди понимали машинную модель, лежащую в основе C.
Для среднего инженера гораздо проще понять машинную модель, положенную в основу C, чем машинную модель Ada или даже Scheme.
C преуспел, т.к. он делал правильные вещи, а не потому что AT&T разрекламировала его или потому что Unix писался на нём.
C++ успешен, т.к., вместо попытки предложить машинную модель, изобретенную разве что в процессе созерцания своего пупа,
Бьярн начал с C и попытался развивать C далее, предоставляя больше техник обобщённого программирования,
но в контексте рамок этой машинной модели. Машинная модель C очень проста. У вас есть память, где находятся сущности.
У вас есть указатели на последовательные элементы памяти.
Это очень просто для понимания. C++ сохраняет данную модель, но делает сущности,
располагающиеся в памяти, более исчерпывающими, чем в машине C, т.к. C имеет ограниченный набор типов данных.
А именно, C имеет структуры, предоставляющие разновидность расширяемой системы типов,
но он не позволяет вам определять операции над структурами.
Это ограничивает расширяемость системы типов.
C++ существенно продвинул машинную модель C к действительно расширяемой системе типов.
Читаю замечательные «Воспоминания советского программиста» и встречаю объяснение популярности Си: это был первый язык программирования для программистов!
Так чем очаровывал Unix? Прежде всего, языком C, на котором был написан. Долгожданным языком программирования для программистов. Стоп!
А другие языки, тот же ФОРТРАН или КОБОЛ, они для кого? Да, для нас, конечно, для кого ж ещё. Но только эти языки были заточены под решение тех или иных прикладных задач —
инженерно-расчетных или бухгалтерско-учетных, а вот как быть с задачами неприкладными? Они как невидимая часть айсберга — неприметная громадина, с которой пользователь напрямую не соприкасается:
операционные системы и базы данных, компиляторы тех же языков программирование, утилиты, драйверы устройств и и ещё тысячи всяких разных программ, сервисов, библиотек функций и т.д. и т.п.
И все это нам надо программировать. На чем? Нынче и вопроса такого не возникает, но ведь было время, когда в ответ звучало: «на ассемблере» — на низкоуревневом машинном языке.
Или же на языках вроде ФОРТРАНа или ПЛ/1 — чересчур высокоуревневых. Гений дизайнера (Денниса Ритчи) как раз и проявился в безошибочном выборе уровня языка, уровня абстракции —
достаточно близкого к «железу», чтоб обеспечить эффективность и достаточно далекого от него, чтоб не утратить мобильность…
А ещё язык был как-то очень ладно скроен, явственно ощущалось, что запроектировал его человек, знаюший ремесло программера не понаслышке.
Короче говоря, прочитав с восторгом описание языка (тут ещё сыграла свою роль изумительная книга Кернигана и Ритчи,
недаром называемая «the White Bible» и по праву считающаяся шедевром технической прозы) и написав пару-тройку программок я уже ни на каких других языках работать не хотел.
(Но всему свое время: уже лет пятнадцать, как я на нем не работаю и… не хочу — на C++ или C# куда как удобней)…
Об Обероне, самом молодом представителе линейки Виртовских языков, в Википедии пишут лишь на двух языках: русском и английском.
Для сравнения: языку Brainfuck посвящены статьи на 38 языках. Видимо, в силу его большей распространённости.
Что ещё почитать на эту тему
Опубликовано: 2012.09.25, последняя правка: 2019.01.28 20:43
Отзывы
✅ 2014/04/21 06:56, Utkin #0
Но ведь это как раз в духе Паскаля! Бесконечные «begin» и «end» как раз и являются знаками препинания, но записываются при этом буквами. Из-за этого глазам не на что «опереться». Первый взгляд лишь приносит впечатление однородного массива букв. Языки линии Си в этом плане логичнее, хотя и в них есть знаки препинания, записанные словами. Так может утверждать только человек, не имеющий опыта работы на Паскале. Все пишется и читается вполне себе удобно. Касательно "опереться глазами" то здесь необходимо структурирование, например, отступами. Не говорите, что в С++ этого делать не нужно. Языки в этом плане равнозначны между собой. Кроме того, не забываем про "синдром утенка". То что человек встретил впервые, то чисто психологически им воспринимается как более верное, даже когда недостатки очевидны и выражены в цифрах. Аналогичны и размышления по поводу begin-end. Когда человек впервые попадает на {}, то остальное кажется ему дикостью и извратом, он с гордостью кидается на то, что считает не правильно. Если же проводить сравнение объективно, то паскалисты также при виде {}, считают это абсолютно не удобным для восприятия. И потому совершенно очевидно, что это вопрос привычки и на эффективность работы программиста это сказывается чуть более чем никак.✅ 2014/04/24 19:12, Автор сайта #1
В моём случае синдром утёнка должен был меня убедить в «православности» операторов «begin» и «end». Перечислю языки в порядке знакомства с ними: PL/1, ассемблер, Ada, Clipper. Везде, кроме ассемблера, были «begin» и «end». Ну за исключением Clipper, там не было «begin», но был «endif».
С сишными {} познакомился достаточно поздно. Так что фактор «первой любви» тут ни при чём. Но и операторные скобки {} я не считаю верхом совершенства: см. Стиль языка программирования✅ 2015/02/01 09:48, дедушка Мазай #2
Имхо. Отмотаем историю взад к Фортрану и Алголу. Для Фортрана был быстро сделан рабочий компилятор, и широкие общественные массы получили в свои руки может быть кривой, но РАБОЧИЙ инструмент. А Алгол продолжал развиваться не в практической, а в научно-теоретической плоскости. Но что мне, простому хлопцу, не обременённому излишними академическими знаниями, нужно: синица в руке или журавль, который ещё где-то в небе? Мне-то нужно решать свои задачи уже сегодня.
В эпоху зари С и Паскаля история повторилась. С оказался готовым инструментом, доступным для большого круга платформ. Ок, если угодно, С — это каменный топор, но я могу решить им любую свою задачу. Паскаль — может быть намного более эргономичный золотой топор, и даже украшенный резьбой и с т.п. примочками, но что мне с него пользы, если нет компилятора? В нашей бурсе, например, до эпохи бурного развития ПК, для бедного студента была доступна ЭВМ СМ-4 (aka PDP-11). Компилятор С имелся, а Паскаля не было. Вот и вся первая любовь, безальтернативная.
Кроме того, ранний Паскаль не поддерживал модульность. Учёному академику до этого пофиг, а для практических инженерных задач это очень важная фича, т.к. без модульности невозможно нарабатывать прикладные библиотеки. Получается, что изначально языки создавались для разной целевой аудитории: Паскаль для узкой прослойки учёных, а С для широких масс практиков. Отсюда и пошла распространённость.✅ 2016/01/26 13:42, Николай #3
Когда Денис Ритчи создал Си, он и не знал, что тот станет популярным. Си не создавался для широких кругов программистов, этот язык должен был использоваться исключительно внутри Bell Labs. Популярность Си обусловлена исключительно распространением UNIX-а. Си — это хитрое поделие людей, которые захотели упростить команды ассемблера.
Эта статья являет собой неудачную попытку очернить Паскаль. И да, выйди же наконец из криокамеры. Тот Паскаль, который создан Виртом перестал использоваться ещё до твоего рождения. Прямой потомок виртовского Паскаля — это Компонентный Паскаль и Оберон со своими диалектами.✅ 2016/01/26 14:46, Автор сайта #4
Т.е. Вы не согласны с Алексеев Степановым: Принято считать, что C — это такой большой «хак», который преуспел, т.к. Юникс был написан на нём. Я не согласен… C, являясь минимальной моделью такого компьютера, стал очень популярным языком для решения всех видов проблем в различных областях с высокой степенью эффективности. В этом и состоит секрет переносимости C: он является лучшем представлением абстрактного компьютера, которое мы имеем… C преуспел, т.к. он делал правильные вещи, а не потому что AT&T разрекламировала его или потому что Unix писался на нём. Если взять новые популярные языки, то подавляющее их большинство берут за основу синтаксис Си. Почему? Сила привычки?
P.S. Лично я спокойно реагирую, когда «очерняют» Си. Да, в языке масса недостатков. Я почти со всеми соглашусь. И продолжу его использовать. А Вы готовы отметить недостатки Паскаля и Оберона, хотя бы для себя?✅ 2016/01/26 16:50, Николай #5
Выдержка из статьи Александра Степанова — это дешёвая реклама. Мне тут нечего сказать, как мне нечего сказать, когда по ТВ-ящику рекламируют всякую хрень.
Автору статьи я рекомендую больше не наводить тень на этот язык. Используйте Си на здоровье, и упокойтесь с миром.✅ 2016/01/26 18:26, Автор сайта #6
Степанов — уважаемый, известный в мире специалист. Автор многих научных трудов, книг и библиотеки STL. Я бы не стал отмахиваться от его мнения, как от ничего не значащего.✅ 2016/01/26 18:57, Николай #7
А если уважаемый, известный в мире специалист скажет: "Прыгни с 9 этажа". Ты прыгнеш? Вывод таков: "свои мозги, надо иметь". Цитата Степанова, которые ты привёл, я воспринимаю как обычную восторженную чушь. Ксати, это типичный американский стиль журналистики.
Я знаю пример более изощрённого очернения языка Паскаль. Это, статейка Брайана Кернигана «Почему Паскаль не является моим любимым языком программирования» вышедщая более 30 лет назад.✅ 2016/01/26 23:49, Автор сайта #8
Программирование — это не религия. Не правда ли? Поэтому к программированию не применимы термины «очернение», «святотатство». Поэтому критиковать можно всё — в рамках научных дискуссий, не выходя за рамки взаимного уважения к собеседнику. Этим занимались и Степанов, и Керниган. Ну и я в меру своих сил. А что пишите Вы? Это можно назвать нормальной дискуссией? Вы сами прочитаете, что написали или Вас процитировать?✅ 2016/01/27 10:31, Николай #9
Обратите внимание, что словечки типа "религия" и "святотатсво" используете в своей речи вы, не я!
Учённые тоже люди, и среди них есть много таких, кто любит хамить. Причём они делают это весьма изощрённо, не прибегая к ругательским словам. И например, необразованный человек не поймёт послали его, или похвалили. Так вот, Керниган написав эту статью поступил нечестно, по хамски. Я не знаю, чем занимался Степанов, но выдержка из его статьи его — это восторженная чушь.
Есть такое понятие "здравый смысл". Так вот согласно здравому смыслу аргументы приводимые например Виртом на счёт языка Си — это конструктивная критика великого учёного.✅ 2016/01/27 15:53, Автор сайта #10
Написанные слова имели отрицательный смысл: «не религия», «не применимо… очернение». Критика от хамства отличается очень легко. Первая обсуждает действия людей, второе обсуждает самих людей. Вирт критиковал не только Си, но и собственный Паскаль. В нём есть известные недостатки: «goto», висячий «else», но Вирт включил их в язык под влиянием окружающей среды, которая говорила, что «пролетарии не поймут-с».✅ 2016/08/12 09:59, Трурль #11
Сам Ритчи высказывал недоумение, зачем создатели языков копируют синакис Си? Он не считает его сильной стороной языка. Страуструп писал, что предпочел бы разрабатывать язык на основе Алгола-68, но такой проект был бы "мертворожденным". То есть, он уже учитывал популярность Си.✅ 2016/10/31 06:14, rst256 #12
Программирование — это не религия. Не правда ли? Поэтому к программированию не применимы термины «очернение», «святотатство». Тогда почему бы не выкинуть синтаксис из самого ЯП, вынести его в отдельный модуль, дабы каждый выбрал такой способ записи, который люб ему? Давайте доверим компьютерам нашим хранение кода исходного в машиночитаемом формате, что будет избавлен от синтаксиса, для них не нужного! Ибо по силам ныне каждому программисту воздать по синтаксису его! И паскалист, и сишник и даже бейсиком испорченный в мире заживут ...
А если серьезно, что мешает то в новом языке применить подобное? Сохраняем код в виде АСТ, а парсер дополняем функцией преобразования из АСТ в то, что сейчас называется исходным кодом. И любые споры о преимуществах begin-end перед {-} и т.п. теряют всякий смысл.
Для компилятора важна только семантика языка и не важен его синтаксис.✅ 2017/01/08 23:53, Автор сайта #13
Для компилятора важна только семантика языка и не важен его синтаксис. Вы сразу сказали, что жену себе выбрали, обратив внимание исключительно на «семантику». Вот тогда я поверю, что эстетика, то бишь синтаксис, Вас не волнует.✅ 2018/11/29 05:03, Freeman #14
С точки зрения «Канторовых систем» синтаксис языка (почти) не влияет на его успех. Синтаксис Си популярен из-за популярности Си, не наоборот. Это же логично!✅ 2018/11/30 17:20, Автор сайта #15
Синтаксис Си популярен из-за популярности Си, не наоборот. Это же логично! Анджелина Джоли популярна из-за своего синтакиса своей внешности, её семантика богатый внутренний мир цепляет нас меньше.
Внешность Альберта Эйнштейна популярна из-за самого Эйнштейна, а не наоборот. синтаксис языка (почти) не влияет на его успех Влияние есть, просто его процент зависит от субъективной оценки. Удачный синтаксис легче воспринимается новичками, да и эстетами тоже.✅ 2019/04/18 15:11, Неслучайный читатель #16
Сам Ритчи высказывал недоумение, зачем создатели языков копируют синакис Си? Ну так и Чарльз Дарвин, по слухам, перед смертью отказался от своей теории. Так бывает, что идеи перерастают своих автров.✅ 2019/04/19 11:25, kt #17
Неудачный пример. Это были не слухи, а клевета американской религиозной дуры. Семья Дарвинов отрицала, что эта дура была знакома с Чарлзом и она точно никогда не была у них дома. Дарвин гордился своим научным вкладом.✅ 2019/04/22 16:19, Автор сайта #18
Лично я не знаком с тем, где бы Ритчи недоумевал, хотелось бы увидеть ссылку на источник. И если это навет, то он вполне смахивает на мнимое отречение Дарвина. Добавить свой отзыв
Написать автору можно на электронную почту mail(аt)compiler.su
|