Holywar/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Holywar/ru
| Old | New | Line | |
|---|---|---|---|
| 1 | + | Эта страница посвящена рассмотрению преимуществ и недостатков языка Паскаль, с точки зрения других языков программирования. Исторически сложилось точка зрения, что Паскаль является учебным языком, пригодным лишь для обучения информатике. Очень часта эта точка зрения, используется пользователями других языков программирования. | |
| 2 | + | ||
| 3 | + | Эта страница будет полезна для ознакомления новичкам в программировании, для расширения кругозора и уточнения отличий Паскаля от других языков программирования. Так же интернете часто возникают споры (в виде "флейма" и "холиваров"), насчёт Паскаля. Если Вы принимаете участие в одном из таких споров, можете смело использовать эту страницу в качестве источника информации. | |
| 4 | + | ||
| 5 | + | ## Почему Мы используем Pascal | |
| 6 | + | ||
| 7 | + | (Если вы сами не используете Object Pascal (или один из его диалектов), пожалуйста не пишите сюда ничего) | |
| 8 | + | ||
| 9 | + | Каждый разработчик свободен выбирать свои средства разработки. "Паскалисты" выбрали этот язык, потому что: | |
| 10 | + | ||
| 11 | + | - Современный Object Pascal один из наиболее продуктивных языков, пригодный для решения огромного количества совершенно разных задач. Вот списки известных приложений, использовавших один из диалектов паскаля: | |
| 12 | + | - [[Projects using Lazarus]] | |
| 13 | + | - [Applications Build With Delphi](http://delphi.wikia.com/wiki/Good_Quality_Applications_Built_With_Delphi) | |
| 14 | + | - Паскаль язык модульный-структурированный, что облегчает организацию исходников и переиспользования кода из проекта в проект; | |
| 15 | + | - Синтаксис языка чистый и ясный. Предупреждает разработчика от возможных ошибок. Отлично подходит для командной разработки; | |
| 16 | + | - Быстрое время компилирования, компилятору не нужны сторонние средства, чтобы определить какие модули требуют перекомпиляции, а какие нет; | |
| 17 | + | - В Object Pascal одна из лучших реализаций ООП и интерфейсов; | |
| 18 | + | - Компилятор FPC, создаёт нативный код, для большого количества платформ, что даёт преимущество в скорости над интерпретируемыми языками; | |
| 19 | + | ||
| 20 | + | ## Q&A | |
| 21 | + | ||
| 22 | + | Q: Синтаксис паскаля очень строг, многие выражения в языке Си, в паскале будут занимать несколько выражений. | |
| 23 | + | ||
| 24 | + | A: Строгость обеспечивает безопасность и понимаемость кода. | |
| 25 | + | ||
| 26 | + | Q: Паскаль не разрешает описывать сложные типы одним объявлением. Например: "массив указателей на функцию, принимающую 2 целочисленных параметра, и возвращающую указатель на функцию, возвращающую вещественный тип", в языке Си можно описать так: \<c\> float (*(*a\[10\])(int, int))() \</c\> | |
| 27 | + | ||
| 28 | + | A: А есть ли реальное преимущество у такой возможности? Выше указанное объявление может прочитать человек с большим опытом программирования на языке Си. Тогда как нижепреведённое объявление на Паскале может понять даже новичок. Кроме того, использование промежуточного типа (в данном случае TFloatRetFunc), очень помогает при внесении изменений в этот тип. | |
| 29 | + | ||
| 30 | + | ``` pascal | |
| 31 | + | type | |
| 32 | + | TFloatRetFunc = function : single; | |
| 33 | + | TSomeArray = array [0..9] of function (a, b: Integer): TFloatRetFunc; | |
| 34 | + | ``` | |
| 35 | + | ||
| 36 | + | Q: синтаксис C99, Ады\VDHL содержит т.н "Array initialization designators" - позволяющий инициировать константы массивов с явным указанием индексов \[диапазонов\] ячеек массива... т.е. можно безопасно описывать константы больших массивов | |
| 37 | + | ||
| 38 | + | А: Паскаль всегда безопасно инициализирует константы записей (в них это преимущество наиболее заметно), а константы больших массивов используются редко (зачастую их использование говорит о плохом стиле кодирования). | |
| 39 | + | ||
| 40 | + | Q: C позволяет создавать в структурах анонимные подструктуры, доступ к полям которых осуществляется как к полям структуры-владельца. | |
| 41 | + | ||
| 42 | + | А: А есть ли реальное преимущество у такой возможности? Использование неанонимного промежуточного типа (подструктуры) очень помогает при внесении изменений в этот тип и делает его назначение более понятным. | |
| 43 | + | ||
| 44 | + | ## преимущества над языками C/C++ | |
| 45 | + | ||
| 46 | + | - в паскале нет препроцессора (проще читать и понимать, исключён целый ряд ошибок, связанный с макросами и их конструкциями) | |
| 47 | + | - в паскале нет библиотеки основанной на шаблонах (типа STL). Не шаблонный код быстрее компилируется и его проще отлаживать (например, для понимания сообщений об ошибках компиляции не требуется специальных утилит, как в С++). | |
| 48 | + | - встроенный в компилятор строковый тип (String). При этом возможность работы с Null-terminated строками так же есть. | |
| 49 | + | - поддержка модулей (раздельных единиц компиляции). В C\C++ она отсутствует, эмулируется средствами препроцессора (#include). | |
| 50 | + | - в паскале у объектов есть свойства(properties), а в C++ их надо реализовывать вручную "изобретая велосипед" или использовать специфические для компилятора расширения. | |
| 51 | + | ||
| 52 | + | --- | |
| 53 | + | *From the Free Pascal wiki, page "Holywar/ru", as it stood on 2020-07-26 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
