call_eax Опубликовано 3 декабря, 2008 Жалоба Share Опубликовано 3 декабря, 2008 Сейчас начнется треп типа: "Это не форум программистов, это форум Евангелиона...". Я знаю, я уважаю Евангелион и вообще аниме, просто захотелось написать про это... На различных форумах часто можно видеть сообщения типа:"Паскаль говно, Си рулит!". Но если задать вопрос их авторам: "Почему ты так считаешь", в ответ получаешь избитые фразы: "На нем игры пишут" или "На нем операционки пишут" и т.п. В этой статье я бы хотел осветить некоторые преимущества и недостатки этих языков и поделиться своим мнением по этому поводу. Начну я с самого, на мой взгляд, простого. Во первых, вместо Паскалевских begin и end в Си есть { и }. Дальше арифметические операции. Паскаль: ... x := x+1; a := a*b; ... Си: ... x++; a *= b; ... В Си также удобно организовано приведение типов. Любой тип можно привести к любому другому, причем без проблем. Тип, к которому нужно привести, указывается в скобках. В паскале для этого используются какие-то левые функции, что весьма неудобно... Паскаль: var a: intger; x: real; ... // приведение типа a := Trunc(x); ... Си: ... int a; float x; // приведение типа a = (int)x; ... Дальше условные операторы и циклы. Паскаль: ... // Условный оператор if x <> 0 then y := a/x; ... // Цикл while head <> nil do head := head^.next; ... Си: ... // Условный оператор if(x) x--; ... // Цикл while(head) head = head->next; ... Короче, запись на языке Си короче и понятнее, чем запись на Паскале. Интересно, кто-нибудь дочитал до этого момента. Дальше самое интересное. Работа с памятью. В Си все устроено настолько прозрачно... Си: void main { int a[10]; int *b = &a[0]; b[3] = 8; // У нас в массиве 10 элементов, но это // не мешает нам обратиться к 100 a[5] = b[100]; // Или записать туда какой-нибудь мусор a[100] = 100; // Другой вопрос, к чему это приведет... *(b+2) += 10; ... } В Паскале можно задавать диапозон значений в массиве, но в Си это легко обойти Паскаль: ... var a: array [5..9] of integer; ... a[7] := 10; ... Си: ... int *b = new int[5]; int *a = (a-5); ... a[7] = 10; ... Плюс, в Си есть классы памяти. Можно работать с регистровыми переменными. Про удобство классов я вообще молчу. Это отдельная история. На самом деле говорить об этом можно очень долго, Я и 10% не рассказал. Я даже не начинаю про особенности компиляции... Короче, Си сделан программистами для программистов. Про Паскаль я молчу. Хорошо, что хоть встроенный ассемблер поддерживает. Если кому понравился мой треп, можете присылать свои вопросы на мыло: call_eax@mail.ru. Я довольно хорошо разбираюсь в программировании, так что не стесняйтесь. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
NortUS Опубликовано 4 декабря, 2008 Жалоба Share Опубликовано 4 декабря, 2008 Как программист скажу (перед тем как послать в оффтоп): *код Паскаля читабельнее *излишняя свобода при работе с памятью в Си крашит систему чаще и надежнее Далее мы что сравниваем: Стандартный Си и Паскаль Вирта или С++ Страуструпа и современный Object ? Есть очень простые критерии сравнения языков: (переключать раскладки в лом, кодер поймет) 1) Число лексем (объем алфавита) паскаль - 1004 обджект паскаль - 1995 - 1768 обджект паскаль - 2005 - 2041 Анси Си - 1109 Он же с препроцем - 1223 С++ Страуструпа - 1654 ИСО С++ с препроцем (1998) - 2667 Си-шарп - 3036 (с препроцем 3768) Вывод - Язык Си обладает полуторной избыточностью перед Паскалем (речь о современных дианлектаХ) 2) Число правил (количество дефиниций БНФ) паскаль - от 85 до 165 Си - от 49 (С) до 184 (С++) и 313 (С#) Вывод - С++ пятнадцатилетней давности с его у***ым множественным наследованием сложнее сложнее обджекта 2005 года. Про Си-шарп просто молчу. 3) Число терминалов - паскаль от 84 до 92, Си - от 122 до 135. Опять же полуторократная перегруженность 4) Число служебных слов - тут паритет. Теперь субъективная характеристика как препода: * освоить с нуля С, ОП, и шарпея можно примерно одинаково. освоить С++ с его выкрутасами архисложно * гигантский плюс Си - наличие стандартов (это и к С, и к С++, и к шарпею) * системы программирования - паритет (Дельфи, Студио, Билдер) * у Си (и у С++) отсутствует модульность, приходится изгаляться. В шарпее появилось... * про надежность кода я уже писал... скорость дебага на паскале и шарпея раза в 2-3 выше чем на С++ а вообще эффективнее Оберона языка нет... Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
langley Опубликовано 4 декабря, 2008 Жалоба Share Опубликовано 4 декабря, 2008 Oh mein Gott.... Была у меня мысль запостить тут один забавный стих под названием "Девушка и программист", но его цензура не пропустила. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
trampler Опубликовано 4 декабря, 2008 Жалоба Share Опубликовано 4 декабря, 2008 ещё одна лошадь и психология. а вообще си очевидно удобней, но пример с массивами тут лишний, они в нём через жопу сделаны. вообще, от избытка указателей код иногда звёздное небо напоминает) if тоже менее читабелен чем в паскале (хотя более функциональный, да) Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Fritz-X Опубликовано 4 декабря, 2008 Жалоба Share Опубликовано 4 декабря, 2008 Теперь субъективная характеристика как препода:* освоить с нуля С, ОП, и шарпея можно примерно одинаково. освоить С++ с его выкрутасами архисложно * гигантский плюс Си - наличие стандартов (это и к С, и к С++, и к шарпею) * системы программирования - паритет (Дельфи, Студио, Билдер) * у Си (и у С++) отсутствует модульность, приходится изгаляться. В шарпее появилось... * про надежность кода я уже писал... скорость дебага на паскале и шарпея раза в 2-3 выше чем на С++ а вообще эффективнее Оберона языка нет... Программировать начал с С и С++ - ничего сложного нет, сейчас начал изучать Object Pascal - си мне пока больше нравиться. А говорить какой язык лучше или хуже не совсем правильно - каждый язык создан для определенных целей. Реально ли на паскале написать операционную ситему ? Я думаю нет. А вот Си другое дело. Но паскаль хорош для работы с БД. З.Ы. к ситемам программирования забыли дописать GCC+Glade+CodeBlocks Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
zlos Опубликовано 4 декабря, 2008 Жалоба Share Опубликовано 4 декабря, 2008 Оба языка императивные, все конструкции в наличии. Особой разницы нет, не считая что Паскаль более строгий и академичный. Но тогда лучше уж Оберон например. Хотя C это скорее такой кроссплатформенный высокоуровневый ассемблер. Объектный же паскаль - жуткая кака, превратили хороший учебный язык в непонятное что. Но народу нравится, что неудивительно. Сам предпочитаю ANSI C без плюсов (есть везде) и Питон. UPD: Использую vim, autotools и gcc. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Lance Опубликовано 4 декабря, 2008 Жалоба Share Опубликовано 4 декабря, 2008 Лично мне С/С++ нравится гораздо больше. Во-первых, имхо, он гораздо читабельнее. Впрочем, это индивидуально. Но для меня читать стены begin/end-ов и объявлять все переменные в начале - пытка. Условия и циклы мне тоже больше нравятся в сях, но, опять-таки, дело вкуса. Указатели - замечательный инструмент, если им не злоупотреблять. Конечно, если специально изголяться так, как недавно Вектор в КГЖ, то правда код без ста грамм не прочтешь, а в обычном случае все не так страшно. Единственный серьезный недостаток С, так и не исправленный в С++ - отсутствие женских трусов стрингов. В результате в каждой современной среде шаманят по-своему. В Билдере строки были реализованы очень даже хорошо (вообще, Билдер - это лучшее, что я видел, но, увы, работодатели его почему-то не жалуют). STL так и не собрался попробовать, но, насколько я знаю, QString в Qt очень на него похож. QString - не сахар. А вот в шарпе строки - просто сказка! Шарп в целом вроде неплох. Впрочем, мои познания в нем не слишком глубоки, я использую лишь небольшое подмножество его возможностей. Раздражает его ориентация на ортодоксально-объектных программистов (это ему досталось от жабы, с которой он слизан). А еще не люблю, когда язык лучше меня знает, что и как мне нужно сделать. В итоге иногда приходится решать задачи не с помощью языка, а вопреки ему. Но для небольших прикладных задач без выкрутасов очень даже подходит. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Daniel5555 Опубликовано 4 декабря, 2008 Жалоба Share Опубликовано 4 декабря, 2008 C++ хорош тем, что его можно практически напрямую перевести в ассемблер, что позволяет делать программы более эффективными, хотя и накладывает некоторые ограничения. Фактически, это язык не настолько высокого уровня, как кажется, а что-то среднее между настоящим языком высокого уровня и языком низкого уровня. С него сейчас рекомендуют начинать обучение, ну и с него легко перейти на Java, C# и другие его производные. Но вообще это все крайне вменяемые языки... А есть невменяемые... Например такое чудо, как логические языки программирования, типа Prolog. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
langley Опубликовано 5 декабря, 2008 Жалоба Share Опубликовано 5 декабря, 2008 ещё одна лошадь и психология. Да-да, на "лошадь" очень похоже Заметьте - сам автор темы чтото не торопится присоединяться к обсуждению. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
VECTOR Опубликовано 5 декабря, 2008 Жалоба Share Опубликовано 5 декабря, 2008 Немного оффтопа. Как раз тот код, что упоминал Lance. http://codepad.org/mAmXtil1 Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.