pascal.toom.su посвящён только Turbo Pascal, поскольку другие версии Паскаль рассматривать нет смысла. Все учебные программы построены с учётом Turbo Pascal, и в других версиях то в одном месте, то в другом будут возникать нюансы, например, аргументы InitGraph может потребоваться переделать с Integer на SmallInt, в переменных Char нельзя хранить русскую букву на Linux и Mac OS X (кодировка на Linux, как правило, UTF-8) и прочие нюансы, из–за которых вы не забудете, что имеете дело с совершенно другой версией Паскаля.
Если же вы не ограничены рамками Turbo Pascal, имеет смысл обратить внимание на язык программирования Ада.
Несмотря на малую известность Ады в широких кругах, язык продолжает совершенствоваться и даже сейчас по многим характеристикам является более привлекательным для разработки и обучения, чем C++ и тем более Паскаль. Аду можно даже назвать C++ с человеческим лицом. C++ проектировался исходя из потребностей индустрии. То же можно сказать про Аду, но Аду не портила совместимость ни с C, ни с Паскалём.1
Ada > C++ > Pascal > C
Если вы не столь искушены в деталях разных языков программирования, вы можете думать об Аде как о следующей версии Паскаля и как о C++ с человеческим лицом. Многие конструкции Pascal (даже современных версий!) улучшены в Аде. C++ был ограничен с совместимостью с C и получился таким, какой он есть. Но ведь то же можно сказать про Delphi и Free Pascal! В ходе усовершенствования Ада стала лучше, но ценой несовместимости с Паскалём. Примеры и учебные курсы для Turbo Pascal несложно перенести на Аду, однако, совсем без изменений обойтись никак нельзя, поэтому Delphi и Free Pascal более распространены.
Заглянем внутрь
Внутри declare-begin-end можно определить внутренние переменные блока, а не только в var. При помощи так называемых агрегатов можно на месте конструировать записи и массивы, в то время как в Pascal агрегаты можно использовать только при статической инициализации глобальных переменных. Это уже не говоря о механизме межзадачного взаимодействия «рандеву» и других встроенных в язык механизмах параллельного программирования.
Что касается примитивов параллельного программирования, в Delphi, например, мьютексы реализуются через SyncObjs.TMutex, обычный класс, экземпляры которого нужно уничтожать явно в try-finally, а вот read/write lock реализуется через SysUtils.TMultiReadExclusiveWriteSynchronizer (из другого модуля!), с которым нужно работать только через интерфейс SysUtils.IReadWriteSync, а переменные интерфейсных типов явного уничтожения не требуют. Condition variables в Delphi и вовсе отсутствовали долгое время. Их реализацию нужно было скачивать отдельно. Весь этот бардак без изменений был позаимствован в Free Pascal.
FreePascal vs. Ada
FreePascal был создан для тех, кто не знает про Аду2, теми, кто не знает про Аду3. Оба эти обстоятельства необходимы для существования Free Pascal в настоящем виде. Без первого обстоятельства Free Pascal был бы не столь востребован, без второго обстоятельства Free Pascal вообще мог не состояться.
Фичи, пересаженные из C++ во Free Pascal, не работают так же хорошо, как они работали в C++ или как они работают в Аде (где они появились раньше, чем в C++, между прочим).
FreePascal одним своим существованием эффективно обедняет коммьюнити разработчиков на Аде в пользу более бедного Free Pascal, перехватывая тех, кто в поиске, на полпути к Аде. Ада, тем не менее, хорошо держится за счёт разработчиков на окладе. Как результат, мы наблюдаем раскол:
Во Free Pascal много хакеров (часто самоучек) и много хакерских прикладных библиотек, таких, как работа с CHM, с ресурсами и прочие могущие пригодиться мелочи.
В Аде, напротив, много грамотных инженеров (software engineers) с образованием. Компилятор был портирован на JVM и .NET. Частью стандартного инструментария GNAT является генератор интерфейсных пакетов для Ады на основе G++. С помощью стандартных генераторов привязок вы можете использовать почти любые библиотеки с интерфейсами на языках C и C++, а также Java.
Примечания
- ^ Касательно схожести Ады и C++: И в Аде, и в C++ можно сделать mix-in, унаследовав класс–аргумент в шаблоне. Попробуйте назвать хоть один другой язык программирования, в котором можно в шаблоне наследовать класс–аргумент. И в Аде, и в C++ можно использовать технику RAII.
- ^ но знает про Turbo Pascal или Delphi
- ^ не знает про Аду, но знает про C++