Ныне профессиональное программирование плотно ассоциируется с Си и не без оснований. Ведь не просто так на Си написаны ядра таких ОС, как Linux и Windows. Но есть и те, кто считает, что Паскаль – надёжнее и даже эффективнее. А некоторые считают, что главная проблема данного спора – совершенно различный синтаксис данных языков.
На самом деле вопрос, что лучше, СИ или Паскаль схож с вопросом, что лучше, кувалда или молоток? Чего мы хотим от языка и компилятора?
- Удобств, при написании исходного текста?
- Высокоэффективного кода программы?
- Высокой надежности программы?
Если эффективный код не требуется, то есть, в решаемой проблеме нет массированной обработки данных, а в надежности сомнений нет, то тогда лучше применять Паскаль. Но если требуется высокоэффективный код, то лучше применить Си. А такой код требуется при массированной обработке данных. При этом, в полный рост встает и проблема надежности. Чем сложнее метод, тем труднее обеспечить надежность. Сам подход Си к написанию кода не имеет принципиальных ограничений, в отличие от Паскаля. И по этому, существует такое заблуждение, что все эти Type
, Var
и Record
не просто так введены в язык программирования Паскаль. Дескать, они уже исключают массу возможных ошибок, так что время, потраченное на кажущуюся бессмысленной работу, окупит себя многократно. Но это не всегда так, тем более, что настоящий программист будет пользоваться свободами языка с умом, а такие свободы есть в языке СИ. Всем известный факт, что язык программирования СИ обеспечивает лучший код, за счет его оптимизации. А в Паскале нет никакой оптимизации. Ярые поклонники Паскаля скажут, что она там и не нужна, вроде как, компилятор просто создает уже оптимальный код. Но так ли это??? Я даже больше скажу, нет ещё в мире безупречного языка программирования. И потому, что бы там не говорили, ну не может компилятор Паскаля создавать оптимальный код.
Программист более-менее высокого уровня представляет, что происходит в процессе исполнения с базовыми регистрами (селекторами), и как физически размещаются данные в памяти RAM. Глупости это все, — скажет ярый поклонник Паскаля. Не царское это дело. Я вот напишу алгоритм решения задачи, а компилятор создаст оптимальный, или около того, код. А как исполняется сей «оптимальный» код? А исполняется он «камнем», процессором. А это — чрезвычайно сложное устройство конвейерного типа. Внутри сидит самая быстрая память. Она «летает» со скоростью, зависящей от тактовой частоты. Но этой памяти мало. А более медленной памяти, RAM, ее гораздо больше. И умный камень, в то время, пока команды исполняются, подгружает в быструю память команды и данные из медленной. Это и есть конвейер. И конвейер получается тем эффективнее, чем плотнее физически размещены данные в RAM. То есть, базовые адреса текущих сегментов данных не должны резко менять свои значения. И это может сделать программист на Си. И вполне может оказаться, и сплошь и рядом оказывается, что математически оптимальный алгоритм окажется много хуже математически неоптимального, но «заточенного» под конвейер процессора. Элементарный тест показывает, что один и тот же алгоритм при «правильном» размещении в памяти исполняется в 5-7 раз быстрее, чем при «неправильном». Манипулирование размещением данных в памяти позволяет применить принципиально новые и высокоэффективные методы обработки данных. Например, во многих случаях можно алгоритм сортировки методом «пузыря» (кстати, идеально «заточенного» под конвейер) заменить на алгоритмы группировки, то есть, неполной сортировки. При сокращении времени сортировки в сотни и тысячи раз.
Итак, о главном отличии программирования на Паскале от программирования на Си. Конечно же, код, написанный на Си — будет более эффективным, чем код, написанный на Паскале, но нельзя сказать, что на Паскале невозможно составить высокоэффективный код. Дело в том, что Си — это системный язык программирования и поэтому больше пригоден для системного уровня программирования. Хотя задачи прикладного уровня с лёгкостью решаются с использованием Си. Паскаль же, в чистом виде, в настоящее время изучается в различных учебных заведениях и служит всего лишь только базой для более перспективных языков. Текст на Паскале, это, в основном, формальное, абстрактное представление алгоритма решения задачи. А текст на Си может быть не просто формальным, но и аппаратно-ориентированным представлением алгоритма решения задачи. Однако, говоря о различиях Си и Паскаля, надо иметь в виду, что в любом программировании, прежде всего, важна методика построения программы. Объектно-ориентированное программирование ООП, в настоящее время, не имеет альтернативы. В этом смысле, С++, Object Pascal, равно, как и другие объектно-ориентированные языки программирования, являются близкими родственниками. Но, только в том случае, если программист действительно адекватно пользуется методами ООП. Ибо любую, сколь угодно сложную программу (мы не говорим о библиотеках, где, конечно все — ООП) можно реализовать, как 1-2 класса. Но это будет пародия на ООП.