Pascal

Материал из Lurkmore

(Перенаправлено с Delphi)
Перейти к: навигация, поиск
Wrar64.pngA long time ago, in a galaxy far, far away...
События и явления, описанные в этой статье, были давно, и помнит о них разве что пара-другая олдфагов. Но Анонимус не забывает!
«

Кожен москаль вибирає Паскаль,
Хохли ж усі програмують на Сі.

»
— Фольклор
«

Всех, кого ты не спроси,
Программируют на Си.
Нынче встретишь ты едва ли
Тех, кто пишет на Паскале

»
— Фольклор

Pascal (Паскаль, Паскакаль, Поссалъ, Москаль, Пасквиль, Поцкаль, Пасцал, Пашка, В-Пасть-Кал, Турба (устар.), Турбопаскаль (устар.), Труба (устар.), Делфя) — мертвый язык программирования, созданный в 70-х годах прошлого века известным быдлокодером Никлаусом Виртом, чтобы учить говнокодить школьников и ступидентов, и изначально являлся упрощённым Algol-ем, освоив который нетрудно перейти на настоящий Algol. Но, позже ВНЕЗАПНО обнаружилось, что сей учебный язык может быть пригоден для написания реальных программ и даже игор (от чего Algol, утратив свою необходимость постепенно загнулся). Когда-то имел весьма солидную популярность, но сейчас ее полностью потерял, сохранившись в основном в виде Delphi для учебных и академических целей. Язык невозбранно привлекает возможностью писать почти как на обычном английском языке, а не ломать голову и пальцы о ++i + ++i, эзотерику истинности выражений (1/3 == 0) и (-1 > (unsigned int) 1) и прочих извращенных приёмов, принятых в C-подобных языках.

Думаете это Borland? Авотхуй! Это FreePascal

Содержание

Borland

Что такое было Borland?

Компания «Borland» была основана в начале 80-х годов прошлого века математиком и саксофонистом Филиппом Канном. «Borland» стала популярной на рынке программного обеспечения именно благодаря своим Turbo-версиям компиляторов языков программирования, выпускаемых для широких масс населения в те годы. А первым компилятором, который они сделали, был «Turbo Pascal». Вернее не сделали, они купили некого Андреса Хайлсберга, который до этого понаписал свою реализацию под названием Blue Label Pascal, чуть допилили, упаковали, PROFIT!

Этот компилятор с языка «Паскаль» в ранних версиях представлял собой диалект на базе UCSD Pascal, до того использовавшегося в основном на яблоках. Позднее, в Turbo Pascal были нагло украдены невозбранно позаимствованы из Mac Pascal такие расширения, которые позволяли его признать языком объектно-ориентированного и даже системного программирования, наряду с параллельно развивающимся языком С и C++ (например, передача нетипизированных указателей в функцию, свободное приведение типов, модификатор «absolute», директива «interrupt», ассемблерные вставки и пр). Да-да, анон, это невероятно, но факт, Object Pascal был создан именно в недрах Apple и занимал там примерно ту же нишу, которую сейчас занимает Objective C. Однако, несмотря на популярность, Turbo Pascal не суждено было стать языком системного программирования. На PC. На Маках, как известно, он вплоть до 90-х годов был основным языком системного и прикладного программирования (сумневающимся стоит посмотреть исходники Photoshop 1.0), однако впоследствии был почти полностью выпилен и заменен С++ (примерно в седьмой редакции Mac OS).

Одним из самых удачных решений «Borland» было объединение в одной программе (помимо самой оболочки) редактора кода, компилятора, отладчика и доступа к интерпретатору командной строки ОС (то есть они изобрели всё то, что теперь называется IDE, a Emacs для задротов). Кодер мог запускать свою программу непосредственно из среды разработки — это было первое пришествие RAD. Была также возможность компилировать программы в ОЗУ и исполнять (и, главное, отлаживать) их оттуда, а не с диска (в те годы многие пользователи загружались с дискет (НГМД), и подобная отладка через «память» заметно увеличивала скорость работы, компиляция и запуск занимали секунды, а не минуты). Правда, придумано это было не впервые, ибо отладчиком кода в памяти невозбранно пользовались ещё на ТХ-0 и PDP-1, когда для них были только Ассемблер, Фортран и Лисп, и не было никаких дискет. Одни перфоленты, да. Но главное не в этом, там отладчик не был отдельным приложением, как тот же FLIT для упомянутого ТХ-0, поэтому тут у Borland win.

Начиная с версии 5.0 у среды радикально сменился диалект. Сохраняя изрядное влияние UCSD-Pascal и все введённые в ранних версиях низкоуровневые плюшки, в основе своей она окончательно перешла на разработанный в Apple Object Pascal, чем и послужила его широчайшей популяризации. Тот факт, что под названием Pascal в настоящее время понимается именно Object Pascal, и именно на нём основывается общепринятый стандарт языка — заслуга в первую очередь Borland и TurboPascal, ибо за давностью лет все уже давно забыли, кто же изначально этот Object Pascal создал.

В версии 6.0 среда переписана на Turbo Vision (впрочем, лишь невозбранно спизженном с Mac-ов тех времен). Но те, кому доставляла лишь алгоритмическая часть их задач (то есть школота), а не новомодные понты Turbo Vision (смысл которых они понять не могли в силу слишком юного возраста), как только могли, старались продолжать пользоваться версией 5.0 и даже 3.0. Даже не смотря на труЪ-защищенный режим, появившийся в BP 7.0, и возможность программировать под Форточки 3.11 там же. Версия 7.0 получила также IDE под Win3.x и, кстати сказать, была первой, где отошли от программирования приложений под Виндус посредством функции Winmain и предложив объектный подход в создании приложений.

Параллельно «Borland» пыталась выпускать подобные программы-компиляторы для C, Prolog и BASIC. Первым склеил ласты Пролог, потом Филю замучила совесть — выпилил Бейсик (просуществовал до трубо-паскаля 4.0, присутствовал бинарный, в формат EXE, компилятор). Turbo C — представлял собой, на то время, вполне вменяемый скоростной компилятор (в отличие от мелкомягких поделок), но получив в нагрузку два плюса и Трубо Вижен (TV) — потихоньку скурвился.

