Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки 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 к действительно расширяемой системе типов.

Что ещё почитать на эту тему

Последняя правка: 2015-01-22    18:08

ОценитеОценки посетителей
   ███████████████████████ 19 (54.2%)
   ████ 3 (8.57%)
   ██ 1 (2.85%)
   ███████████████ 12 (34.2%)

Отзывы

     2014/04/21 06:56, Utkin

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

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

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

В моём случае синдром утёнка должен был меня убедить в «православности» операторов «begin» и «end». Перечислю языки в порядке знакомства с ними: PL/I, ассемблер, 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, Автор сайта

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

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

Написать отзыв

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

Авторизация

Регистрация

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

Карта сайта


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии

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

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

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

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

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

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

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

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

Циклы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Компилятор

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

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

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

Прочее

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

2018/07/03 03:27, rst256
Философия языка

2018/06/25 15:10, Автор сайта
Продолжение цикла и выход из него

2018/06/14 00:37, rst256
Лень — двигатель прогресса

2018/05/31 18:52, rst256
Программирование без программистов — это медицина без врачей

2018/05/31 17:57, rst256
Циклы

2018/05/31 17:50, Comdiv
Разбор цепочек знаков операций

2018/05/31 17:42, Comdiv
Как отличить унарный минус от бинарного

2018/05/30 18:57, Александр Коновалов aka Маздайщик
Раскрутка компилятора