Перейти к содержанию

Программирование Как Оно Есть


call_eax

Рекомендуемые сообщения

Сейчас начнется треп типа: "Это не форум программистов, это форум Евангелиона...". Я знаю, я уважаю Евангелион и вообще аниме, просто

захотелось написать про это... :soodesu:

На различных форумах часто можно видеть сообщения типа:"Паскаль говно, Си рулит!". Но если задать вопрос их авторам: "Почему ты так считаешь", в ответ получаешь избитые фразы: "На нем игры пишут" или "На нем операционки пишут" и т.п. В этой статье я бы хотел осветить

некоторые преимущества и недостатки этих языков и поделиться своим мнением по этому поводу.

Начну я с самого, на мой взгляд, простого. Во первых, вместо Паскалевских 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. Я довольно хорошо разбираюсь в программировании, так что не стесняйтесь. :misato_gl:

Ссылка на комментарий
Поделиться на другие сайты

Как программист скажу (перед тем как послать в оффтоп):

*код Паскаля читабельнее

*излишняя свобода при работе с памятью в Си крашит систему чаще и надежнее

Далее мы что сравниваем: Стандартный Си и Паскаль Вирта или С++ Страуструпа и современный 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 выше чем на С++

а вообще эффективнее Оберона языка нет...

Ссылка на комментарий
Поделиться на другие сайты

Oh mein Gott....

Была у меня мысль запостить тут один забавный стих под названием "Девушка и программист", но его цензура не пропустила.

Ссылка на комментарий
Поделиться на другие сайты

ещё одна лошадь и психология.

а вообще си очевидно удобней, но пример с массивами тут лишний, они в нём через жопу сделаны. вообще, от избытка указателей код иногда звёздное небо напоминает)

if тоже менее читабелен чем в паскале (хотя более функциональный, да)

Ссылка на комментарий
Поделиться на другие сайты

Теперь субъективная характеристика как препода:

* освоить с нуля С, ОП, и шарпея можно примерно одинаково. освоить С++ с его выкрутасами архисложно

* гигантский плюс Си - наличие стандартов (это и к С, и к С++, и к шарпею)

* системы программирования - паритет (Дельфи, Студио, Билдер)

* у Си (и у С++) отсутствует модульность, приходится изгаляться. В шарпее появилось...

* про надежность кода я уже писал... скорость дебага на паскале и шарпея раза в 2-3 выше чем на С++

а вообще эффективнее Оберона языка нет...

Программировать начал с С и С++ - ничего сложного нет, сейчас начал изучать Object Pascal - си мне пока больше нравиться. А говорить какой язык лучше или хуже не совсем правильно - каждый язык создан для определенных целей. Реально ли на паскале написать операционную ситему ? Я думаю нет. А вот Си другое дело. Но паскаль хорош для работы с БД.

З.Ы.

к ситемам программирования забыли дописать GCC+Glade+CodeBlocks

Ссылка на комментарий
Поделиться на другие сайты

Оба языка императивные, все конструкции в наличии. Особой разницы нет, не считая что Паскаль более строгий и академичный. Но тогда лучше уж Оберон например. Хотя C это скорее такой кроссплатформенный высокоуровневый ассемблер. Объектный же паскаль - жуткая кака, превратили хороший учебный язык в непонятное что. Но народу нравится, что неудивительно.

Сам предпочитаю ANSI C без плюсов (есть везде) и Питон.

UPD:

Использую vim, autotools и gcc.

Ссылка на комментарий
Поделиться на другие сайты

Лично мне С/С++ нравится гораздо больше. Во-первых, имхо, он гораздо читабельнее. Впрочем, это индивидуально. Но для меня читать стены begin/end-ов и объявлять все переменные в начале - пытка. Условия и циклы мне тоже больше нравятся в сях, но, опять-таки, дело вкуса. Указатели - замечательный инструмент, если им не злоупотреблять. Конечно, если специально изголяться так, как недавно Вектор в КГЖ, то правда код без ста грамм не прочтешь, а в обычном случае все не так страшно. Единственный серьезный недостаток С, так и не исправленный в С++ - отсутствие женских трусов стрингов. В результате в каждой современной среде шаманят по-своему. В Билдере строки были реализованы очень даже хорошо (вообще, Билдер - это лучшее, что я видел, но, увы, работодатели его почему-то не жалуют). STL так и не собрался попробовать, но, насколько я знаю, QString в Qt очень на него похож. QString - не сахар. А вот в шарпе строки - просто сказка!

Шарп в целом вроде неплох. Впрочем, мои познания в нем не слишком глубоки, я использую лишь небольшое подмножество его возможностей. Раздражает его ориентация на ортодоксально-объектных программистов (это ему досталось от жабы, с которой он слизан). А еще не люблю, когда язык лучше меня знает, что и как мне нужно сделать. В итоге иногда приходится решать задачи не с помощью языка, а вопреки ему. Но для небольших прикладных задач без выкрутасов очень даже подходит.

Ссылка на комментарий
Поделиться на другие сайты

C++ хорош тем, что его можно практически напрямую перевести в ассемблер, что позволяет делать программы более эффективными, хотя и накладывает некоторые ограничения. Фактически, это язык не настолько высокого уровня, как кажется, а что-то среднее между настоящим языком высокого уровня и языком низкого уровня.

С него сейчас рекомендуют начинать обучение, ну и с него легко перейти на Java, C# и другие его производные.

Но вообще это все крайне вменяемые языки...

А есть невменяемые... Например такое чудо, как логические языки программирования, типа Prolog.

Ссылка на комментарий
Поделиться на другие сайты

ещё одна лошадь и психология.

Да-да, на "лошадь" очень похоже :icon_confused: Заметьте - сам автор темы чтото не торопится присоединяться к обсуждению.

Ссылка на комментарий
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...