Скурвился, впрочем, лишь по мнению тех, у кого от неприятия гениального, по тем временам, Turbo Vision наступило окончательное окукливание ФГМ: им казалось, что мелкомягкие стали единственными евангелистами Цэ, во вселенной ДОСа и и даже винDOSа. На самом деле Borland C++ невозбранно имел развитие и в Windows 3.11 (ололол, да-да, тот самый легендарный OWL, просто все, кто его знал, уже уехали в Лондон), и потом заново выкуклился в весьма популярной в отдельных кругах серии Borland C++ Builder (есть мнение, что лучше бы и не выкукливался), в результате чего на плюсах тоже можно стало кодить мышкой, как в Delphi. Количество быдлокодеров сильно возросло, отправив плюсы в быдлокодерские языки. Правда до тру оптимизации руки у борманов уже так и не дошли, а потом команда и вовсе ушла пилить бюджет, выделенный Бени Гейком под свой мерзкий .NET, гибрид идей визуалбейсика, Delphi и Java в одном лице. Алсо, Borland Builder до сих пор не поддерживает стандарт С++98 (который, в общем-то, полностью почти никто и не поддерживает).

Но то было уже потом. А пока в середине 90-х годов фирма поменяла политику, хитрожопо сменив ориентацию на выпуск фирменной RAD для объектного Pascal-диалекта, спёртого ими у яблока, под ОС Windows — Object Pascal. Тем самым она стала раскручивать продукт под названием «Delphi», и, надо сказать, настолько преуспела, что Бени Гейц впоследствии выкупил команду гениальных разработчиков вместе с их домиками на колесах, чуть более, чем целиком и насовсем. Стоит, впрочем, заметить, что переход на Object Pascal случился ещё в ДОС-эру и ничего, кроме охуевания школоты от Turbo Vision, не вызвал. Скатывание среды в сраное говно началось именно в Дельфях с появлением там возможности «кодить мышкой».

Почему Pascal стал популярен?

В 80-е и 90-е годы прошлого века, в связи с развитием технологий появлением большого числа ленивых кодеров, DOS-программисты желают послать нахуй ассемблер. В то же самое время, фирмы «Microsoft», «Intel» и «IBM» (i.e. ZOG) проектируют концепт под названием «PC» (писюк), позднее «PS/2» (полуписюк), а позднее и вовсе Wintel, и даже выпускают все это (вызывая приступы самоубиения об стены у юниксоидов и не только). Дешевые настольные компьютеры, очевидно, производят промышленную революцию. Теперь пользователем компьютера может стать практически любой человек, а не только нерд в очках. Выпускаемые персоналки имеют спрос среди колхозников, и такой же спрос существует на быдлопрограммистов, готовых говнокодировать под эту платформу. Основное требование к ним — говнокодить быстро и много. Правда, КО намекает, что дешёвые доступные настольные 8-битные компьютеры появились гораздо раньше писюков, еще в 75 году, и под них клепали интерпретаторы Basic, на чём поднялся дядюшка Билли из Мелкомягкого.

Вот тут-то «Borland» и подсуетился. Но компилятор «TP» был-таки выпущен для этой набирающей обороты платформы. И «TP» по возможностям написания кода для процессоров x86 не уступал языку «С». Но ограничение на максимальный размер массива в 64к и безумная реализация функции Delay() вызывала повышение ЧСВ у СИонистов. Устранено было только в ТП 7.01.

В результате, в то время:

  • Вакантные места программистов для писюков захватывает мафия бывших студентов Вирта (ну им так казалось, на самом деле там было все схвачено вплоть до конца XX-го века ушлыми клипперистами, фокспрошниками и дибейзниками, да да). Но паскалисты (студенты) пишут программы (лабораторные) быстро, решительно и безошибочно (ибо среда прерывает компиляцию при любой попытке написать явно школьный код).
  • Программисты на «C» делают в это время фатальные ошибки, постоянно забывая, что в этом их языке символ «*» обозначает, в зависимости от контекста, четыре совершенно разные операции (вообще, ошибкам при программировании на «С» был посвящён целый раздел в Википедии (выпилен)), из-за чего сессия сдается не вовремя, девки не дают, и все такое разное, ну вы понимаете. Правда, это всё дескать более от ФГМ недокодеров, ибо там чётко написано, что программировать нужно уметь (но мы то знаем…).
  • А тем временем GW/Quick/Visual BASIC массово начинают преподавать в школах как язык дрессировки обезьян программированию. И, что характерно и удивительно, обезьяны крайне успешно дрессируются, при всех мыслимых нарушениях азов программирования обычные пользователи, вооруженные VB6, Access и макросами Excel (не говоря уже про FoxPro) до сих пор порой показывают чудеса в написании полезных для бузинеса программ учета товара на складе и не только (но это уже из другой оперы). А программисты на Паcкале, не имея тогда толком возможности ходить в базы данных, лишь тупо пялились на свой Turbo Vision; хотя и существовали вполне себе сетевые btrieve и Paradox Engine, масса DBF engines в виде сторонних библиотек (некоторые даже с поддержками индексов и крутых наворотов), но всякие эти ваши гриды и биндинги визуальных контролов еще не были придуманы, и далеко не каждый мог придумать подобное сам. Более-менее поправил эту ситуацию Delphi — там уже появилась полностью нативная поддержка BDE (DBase/Paradox/InterBase/FireBird/Oracle/DB2), впоследствии ADO (Oracle/MSSQL/Access/…) и т. д.
  • Кроме того, нельзя не отметить влияние на популярность Паскаля и сугубо местной специфики: видимо, благодаря позиционированию Паскаля как обучающего языка, он стал дико популярен на всякого рода IT факультетах вузов этой страны. (Да, да, дорогой анонимус, за пределами МКАД тоже есть жизнь, и там даже иногда встречаются всякие университеты/академии/институты.) Что характерно, многие из этих вузов до сих пор не вылезли из каменного века, и их студики до сих пор пишут свои программистские шедевры на Turbo Pascal 7.0, кроя матом несовместимость от слова "совсем" TP7 с Windows 7 и изъебываясь с режимами совместимости и всякими DOSBox-ами. Вдвойне не повезло тем, кто может себе позволить более 3 гигабайт оперативной памяти и поставил себе 64-разрядную версию винды. Кстати говоря, классическая Delphi 7 также имеет некоторые проблемы совместимости с последними версиями Windows, но хотя бы запускается под ними.

