Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

Почему языки C-семейства заняли свое “особое” место среди прочих языков программирования [закрыт]

#c


А как вы считаете почему языки C-семейства заняли свое "особое" место среди прочих
языков программирования?
    


Ответы

Ответ 1



Думаю, они «взлетели» на феноменальном успехе самого языка C. Язык C был успешен потому, что во время его разработки была нужда в хорошем низкоуровневом системном языке. C оказался самым популярным среди них не в последнюю очередь потому, что семейство UNIX-подобных операционных систем выбрало C в качестве системного языка. (Что неудивительно, учитывая участие Денниса Ритчи в обоих проектах.) Высокоуровневых языков было достаточно в те далёкие времена (LISP, COBOL, Basic), но компиляторы того времени не были способны адекватно оптимизировать высокоуровневый код. C же снискал славу «кроссплатформенного ассемблера»: код на нём можно было легко оптимизировать вручную. Затем, C++ был пожалуй первым хорошим (для своего времени) языком программирования, ориентированным на практическое программирование. Совместимостью с C он обязан как своему взлёту и популярности, так и многим неустранимым своим недостаткам. Далее, вступает MS-DOS. Программисты Microsoft вдохновлялись UNIX-системами, и решили выбрать C как системный язык. Далее, долгое время de facto-стандартом для написания оконных систем под Windows стал, естественно, C++, как подходящий последователь C. Таким образом, две популярные платформы (UNIX и DOS/indows) приветствовали знание C и его потомков, что конечно же привело к их широкому распространению. Тем не менее, и у других языков был шанс. Например, более высокоуровневый Pascal был очень популярен в среде разработчиков под DOS, и планировался вначале как системный язык Windows. И он, кажется, был языком выбора под платформой Macintosh. (До тех пор, пока там предпочтительным языком не стал Objective C — снова язык из семейства C.) Pascal вплоне мог перехватить лидирующую роль в семействе языков практического программирования. Но, к сожалению, язык не развивался адекватно нуждам программистов, и был в основном вытеснен своими коллегами, основанными на синтаксисе C. Стоит заметить, однако, что последователи C, унаследовав синтаксис C, вовсе не унаследовали его стиль и философию.

Ответ 2



Вообще @Vlad довольно хорошо изложил с исторической точки зрения, но я зайду с другой стороны, грамматической/синтаксической. Любой не эзотерический язык программирования это так или иначе выбор между: Lisp C Forth. Функциональной, императивной, конкатенативной(стэковой) парадигмой: Префиксной + a b, инфиксной a + b, постфиксной a b + записью выражений. Так вот C(и остальные языки семейства, последовавшие за ним позднее) просто стал одним из первых общеупотребительных языков, который практически идеально и без лишнего синтаксического сахара вписывается в императивную парадигму. Он просто является её прямым и логичным выражением. Запись a + b выглядит понятнее для большинства людей, чем конкурирующие Lispовое + a b и Forthовое a b +. (Конечно все эти 3 нотации были известны еще задолго до изобретения Lisp C и Forth, но в общее употребление они вошли похоже именно в те времена) Кроме того он достаточно прост, в нем по мимо обычного потока управления есть всего 6 основных средств построения абстракций: указатели, функции, структуры, указатели на функции, препроцессор и typedef. Остальные элементы вроде фигурных скобок: {{}{}{}{}{}} Составных присваиваний: a+=a++ + --a; Указателей: int *(*f)(char *с) Смотрятся просто веселее и читаются легче чем Lisp с его унылыми эзотерическими пугающими людей круглыми скобками: (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) или Forth с Йоды магистра речью умной: : FLOOR5 ( n -- n' ) DUP 6 < IF DROP 5 ELSE 1 - THEN ;. Что касается других старых императивных языков вроде Pascal, BASIC, Fortran, то в них просто слишком много сахара и они все же не так изящны и выразительны как C. Можно например чисто визуально сравнить 4 Hello World для весьма похожих языков Pascal, Visual Basic, Fortran и С. Что вы выберете? Program HelloWord; begin writeLn ('Hello World!') end. Module Hello Sub Main() MsgBox("Hello, World!") End Sub End Module Program Hello Print *, "Hello World!" End Program Hello #include main() { printf("Hello World"); } P.S. Конечно в обычном BASIC можно сделать так ? "Hello, World!", но ничто ведь не мешает Вам: #define $ printf

Ответ 3



Помнится, для меня с коллегами Си в середине 80-х стал просто светом в окошке из-за своего лаконизма, прозрачности и отсутствию (по сравнению с Паскалем) дурацких ограничений, которые почему-то считаются авторами языков просто обязательными для программирования без ошибок.

Ответ 4



Началось все, скорее всего, именно с синтаксиса. Из низкоуровневых языков, компилировавшихся в оптимальный код, C для своего времени был самым удобным. Замена всевозможных длиннющих BEGIN и END на { и } (и т.д.) сыграла немаловажную роль. Это сейчас у нас IDE с autocomplete и прочими ништяками, а тогда сокращение количества букаф в программах было для многих великой радостью. Этим и другими плюсами к себе завоевал расположение C.

Комментариев нет:

Отправить комментарий