Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Новости и прочее

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

Кажен москаль выбирает Паскаль.
Хохлы же уси пишут на Си.

Спят подружки вредные
Безмятежным сном.
Снятся мышкам хлебные
Крошки под столом,
Буратинам — досточки,
Кошкам — караси,
Всем собакам — косточки,
Программистам — Си.

            

Когда сторонники Паскаля, Модулы, Оберона объясняют причины популярности языков с Си-подобным синтаксисом (С++, С#, 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

ОценитеОценки посетителей
   ██████████████████████ 20 (52.6%)
   ████ 3 (7.89%)
   ███ 2 (5.26%)
   ███████████████ 13 (34.2%)

Отзывы

     2014/04/21 06:56, Utkin          # 

Но ведь это как раз в духе Паскаля! Бесконечные «begin» и «end» как раз и являются знаками препинания, но записываются при этом буквами. Из-за этого глазам не на что «опереться». Первый взгляд лишь приносит впечатление однородного массива букв. Языки линии Си в этом плане логичнее, хотя и в них есть знаки препинания, записанные словами.

Так может утверждать только человек, не имеющий опыта работы на Паскале. Все пишется и читается вполне себе удобно. Касательно "опереться глазами" то здесь необходимо структурирование, например, отступами. Не говорите, что в С++ этого делать не нужно. Языки в этом плане равнозначны между собой.
Кроме того, не забываем про "синдром утенка". То что человек встретил впервые, то чисто психологически им воспринимается как более верное, даже когда недостатки очевидны и выражены в цифрах. Аналогичны и размышления по поводу begin-end. Когда человек впервые попадает на {}, то остальное кажется ему дикостью и извратом, он с гордостью кидается на то, что считает не правильно. Если же проводить сравнение объективно, то паскалисты также при виде {}, считают это абсолютно не удобным для восприятия. И потому совершенно очевидно, что это вопрос привычки и на эффективность работы программиста это сказывается чуть более чем никак.

     2014/04/24 19:12, Автор сайта          # 

В моём случае синдром утёнка должен был меня убедить в «православности» операторов «begin» и «end». Перечислю языки в порядке знакомства с ними: PL/1, ассемблер, Ada, Clipper. Везде, кроме ассемблера, были «begin» и «end». Ну за исключением Clipper, там не было «begin», но был «endif».

С сишными {} познакомился достаточно поздно. Так что фактор «первой любви» тут ни при чём. Но и операторные скобки {} я не считаю верхом совершенства: см. Стиль языка программирования

     2015/02/01 09:48, дедушка Мазай          # 

Имхо. Отмотаем историю взад к Фортрану и Алголу. Для Фортрана был быстро сделан рабочий компилятор, и широкие общественные массы получили в свои руки может быть кривой, но РАБОЧИЙ инструмент. А Алгол продолжал развиваться не в практической, а в научно-теоретической плоскости. Но что мне, простому хлопцу, не обременённому излишними академическими знаниями, нужно: синица в руке или журавль, который ещё где-то в небе? Мне-то нужно решать свои задачи уже сегодня.

В эпоху зари С и Паскаля история повторилась. С оказался готовым инструментом, доступным для большого круга платформ. Ок, если угодно, С — это каменный топор, но я могу решить им любую свою задачу. Паскаль — может быть намного более эргономичный золотой топор, и даже украшенный резьбой и с т.п. примочками, но что мне с него пользы, если нет компилятора? В нашей бурсе, например, до эпохи бурного развития ПК, для бедного студента была доступна ЭВМ СМ-4 (aka PDP-11). Компилятор С имелся, а Паскаля не было. Вот и вся первая любовь, безальтернативная.

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

     2016/01/26 13:42, Николай          # 

Когда Денис Ритчи создал Си, он и не знал, что тот станет популярным. Си не создавался для широких кругов программистов, этот язык должен был использоваться исключительно внутри Bell Labs. Популярность Си обусловлена исключительно распространением UNIX-а. Си — это хитрое поделие людей, которые захотели упростить команды ассемблера.

Эта статья являет собой неудачную попытку очернить Паскаль. И да, выйди же наконец из криокамеры. Тот Паскаль, который создан Виртом перестал использоваться ещё до твоего рождения. Прямой потомок виртовского Паскаля — это Компонентный Паскаль и Оберон со своими диалектами.

     2016/01/26 14:46, Автор сайта          # 

Т.е. Вы не согласны с Алексеев Степановым:

Принято считать, что C — это такой большой «хак», который преуспел, т.к. Юникс был написан на нём. Я не согласен… C, являясь минимальной моделью такого компьютера, стал очень популярным языком для решения всех видов проблем в различных областях с высокой степенью эффективности. В этом и состоит секрет переносимости C: он является лучшем представлением абстрактного компьютера, которое мы имеем… C преуспел, т.к. он делал правильные вещи, а не потому что AT&T разрекламировала его или потому что Unix писался на нём.

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

P.S. Лично я спокойно реагирую, когда «очерняют» Си. Да, в языке масса недостатков. Я почти со всеми соглашусь. И продолжу его использовать. А Вы готовы отметить недостатки Паскаля и Оберона, хотя бы для себя?

     2016/01/26 16:50, Николай          # 

Выдержка из статьи Александра Степанова — это дешёвая реклама. Мне тут нечего сказать, как мне нечего сказать, когда по ТВ-ящику рекламируют всякую хрень.

Автору статьи я рекомендую больше не наводить тень на этот язык. Используйте Си на здоровье, и упокойтесь с миром.

     2016/01/26 18:26, Автор сайта          # 

Степанов — уважаемый, известный в мире специалист. Автор многих научных трудов, книг и библиотеки STL. Я бы не стал отмахиваться от его мнения, как от ничего не значащего.

     2016/01/26 18:57, Николай          # 

А если уважаемый, известный в мире специалист скажет: "Прыгни с 9 этажа". Ты прыгнеш? Вывод таков: "свои мозги, надо иметь". Цитата Степанова, которые ты привёл, я воспринимаю как обычную восторженную чушь. Ксати, это типичный американский стиль журналистики.

Я знаю пример более изощрённого очернения языка Паскаль. Это, статейка Брайана Кернигана «Почему Паскаль не является моим любимым языком программирования» вышедщая более 30 лет назад.

     2016/01/26 23:49, Автор сайта          # 

Программирование — это не религия. Не правда ли? Поэтому к программированию не применимы термины «очернение», «святотатство». Поэтому критиковать можно всё — в рамках научных дискуссий, не выходя за рамки взаимного уважения к собеседнику. Этим занимались и Степанов, и Керниган. Ну и я в меру своих сил. А что пишите Вы? Это можно назвать нормальной дискуссией? Вы сами прочитаете, что написали или Вас процитировать?

     2016/01/27 10:31, Николай          # 

Обратите внимание, что словечки типа "религия" и "святотатсво" используете в своей речи вы, не я!

Учённые тоже люди, и среди них есть много таких, кто любит хамить. Причём они делают это весьма изощрённо, не прибегая к ругательским словам. И например, необразованный человек не поймёт послали его, или похвалили. Так вот, Керниган написав эту статью поступил нечестно, по хамски. Я не знаю, чем занимался Степанов, но выдержка из его статьи его — это восторженная чушь.

Есть такое понятие "здравый смысл". Так вот согласно здравому смыслу аргументы приводимые например Виртом на счёт языка Си — это конструктивная критика великого учёного.

     2016/01/27 15:53, Автор сайта          # 

Написанные слова имели отрицательный смысл: «не религия», «не применимо… очернение». Критика от хамства отличается очень легко. Первая обсуждает действия людей, второе обсуждает самих людей. Вирт критиковал не только Си, но и собственный Паскаль. В нём есть известные недостатки: «goto», висячий «else», но Вирт включил их в язык под влиянием окружающей среды, которая говорила, что «пролетарии не поймут-с».

     2016/08/12 09:59, Трурль          # 

Сам Ритчи высказывал недоумение, зачем создатели языков копируют синакис Си? Он не считает его сильной стороной языка.
Страуструп писал, что предпочел бы разрабатывать язык на основе Алгола-68, но такой проект был бы "мертворожденным". То есть, он уже учитывал популярность Си.

     2016/10/31 06:14, rst256          # 

Программирование — это не религия. Не правда ли? Поэтому к программированию не применимы термины «очернение», «святотатство».

Тогда почему бы не выкинуть синтаксис из самого ЯП, вынести его в отдельный модуль, дабы каждый выбрал такой способ записи, который люб ему? Давайте доверим компьютерам нашим хранение кода исходного в машиночитаемом формате, что будет избавлен от синтаксиса, для них не нужного! Ибо по силам ныне каждому программисту воздать по синтаксису его! И паскалист, и сишник и даже бейсиком испорченный в мире заживут ...

А если серьезно, что мешает то в новом языке применить подобное? Сохраняем код в виде АСТ, а парсер дополняем функцией преобразования из АСТ в то, что сейчас называется исходным кодом. И любые споры о преимуществах begin-end перед {-} и т.п. теряют всякий смысл.

Для компилятора важна только семантика языка и не важен его синтаксис.

     2017/01/08 23:53, Автор сайта          # 

Для компилятора важна только семантика языка и не важен его синтаксис.

Вы сразу сказали, что жену себе выбрали, обратив внимание исключительно на «семантику». Вот тогда я поверю, что эстетика, то бишь синтаксис, Вас не волнует.

     2018/11/29 05:03, Freeman          # 

С точки зрения «Канторовых систем» синтаксис языка (почти) не влияет на его успех. Синтаксис Си популярен из-за популярности Си, не наоборот. Это же логично!

     2018/11/30 17:20, Автор сайта          # 

Синтаксис Си популярен из-за популярности Си, не наоборот. Это же логично!

Анджелина Джоли популярна из-за своего синтакиса своей внешности, её семантика богатый внутренний мир цепляет нас меньше.

Внешность Альберта Эйнштейна популярна из-за самого Эйнштейна, а не наоборот.
Всё зависит от точки зрения

синтаксис языка (почти) не влияет на его успех

Влияние есть, просто его процент зависит от субъективной оценки. Удачный синтаксис легче воспринимается новичками, да и эстетами тоже.

     2019/04/18 15:11, Неслучайный читатель          # 

Сам Ритчи высказывал недоумение, зачем создатели языков копируют синакис Си?

Ну так и Чарльз Дарвин, по слухам, перед смертью отказался от своей теории. Так бывает, что идеи перерастают своих автров.

     2019/04/19 11:25, kt          # 

Неудачный пример. Это были не слухи, а клевета американской религиозной дуры. Семья Дарвинов отрицала, что эта дура была знакома с Чарлзом и она точно никогда не была у них дома. Дарвин гордился своим научным вкладом.

     2019/04/22 16:19, Автор сайта          # 

Лично я не знаком с тем, где бы Ритчи недоумевал, хотелось бы увидеть ссылку на источник. И если это навет, то он вполне смахивает на мнимое отречение Дарвина.

Добавить свой отзыв

Написать автору можно на электронную почту mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Каким должен быть язык программирования?

Анализ и критика

Устарел ли текст как форма представления программы

Русский язык и программирование

Многоязыковое программирование

Синтаксис языков программирования

Синтаксический сахар

Некоторые «вкусности» Алгол-68

«Двухмерный» синтаксис Python

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

Должна ли программа быть удобочитаемой?

Стиль языка программирования

Тексто-графическое представление программы

●  Разделители

●  Строки программы

●  Слева направо или справа налево?

Комментарии

●  Длинные комментарии

●  Короткие комментарии

●  Комментарии автоматической генерации документации

●  Нерабочий код

●  Помеченные комментарии

Нужны ли беззнаковые целые?

Шестнадцатиричные и двоичные константы

Условные операторы

Переключатель

Циклы

●  Продолжение цикла и выход из него

Некошерный «goto»

Изменение приоритетов операций

Операции присвоения и проверки на равенство. Возможно ли одинаковое обозначение?

Так ли нужны операции «&&», «||» и «^^»?

Постфиксные инкремент и декремент

Почему в PHP для конкатенации строк используется «.»?

Указатели и ссылки в C++

●  Обработка ошибок

Использование памяти

Почему динамическое распределение памяти — это плохо

Как обеспечить возврат функциями объектов переменной длины?

●  Типы переменного размера (dynamically sized types, DST) в языке Rust

●  Массивы переменной длины в C/C++

●  Размещение объектов в стеке, традиционный подход

●  Размещение объектов переменной длины с использованием множества стеков

●  Размещение объектов переменной длины с использованием двух стеков

●  Реализация двухстековой модели размещения данных

●  Двухстековая модель: тесты на скорость

●  Изменение длины объекта в стеке во время исполнения

●  Размещение объектов переменной длины с использованием одного стека

Можно ли забыть о «куче», если объекты переменной длины хранить в стеке

Безопасность и размещение объектов переменной длины в стеке

Массивы, структуры, типы, классы переменной длины

О хранении данных в стеке, вместо заключения

Реализация параметрического полиморфизма

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Компьютерный юмор

Новости и прочее

Последние комментарии

2019/06/25 11:22 ••• VIT1972
Идеальный транслятор

2019/06/05 23:21 ••• kt
К вопросу о совершенствовании языка программирования

2019/06/04 14:52 ••• Неслучайный читатель
Деньги = работа / знание

2019/05/29 00:42 ••• rst256
Программирование без программистов — это медицина без врачей

2019/05/14 16:10 ••• utkin
Обработка ошибок

2019/05/09 18:05 ••• евгений
Русский язык и программирование

2019/04/28 14:08 ••• Автор сайта
Статьи Дмитрия Караваева

2019/04/22 16:19 ••• Автор сайта
Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

2019/04/03 22:24 ••• Антон
Все голосования

2019/04/02 12:28 ••• Автор сайта
Шестнадцатиричные и двоичные константы

2019/04/02 12:25 ••• Автор сайта
Выбор кодировки для компилятора

2019/03/24 14:55 ••• Автор сайта
Реализация двухстековой модели размещения данных