Появления Borland Delphi

Логотип Borland Delphi

Но с выходом Windows, «Borland» решил таки поддержать своих фанатов. На любое новое Технологическое введение Microsoft (VBX, ODBC, ADO, ActiveX, COM, .NET, тысячи их), среда разработки Delphi и тогда, и сейчас отвечает полной (иногда бездумной) поддержкой всего этого.

Фейлы Delphi

You should never get this error message. If you see it, you’ll shit bricks.
  • «Тупорылый» оптимизатор — правда, в винде и c наплывом этих ваших пентиумов и кордвадуо кодеры оптимизаторами уже не сильно заморачивались — ибо редкий пользователь заметит разницу реакции программы на клик мышки между 0.1 сек и 0.01 сек, вот честно.
  • Якобы «тупорылый» компоновщик — минимальное оконное приложение, сделанное на основе стандартных компонентов, весило ненормально много для привыкших к минимализму системщиков (около 300 кб). Причина была в том, что Delphi не может исключить из класса часть методов, даже если они нигде не используются, то есть пихает в приложение код класса и всех его предков полностью, а в VCL классы очень тяжелые и с длинной генеалогией. Алсо, вправив Delphi мозги (ну или рисуя окна непосредственно через функции WinAPI), можно заполучить более компактные экзешники. Особенно в этом деле помогает библиотека KOL, с помощью которой можно писать оконные программы весом в несколько десятков килобайт. То есть дело вовсе не в компоновщике, а в библиотеках. Так или иначе — в наше время все это выглядит особенно ржачно, когда внезапно замечаешь, что системный mspaint.exe (наследник pbrush.exe) в Windows 7 весит уже порядка 6376960 байт, а системная библиотека .NET (или Java), будучи скомпилированной и сжатой — весит не менее 20 мегабайт.
  • Настоящий фейл был связан с написанием софтинок с кнопочками. Дело в том, что аж до 2008 года (когда вышла Delphi 2009) родная библиотека VCL весьма хреново поддерживала Юникод, что делало локализацию приложений под все возможные языки (в смысле чтоб одновременно все сразу в одной запущенной программе) несколько затруднительной (хотя если язык в момент времени предполагался только один, который системный, то было глубоко пофиг, ибо даже китайский там весьма и весьма неплохо работал). В принципе, еще в 2001-м в эта проблема решалась чуть более, чем полностью сторонними наборами стандартных компонент с поддержкой Юникода, а начиная с версии Delphi 2009 — решена раз и навсегда сама по себе, «из коробки», но многие кодеры и тогда, и даже сейчас — смутно это знают и понимают. Такие дела
  • Kylix был неплохим начинанием, однако выпилен [по слухам] в угоду микрософту в обмен на .NET-ништяки. Но не смотря на это, скомпилированные в Kylix 3 (или CrossKylix) бинарники вполне неиллюзорно могут работать под CentOS 5.5, OpenSuSE 11 и даже Ubuntu 10.04 LTS — просто редкий школьник способен обнаружить данный факт.
  • После релиза Delphi XE в 2011 году, по официальным заявлениям Embarcadero на одной из конференций, снова добавится поддержка Linux и прочие плюшки на зло этим вашим VS. Однако пока это лишь обещания, да будет превентивно записано в фэйлы.

Что же есть Delphi?

Педивикия о Delphi:

Delphi (по-русски обычно произносят [бо́рланд дэ́льфи] или [бо́рланд дэ́лфи]) — это интегрированная среда разработки ПО фирмы Borland. Delphi является средой RAD (от англ. rapid application development — быстрая разработка приложений).

В 1986 году фирма Apple разработала объектное расширение языка Паскаль, получив в результате Object Pascal. В 1989 году аналогичные объектные средства были добавлены фирмой Borland в систему Turbo Pascal (языковые различия между объектным Turbo Pascal 5.5 и Object Pascal от Apple крайне незначительны). Последующие версии Turbo Pascal, который стал затем называться Borland Pascal, дополняли объектное расширение новыми средствами, этот процесс продолжился и в ходе развития языка системы Delphi. Название языка менялось: от Pascal, через Object Pascal до Delphi, в литературе встречалось название Delphi Pascal, в последних версиях Delphi язык именуется так же, как и сама система (любопытный момент: в Delphi 7 пункт системного меню, запускающий справку по языку, как и в более ранних версиях, называется «Object Pascal Reference», а сам запускаемый им модуль помощи имеет заголовок «Delphi Language Manual», в тексте язык также везде называется «Delphi»). Автор же языка — расовый швейцар Мыкола Вирт — заявляет, что язык, используемый в Delphi — это Delphi (всегда ваш, К. О.), а не изобретённый им Паскаль.


Free Pascal

Существует также вполне себе нормальный компилятор Pascal. Поддерживает все возможные диалекты, но с видимым уклоном в сторону подражания Borland. В нем даже есть свой клон Turbo Vision. В процессе развития в него запилили порты библиотек и возможность компиляции кода написаного для Delphi, gpc, hp/ux, МАКовских и ИСОшных стандартов паскаля и вообще всего, что Pascal хотя бы отдаленно напоминает. Также, в отличие от своего старшего собрата, прибитого гвоздями к x86, реально является кроссплатформенным и посему винрарен чуть более, чем полностью. А ещё есть IDE Lazarus, внешне похожее на Delphi, в которое даже можно импортировать некоторые сторонние компоненты для той самой Delphi (ну и встроенные VCL клоны тоже многие уже переписаны, при том реально работают и под Linux и под Maс OS X, ну и под винду — ясен пончик). Правда, крайне тупой анон жалуется на размер получаемых им экзешников — дескать гигантский даже в сравнении с Delphi, не зная про нужные ключики[1].

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

PascalABC

PascalABC.NET с формочками

Также была разработана действительно труЪ (только для обучения) версия Паскалю — PascalABC (устарела морально и физически, больше не развивается) и PascalABC.Net. Хотя бы встроенный задачник стоит того, чтобы взглянуть на эту систему.

Стоит, правда, заметить, разработчики никогда не ставили себе задачей обеспечить полную совместимость с Delphi (и тем более с TP) — для них был эталоном язык C#. Оно так же закрыто (что не мешает просматривать исходные тексты и наматывать на ус идеи), запускается под .NET и уже успешно портирована под Mono. И изначально создавалась именно для обучения студентов программированию (учителя, уставшие от TP/FP это прекрасно поймут), что однако совершенно не препятствует созданию коммерческих приложений. Идеально подходит для первого языка программирования, низкий порог вхождения вначале, а потом, если школьник чему-то научится, писать серьёзные проекты, не переходя на Delphi либо C#/C++.

В последнем релизе поимела возможность редактирования формочек, совсем как в этом вашем Delphi и Lazarus.

Virtual Pascal

Virtual Pascal v2.1 win32

В довершение, нельзя не отметить еще один вполне годный компилятор — Virtual Pascal. Представляет из себя 32-битный компилятор с заявкой на кроссплатформенность. Имеет встроенную IDE с подробной помощью и отладчик. Может создавать исполнимый код для операционных систем OS/2, Win32 и ограниченной поддержкой линукс через костыли, навроде EMX. Впрочем для линупса никто на нем не писал, а вот для олдфажной OS/2 вполне кодили, пока в Free Pascal глюк на глюке сидел и глюком погонял. Раньше был платный, ныне бесплатен и доступен для свободного скачивания. Увы, проект заброшен с 2005 года. Поговаривают, что он написан чуть менее чем полностью на ассемблере, из-за чего поддержка кода адово затруднена. Исходники закрыты. С другой стороны, можно сказать, что Virtual Pascal является законченной программой. Реализована полная совместимость с языками Turbo Pascal (v7.0), Borland Delphi (v2.0) и Free Pascal (v1.0.x).

Почему именно Virtual Pascal? Размер создаваемого кода — вот главная фишка компилятора. Так, например, консольная программа, выводящая Hello World, скомпилированная Virtual Pascal v 2.1 занимает 11,776 байт. Та же программа, скомпилированная Free Pascal v2.4.0 — 31,548 байт. Delphi v7.0 — 15,350 . С оптимизацией тоже дела обстоят неплохо, иногда получается быстрее Free Pascal. Знакомый всем с детства IDE также доставляет (хотя она же давно есть и во Free Pascal).

MIDlet Pascal

MIDlet Pascal 2.02 Rus

Это ещё один занятный компилятор Pascal. Позволяет создавать программы для мобильников под Java ME, причём компилирует сразу с Паскаля в жаба-байткод. Тормозной (впрочем, небольшие программы компилирует довольно быстро, а вот по-настоящему сложные проекты компилит минут по десять, чем эпично сливает NetBeans) и не слишком удобный инструмент для создания приложений и игр для мобилы. Кроме того встроенная функциональность обрезана по самые яйца: никакого ООП, никаких ссылок, следственно вообще никаких динамических переменных (только статика, только хардкор), никаких параметров-переменных в функциях (если хочешь передать наружу более чем одно значение, то тебе помогут только глобальные переменные). Распространяется и работает бесплатно. Имеет бешеную популярность среди школоты, которая только недавно учила Паскаль в школе на информатике, а тут вдруг выяснилось, что на данном языке можно писать и что-то более востребованное для рынка. Увы, из-за отсутствия прямых рук и верхней головы неспособны овладеть даже таким элементарным языком и занимаются только тем, что просят помощи у более продвинутых товарищей на одном широко известном в узких кругах форуме. Кроме того, МР имеет возможность подключения библиотек на Java, что более чем актуально, ибо сам по себе язык скуден.

Достоинства языка Паскаль

  • Использование вполне понятных английских слов begin, end, or, and, not вместо фигурных скобок и закорючек.
  • Строгая типизация — защита от досадной возможности вступить в компост в парадном, выстрелить себе в ногу при этом, и от прочих видов мазохизма, так любимых писателями на C/С++. Ну и от дураков алсо (хотя от них помогает обычно плохо, точнее ровно до той поры пока они не узнают про касты).
  • Элементы массива можно нумеровать начиная хоть с нуля, хоть с единицы, хоть даже с тысячи (а не только с нуля).
  • Возможность прямой работы с памятью практически полностью приближает Pascal к С/C++.
  • Внятные языковые конструкции, то есть «*» — это «умножить», а не «умножить, указатель, разыменование указателя, указатель на функцию, возвращающую указатель, или вообще поди пойми чего там в C++ перегружено, etc». Также в Паскале отсутствуют знаменитые инкременты ++i + ++i(хотя есть аналог в виде процедуры inc()), ввиду чего программер больше времени посвящает собственно решению задачи, а не выносу мозга себе и остальным вида «почему 13, а не 14» или «почему 14, а не 13» (нужное подчеркнуть) — в этом языке напрочь отсутствуют операторы, способные изменять значения переменных внутри выражений, что более чем разумно, а случаев неопределённого поведения нет вовсе.
  • Благодаря полной поддержке ООП в паскале (а точнее в некоторых его потомках, да и не полная), можно создать мутанта Процедурного Программирования и Объектно-Ориентированного Программирования. Некоторые языки нервно курят в сторонке.
  • Таки язык программирования промышленных контроллеров (ПЛК) — язык ST (aka SCL) основан на Паскале, и учившему Паскаль освоить его зело легко.
  • Лёгкое и быстрое изучение. Delphi вообще даёт возможность приступать к работе без годов задрочерства.
  • Лёгкое и понятное построение GUI, MFC на этом фоне смотрится вы знаете как.

Достоинства формочек Delphi

  • Быстрая компиляция по сравнению с любой IDE с C++ — проект на Delphi в миллион строк компилируется и собирается за секунды, тогда как C++ ники обычно тоскливо втыкают в процесс сборки минутами
  • Намного более читабельный и даже более лаконичный код, не смотря на чуть более громоздкие ключевые слова языка (достаточно посмотреть на любой код на C++, написанный с использованием MFC, Qt, GTK+, c аналогичным на VCL, чтобы понять истинность данного утверждения), хотя в принципе, лаконичность исходников наблюдается только потому, что большая часть функциональности уже вшита в родные или купленные сторонние компоненты (однако если даже посмотреть на один и тот-же код, просто написанный на C++ и Pascal, к примеру, реализацию yacc, то миф о какой-то особой лаконичности C++ также теряет практический смысл). А стоит попробовать изобрести велосипед, чем обычно занимаются С++ ники (у которых обычно нет компонент, и вообще библиотеки недоразвиты, да и использовать чужой код не позволяет ЧСВ), и размер папочки с проектом также начинает невообразно расти. Но вот читабельностью кода Pascal, да, изначально принципиально превосходит Си, ибо на Си накодить «чёрную магию в одну строку, которая непонятно почему работает», гораздо проще (по этой причине даже случился эпичный фейл с переписыванием 7zip под Delphi, когда быдлокодер-портировщик ниасилил код на C++, и реализовал ее по-своему, неоптимизированно, из-за чего в бенчмарках код 7zip, скомпилированный на Delphi — стал проигрывать аналогичному на C++ где-то в раза два-три, правда лень уже искать места с обсуждением этого факта, выловленного профилировщиком).
  • В Delphi есть уже готовые и весьма разнообразные средства работы с БД (всякие там ADO, FIB+, ODAC и прочие AnyDAC, за которые нужно выложить приличную сумму), до которых C++нутым еще фапать и фапать (и которые типовому С+±ку в голову вообще не придет использовать в повседневной работе — он сразу-же начнет свои писать, особо оптимизированные велосипедные, затратив сразу своего времени на сумму, раз в двадцать превышающую стоимость какого-нибудь AnyDAC, а потом потратив еще по столько-же раз десять, но уже в последующие лет пять исправлений постоянных глюков своего чудного велосипеда, вместо того, чтобы делом заниматься). В результате, пока красноглазики на C++ сидят со своим говнокодом, дельфикодеры обычно сидят уже с гешефтом, правда небольшим, но уже!
  • Благодаря действительно неплохому (за некоторыми исключениями) редактору форм в Delphi, ровно как и в Borland C++ Builder, можно легко (Use help, Luke!) и быстро наклепать как-то работающий прототип, под пристальным взглядом начальства, без всякого соблюдения минимально разумных правил ООП — просто из собственной лени (однако, открывать такой проект через полгода-год второй раз не захочется). Однако, это и сыграло с продуктом злую шутку (и привлекло over 9000 безруких щкодников) — вместо изучения основ программирования, принципов ООП, быдло обычно быстро учится программировать мышкой — клепать элементы управления, втыкать им нужные свойства и писать «код» в обработчики Button1Click, но не более, справедливо аргументируя «А зачем, если и так все работает?»).

Сперва добейся

Тем не менее, на Delphi написано множество кошерных и православных программ, наиболее известные:

  • AdAware
  • Age of Wonders
  • AIMP2 (и AIMP3 же!)
  • Altium Designer
  • Auslogics Disk Defrag (и все их продукты)
  • BS Player
  • Doom 2D: Forever
  • Doom: The Roguelike
  • FastStone Image Viewer
  • FL Studio (ex-Fruity Loops)
  • Inno Setup
  • Macromedia Captivate
  • Macromedia HomeSite
  • MultiEdit
  • PartitionMagic
  • PE Explorer
  • Photoshop 1.0 — часть асм, часть паскаль.
  • PHPEdit
  • PL/SQL Developer
  • Resource Hacker
  • SASPlanet
  • Scanner
  • Skype для Windows (какая-то часть. Чтобы убедиться, достаточно заглянуть в ресурсы: присутствуют дельфовые DVCLAL и PACKAGEINFO)
  • Space Empires 4,5 (игра 2000)
  • Space Rangers 2 (игра 2004)
  • Spybot — Search & Destroy
  • The Bat!
  • The KMPlayer (не тот w:KMPlayer, который для KDE, а другой, по некоторым данным, нарушающий GPL)
  • TOAD
  • Total Commander (а то!)
  • TuneUp Utilities
  • Webroot Spy Sweeper
  • Поднебесье
  • Тысячи их!
  • Ну и да, ненавистный всем QIP. Который, вообще-то, был вполне себе кошерной программкой, прежде чем его автор связался с РБК и скатил проект в сраное говно.
  • Алсо, первый вариант этого вашего кошерного GCC был напейсан самим Столлманом на посцале.

Во избежание срачей следует заметить: вышеприведенный список нужен не для демонстрации превосходства над другими языками, а чтобы показать, что сам по себе Паскаль (и даже его реализация — Delphi) вполне кошерен и годен к использованию.

Недостатки языка Pascal

Free Pascal против Python. Почувствуй разницу, школьник!
Типичная программа на делфи
  • Сравнительно громоздкие конструкции языка. Использование длинных английских слов begin и end вместо фигурных скобок. В IDE они обычно выделяются шрифтом, и ни у кого проблем не вызывают, кроме тех, кто привык к C-подобным языкам — их мозг упорно пытается воспринять их как названия функций/операторов/объектов. Их дольше набирать (5 и 3 байта вместо двух). Они не создают подсознательного впечатления графических элементов. Что особенно не доставляет, когда begin/end вкладываются друг в друга 3 и более раза — от обилия begin’ов появляется лёгкое головокружение и для любителя С++ код становится неудобочитаемым. (Use code formatting, Luke!) То же самое касается логических и двоичных операторов. Ну а краткость и красота ООП же заставляет просто рыдать от счастья.
  • Статическая типизация — защита от явно ненормальных программистов. Хотя, использование move(..) и явное приведение типов позволяет присвоить что угодно чему угодно (впрочем, во многих языках точно так же, кроме некоторых особо извращенных с динамической типизацией).
  • Слишком низкий порог вхождения, как ни странно — даже поболее низкий, чем у C# и Java, что порождает любовь школьников, студентов, преподов и просто случайных прохожих к этому языку. Однако после небольшого анализа рынка труда оные обычно дружно идут заново осваивать 1С, C# или Java (на самом деле — учиться программировать хоть как-нибудь и что-нибудь полезное), порождая кучи ненависти к Delphi лично и громогласно потрясая «мнением», что Delphi дескать мертв и буржуи на нем, дескать, вообще ничего не пишут, и вакансий и в РФ нет в частности [1].
  • Локальные переменные, как правило, нельзя определять в том месте, где они начинают использоваться (кроме PascalABC.NET) — это, по мнению профессионалов C++/C#/Java — приводит к засорению пространства видимости, проблемам с оптимизацией (привет цикл for!) и нервному тику у кодера, который должен лезть через 2 страницы (впрочем, не обязательно ему это делать самостоятельно — современные средства разработки, в том числе даже бесплатный Lazarus, умеют определять локальную переменную и даже предполагать её тип из операторов присваивания по одной команде) в блок var (да, представьте, какой ужас, переменные в Pascal/Delphi нельзя определять где попало, а только в строго отведенных для того местах, что противоречит принципу «локальные переменные — это не такой дюже важный объект, чтобы ему уделять столько внимания»). При этом, конечно, типичный студент, ненавидящий эти var в Delphi как-то и не догадывается, что писать метод, который не вмещается в экран (то есть больше 10-15 строк) — это признак явного непрофессионализма и непрочитанной книги Refactoring. Однако человек, таки прочитавший Фаулера, замечает, что Extract Method применяется уже ПОСЛЕ того как метод разросся на 2-3 экрана. А вот человек, таки не только прочитавший, но и осмысливший Фаулера и Макконела, замечает, что у нормальных программистов ничего не разрастается на 2-3 экрана, они сразу делают функциональную декомпозицию, если видят, что метод не вписывается в 75% экрана. Однако другой человек, который реально применял рефакторинг в реальных фирмах скажет, что рефакторинг без юнит тестов проводить НЕЛЬЗЯ. А т.к. в делфи полноценной поддержки тестов с моками и стабами нет (The Art Of Unit Testing с примерами на ПАСКАЛЕ? Нет, не слышали.), то ни один ВМЕНЯЕМЫЙ прогер не будет делать рефакторинг БЕЗ тестов. Never touch the running system. Ога.
  • Case-insensitive. То есть, begin = Begin = BEGIN = BeGiN. Вот это раздражает, потому что хорошему программисту далеко не пох: хоть он всё равно пишет идентификаторы в правильном регистре, но чужой код, без соблюдения стиля — может довести до рвотных инстинктов (см. исходники Free Pascal). В то же время служит важной защитой от быдлокода со введёнными похожими переменными вида BiasX, BIASX и, biasX, разницу между назначением которых забывает сам же быдлокодер через полчаса.
  • Delphi провоцирует быдлокодеров на внесение логики во всякие непотребные места: в код обработки событий (w:Магическая кнопка), в обработчики события Button1Click, что есть нарушение этой модели Model-Controller-View.
  • Как ни странно, основной: Pascal/Delphi лютой НЕНАВИСТЬЮ ненавидели в университетах этого вашего Пиндостана. Как следствие — Паскаль оказался дико нелюбим всеми этими вашими программистами из Калифорнии, которые, как ни странно, в основном и нанимали аутсорсеров в этих ваших Россиях, что привело к тому, что привело. Как и яблофагия, Паскаль, в какой-то степени, пал жертвой моды, так как количество ещё более уёбищных языков, цветущих и пахнущих (достаточно вспомнить ООП-уродство от Страуструппа, которое плодило совершенно уродский код до того, как вокруг него возвели ограничения).
  • Unicode появился только в Delphi 2009, благодаря чему переносимость кода на другие версии такая ахуенная.
  • Литература. Из-за любви быдла к этому языку, книги пишутся той же самой аудиторией (Флёнов и т. п. профессиАналы-хакеры). Самое большее что из синтаксиса там описывается — что такое begin, end, if, for. Остальное — VCL, как тыкать формочку.
  • Отсутствие GC. Вообще, недостаток двуликий — с обратной стороны это очень нужно. Но, как язык для системного кодинга Delphi не слишком то предназначен, а отсутствие сборки мусора вызывает бурление мозгов у быдла, которое не удаляет объекты (подобие GC + куча сомнительной хуиты запилили в XE4 для ARM компилятора). Капитан очевидность добавляет, что GC на самом деле в Delphi есть изначально (правда сделан был только для строк). GC есть и в случае этих ваших Interface._AddRef, Interface._Release, кому ну очень сильно надо (подсчет ссылок). Да компонентная модель Parent-Owner также автоматически занимается вопросами удаления мусора. Говоря проще — элементы GC в Pascal/Delphi есть (там где оно реально нужно и полезно, а не тупо принудительно везде), но считается его что нет вообще, ибо нефиг.
  • IDE. Начнём с того, что выбор нормальной IDE небогат, тут или бажная RAD Studio стоящая немалых вечнозеленых, либо бажный Lazarus, но зато бесплатный. После Delphi 7-й версии до сей поры не было выпущено ни одной быстро работающей и устанавливаемой с первого раза, без костылей, IDE. Деталями нормальности она начала обрастать только с XE версии.

А вообще, полный разбор недостатков Паскаля был «выполнен» Брайаном Керниганом в статье «Почему Паскаль не является моим любимым языком программирования». Оценить градус неадеквата автора можно тут тут, или в каком-никаком, но переводе тут.

Это, правда, слабоактуальный даже на момент выпуска статьи бред из конца 70-х, но все равно кагбе намекает. Вирт по выходу сего сборника пытался вяло отгавкиваться, что он-де сторонник идеи о том, что для каждой задачи необходим свой инструмент, и что Паскаль разрабатывался только как учебный продукт и ни для чего более использоваться не должен, но никого не убедил. А потом и вовсе запилил Модулу-2, оказавшуюся таким хтоническим пиздецом, что он аж сам испугался, и, узрев свет энтерпрайза, ушёл писать сборщик мусора для жабки. При этом особенно доставляет то, что эта смешная и неадекватная статья вышла в начале 1980-х, когда уже существовали более развитые диалекты Паскаля, избавленные от большинства указанных в статье пороков, но которые, похоже, Кернигану были принципиально неизвестны. Некоторые недостатки Паскаля были также исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров. Никлаус Вирт понимал недостатки созданного им языка, но, следуя традициям академической среды и собственным принципам, согласно которым «неподходящий инструмент надо не исправлять, а заменять», не стал его самостоятельно развивать дальше, а разработал новые языки семейства: Модула-2 и Оберон, а на Паскаль положил шланг. Вот только Оберон и Модула так и остались популярны в узких кругах (то, что на Модуле написаны модули управления Буран, а также современными спутниками — не считается). При этом типовой Delphi-кун искренне верит, что Вирт после создания Паскаля впал в маразм и перестал понимать разницу между практическим инструментом и академическим упражнением (не верящим — достаточно посмотреть на blackbox, как реализацию Oberon).

Глубинные причины ненависти к Delphi/Pascal

В Интернетах уже стойко закрепилась ситуация, когда постоянно, буквально уже на третьем или четвертом посте в форумах (да и вообще где бы то ни было) какой-нибудь долбоеб нет-нет да и обязательно вставит свои пять копеек про то, что:

  • Delphi мертв
  • на Delphi никто ничего не пишет ни в СШA, ни в Европе
  • на Delphi нет приличных вакансий в РФ, а то, что есть — платят гроши и заставляют допиливать старые задачи, сидя на коробках из-под мониторов перед ЭЛТ-мониторами в госучреждениях
  • на Delphi никто не открывает новых проектов
  • Delphi давно продан непонятно кому, и уже не развивается (ну… версии 2006, 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8 уже не торты, само собой)
  • вся команда из Borland ушла в Microsoft
  • на Delphi можно только программировать мышкой, и ничего сложнее двух кнопок и поля ввода написать нельзя

и тысячи, тысячи подобной ерунды.

Что, как несложно догадаться, не может не вызывать недоумения, ибо вроде как продукт уже мертв, а почему-то и регулярно его новые версии выходят, и работа твоя никуда не девается, и новых проектов на следующий год сейлзы навалили уже пару штук, а нормальных сотрудников с опытом работы даже в Москве просто так не найти, и все нормальные хотят ЗП строго от 80-90 штук на руки (и это еще без бонусов), и почему-то до сих пор ничего в родной фирме (и во всех трех, в которых удалось поработать за последние лет десять) так и не переписали на .NET (хотя все собирались и даже .NET-чиков наняли, аж два отдела). И т. д.

Так стоит ли разобраться в ситуации? Откуда столько мегатонн ненавистей к, в общем-то, вполне обычному коммерческому продукту для сверхбыстрого написания всяких окошек к базам данных и не только?

А причины, наш дорогой читатель, просты и очевидны, лежат, так сказать, на поверхности: человеческий, сука, фактор.

Вернемся в школьные и студенческие годы нашего типового будущего говнокодера, но пока еще такого юного и полного подающих надежд дарования. В чем суть его радужного детства-студенчества? Правильно! Он старательно изучает в школе Pascal (Turbo/Free), и потому что преподаватель информатики ничего особо другого и не знает, а будучи помещен в ВУЗ-ик — наше дарование натужно изучает много чего, от C++ и Java, но вот почему-то все курсовые получается писать только на Delphi, да и многие однокурсники, хоть и пускают сопливые пузыри про Ruby и .NET, но курсовой по дискретной математике, с рисованием графов, все равно шпарят на Delphi.

Вот и получается, что отучившись в ВУЗе, наше юное дарование кое-как умеет программировать на Delphi, в теории знает основы .NET и/или Java (в рамках семестра), ну и туманно помнит, что в результате целой ночи так и не написало лабораторную на C++, ибо, блин, как же непонятны эти дурацкие указатели там. Ну и PHP еще, слышал, есть такой язык…

Но… это все хорошо. Но диплом защищен, ура-ура, пора бы уже устраиваться и на работу, правда (ну или третий курс уже стукнул, и тоже поработать хочется)? И… вот тут и случается Epic fail! Что имеет и что получает наше дарование?

Во-первых, ЧСВ изначально дает о себе знать. Ибо или красный диплом получен, или самомнение о себе явно зашкаливает до уровня второго если не Билла Гейца, то Торвальдса.

Во-вторых… а вот реалии почему-то говорят строго об обратном. Попытка собеседования вызывает неумолимый, жгучий, и очень даже реальный Butthurt! Дяденька в очках на собеседовании (на всех двадцати фирмах куда была попытка устроиться со знанием любимого Delphi) весьма жестко, непонятными вопросами и задачками показывает, что ты — практически полный d’Bill и программировать умеешь чуть менее, чем вообще не умеешь (а реалии таковы, что на имеющиеся вакансии Delphi действительно нужны прокачанные годами некислые скиллы, ступидентов туда уже давно не берут, ибо это чревато совсем неуправляемыми потоками говнокода вплоть до потери бизнеса). А даже те дяденьки, которые говорят «ну хорошо, мы подумаем» — почему-то не перезванивают! А это больно! Это очень больно! А папа, мама настойчиво намекают, что пора, сынок, и на работу устраиваться, не хотят они за комнату съемную в Москве твою платить, кризис, дескать. И за одежду и питание, пивасик — тоже (а это ваще плохо).

В-третьих, посмотрев по сторонам, наше дарование весьма неиллюзорно убеждается, что более расторопные одногруппнички быстренько уже понаустраивались во всякие фирмы, где нужны PHP, Python, .NET и даже Java-кодеры. И вообще без опыта работы! Вообще, просто пришли говорят, порешали задачи на сообразительность, и все, взяли. Во как!

И тут наше дарование принимает стратегически верное решение. Покупает книги вида «PHP5 и MySQL», «Программирование на ASP.NET», «Ruby on Rails», «Основы Tomcat», «Python» Лутца и «Django» Головатого, изучает их все, и… с пятой попытки устраивается хоть куда-то. WIN! PROFIT!

И… ну короче, надоело уже. Все вы уже поняли. Юное дарование получает какие-то денежки, начинает прилично питаться, потом начинает даже говнокодить (через год) что-то уже самостоятельно, а не под строгим наблюдением рядом сидящего говнокодера с чуть менее нулевым, чем у тебя самого опытом, даже снимает через года два отдельную квартирку. И… понимает! Что во всем виновата Delphi! Во всем виноваты преподаватели! Которые совали ему мерзкую Delphi, он ее всю изучил, а она не дала ему зарабатывать даже на питание, одежду и съем квартиры…

Впоследствии это тело дорастает даже до тимлида какого-нибудь, в EPAМ-е, процесс окукливания пациента в его ненависти к Delphi окончательно цементируется, и уже вполне половозрелый балбес лет 27 от роду решает донести миру ПРАВДУ!

Примеры ПРАВДЫ про Delphi



Ночной кошмар (эпичная копипаста)


Учебники Фаронова

Отдельной иконой российских паскаляфагов являются учебники Валерия Васильевича Фаронова. Учебники представляли собой, особенно для того времени, лютейший вин — там просто, понятно и структурировано объяснились как основы программирования, так и собственно язык. По сути, многие программеры девяностых (включая автора правки) учились быдлокодить именно по этим учебникам. Вообще, надо понимать, что вменяемых учебников по любому языку, что у нас, что за бугром, считанные единицы — 95% авторов выебываются и намешивают в текст какой-то романтической хуйни, вместо того чтобы планомерно излагать смысл. Фаронов — как раз такой.

На данный момент существуют издания Фаронова для всех версий Паскаля и Делфи. Начинающим хацкерам крайней рекомендуется — там вам на пальцах объяснят, что такое условные операторы, циклы и объекты. Этого вполне достаточно, чтобы понять большинство современных объектных языков.

Алсо, интервью с автором и его труды.

Книжные новинки

Вывод

Pascal (Free Pascal/Delphi) — среди олдфагов считается расово верным языком программирования, но для современных задач (WEB, Enterprise Mobility), которые обычно уже не разрабатываются только под нативый Win32 безнадежно устарел.

Но сам язык Pascal, как и Delphi — вовсе не мертв, и новые версии выходят практически каждый год, радуя олдфаговцев и не только. А для эталона мертвости языка советуем болезным обратить взор на такие вещи, как VB6, Visual FoxPro, J++. Или на BeOS и OS/2.

Кроме того, в виду наличия FreePascal и Oxygen (где компиляция в .NET и JVM) современный Паскаль демонстрирует практически уникальную кроссплатформенность, не достигнутую даже C/C++. Хотя типовому говнокодеру подобные моменты не нужны и непонятны.

Классический же Delphi, в текущем виде, весьма удобен для быстрого написания относительно несложных оконных приложений под Windows для массового тиража (вроде Skype или Total Commander, всего-то несколько десятков человеко-лет в сумме, ну вы поняли). В этой дисциплине он выигрывает у С++ в скорости написания, а у .NET — в простоте развертывания (КО как бы говорит нам, что хоть размер инсталлятара .NET 2.0 составляет всего лишь 23 Мб, но для инсталляции всех апдейтов, версий 3.5, 4.0 и вот уже 5.0 нам предлагается скачать и установить мегабайт так 600, одна только установка этого всего может занять час на машине клиента, да еще и в три этапа с перезагрузкой), ну и в защищенности кода от прямого реинжиниринга (получить исходный код любого скачанного поделия на .NET или Java из его байт кода посредством просто чудных программ вроде Spices.Net Decompiler, .NET Reflector, JAD decompiler, Mocha и прочие тысячи их — обычно проще пареной репы для любого школьника).

Правда, любой более-менее серьезный софт на .NET или Java защищают с помощью обфускаторов, и разобраться в такой каше не намного легче, чем в ассемблере, но кого это останавливало?

А вот низкоуровневое системное программирование на Pascal (драйверов каких-то там или ещё чего) — вообще полное исключение — там традиционно правит исключительно С (потому что никто DDK под Delphi даже не пробовал портировать в виду мизерности рынка — хотя слухи были).

Также следует отметить, что до недавних пор Pascal практически никак не использовался для разработки Web приложений, так как совершенно не был для этого приспособлен (как и для любого типа серверных приложений). Тру-Web-технологии (Java, ASP.NET, Django, Ruby on Rail и таки PHP) используют совершенно другие подходы (автоматическая сборка мусора, JIT компиляция, динамическая/нестрогая типизация), которые в итоге позволяют в срок написать поддерживаемое приложение не вызывая баттхерт у программистов, его пишущих. Тогда как типичное Delphi приложение — это незащищенный код (как и в С/С++), и типичный чумазый говнокодер, который попытается обратиться по ссылке к уже несуществующему объекту или выйти за границы массива, способен по-тихому разрушить всю память серверного приложения (тогда как в языках технологических платформах вроде Java/Spring/Grails, C#/ASP.NET, PHPJavaScript/Node.js, Python/Django Ruby/Rails данная типичная проблема решена на фундаментальном уровне, то есть запрещена изначально). Однако, свято место пусто не бывает и теперь его заняла Smart Mobile Studio.

Стоит заметить, что сабжевый компилятор есть и для микроконтроллеров. Поделие одной известной фошыстской конторы для PIC выдает вполне себе годный и вменяемого размера код, а расово сербские сербы запилили целую линейку компиляторов, начиная от баянных AVR и заканчивая моднявыми ARM и экзотикой типа dsPIC.

Отсюда непосредственно следуют выводы о популярности языка у работодателей и говнокодеров (на самом деле нет проблемы открыть или найти вакансию, проект, проблема скорее найти вменяемого разработчика, за соизмеримую зарплату, так что делайте выводы).

Тем не менее современная среда разработки - это не только язык программирования, но и огромный обвес из прикладных библиотек. К сожалению на данный момент не нашлось достаточного количества платных/бесплатных энтузиастов, которые смогли бы вывести инфраструктуру и синтаксис Delphi на современный уровень.

В целом отказ от Delphi произошел по двум объективным причинам. Во времена расцвета Dephi, когда программы ходили пешком под стол (т.е. прямо в базу, что называлось 2х уровневой архитектурой), он активно использовался в корпоративной среде. Но когда программисты смекнули, что не все компьютеры могут иметь Windows, а браузер таки имеют все, даже мобилы - получила распространение трехуровневая архитектура и сферу корпоративных приложений прочно заняла Java/J2EE. С другой стороны с появлением .NET при активной поддержке Microsoft Delphi был выброшен и с рынка десктопных приложений Windows. Неосведомленному читателю все еще может показаться, что все-таки язык жив, но это скорее стадия вялотекущей поддержки. Об этом красноречиво говорит тот простой факт, что в статистике GitHub по языкам программирования Delphi/Pascal в списке топ-50 просто нет.

См. также

Примечания

  1. Например, от ключика -Xg, или постановки галочки в настройках — «Использовать внешний отладочный файл» бинарник сразу раз в 7-8 похудеет
  2. в рашке это напоминает скорее распил
  3. Тут фишка в том, что обучение в США платное. На обучение чаще всего берут кредит. Так, как у добропорядочного американца еще должен быть кредит на дом, то там становится уже не до дополнительных трат. Впрочем это все уже не актуально, так как теперь Delphi дают для обучения бесплатно.