Введение

Язык программирования

Компилятор Turbo Pascal был основан на компиляторе Blue Label Pascal, первоначально разработанном для кассетной операционной системы NasSys микрокомпьютера Nascom в 1981 году Андерсом Хеджсбергом. Borland лицензировал ядро компилятора "PolyPascal" Хеджсберга (Poly Data было названием компании Хеджсберга в Дании) и добавил пользовательский интерфейс и редактор. Андерс Хельсберг присоединился к компании в качестве сотрудника и был архитектором всех версий компилятора Turbo Pascal и первых трех версий Borland Delphi. Компилятор был впервые выпущен как Compas Pascal для CP/M, а затем 20 ноября 1983 года – как Turbo Pascal для CP/M (включая компьютер Apple II при оснащении Z 80 SoftCard, что фактически превращало 6502-based Apple в машину CP/M, Commodore 64 с картриджем CP/M и более позднюю DEC Rainbow), CP/M 86 и DOS. На момент запуска на рынке США Turbo Pascal продавался по цене $link=yes, что было очень низкой ценой для компилятора в то время. Интегрированный компилятор Pascal отличался хорошим качеством по сравнению с другими Pascal-продуктами того времени. Название "Turbo" указывало на скорость компиляции и создаваемых исполняемых файлов. Цикл редактирования, компиляции и запуска был быстрым по сравнению с другими реализациями Pascal, поскольку все, что связано с созданием программы, хранилось в оперативной памяти, и компилятор был однопроходным, написанным на языке ассемблера. Компиляция выполнялась намного быстрее, чем в компиляторах для других языков (даже в собственных более поздних компиляторах Borland для C) и других компиляторах Pascal, а время программиста также экономилось, поскольку программу можно было компилировать и запускать непосредственно из IDE. Скорость выполнения этих программ формата COM стала откровением для разработчиков, чей предыдущий опыт программирования микрокомпьютеров ограничивался интерпретируемым BASIC или UCSD Pascal, который компилировался в p-код, а затем интерпретировался во время выполнения. В отличие от некоторых других инструментов разработки, диски Turbo Pascal не имели защиты от копирования. Turbo Pascal поставлялся с "Книжной лицензией": "Вы должны относиться к этому программному обеспечению как к книге – оно может использоваться любым количеством людей, его можно свободно перемещать с одного компьютера на другой, пока нет возможности использовать его одновременно в разных местах".

Прием

За два года компания Borland продала около 250 000 копий Turbo Pascal, что Брюс Ф. Уэбстер из Byte описал как "поразительный показатель для языка программирования". Через шесть месяцев он сообщил, что эта цифра выросла до "более 400 000 экземпляров на рынке, который оценивался всего в 30 000 потенциальных покупателей". Джерри Пурнелл написал в журнале в феврале 1984 года, что Turbo Pascal "максимально приближается к тому, куда, по моему мнению, движется компьютерная индустрия: хорошо документированный, стандартный, с множеством полезных функций и разумной ценой". Ему не нравилось требование приобретать дополнительную лицензию для распространения исполняемых файлов, но он отметил, что "на самом деле это ненамного дороже. Borland просит лишь немного больше базовой цены, и у меня сложилось первое впечатление, что Turbo, вероятно, стоит того. Кажется, он способен выполнять все, что MT+ с пакетом быстрого программирования, и, возможно, даже быстрее и лучше". В июле Пурнелл сообщил, что, по словам Кана, IBM отказалась перепродавать Turbo Pascal, если цена не будет составлять как минимум [указать цену]; он отметил, что "Turbo намного превосходит Pascal, который продает IBM", и, в отличие от него, был совместим с IBM PCjr. В том же выпуске три рецензента Byte высоко оценили Turbo Pascal. Один из рецензентов отметил, что из-за различий в диалектах "Turbo не является настоящим Pascal. Но он очень полезен". Предостерегая, что он не подходит для разработки очень больших приложений, он заключил, что Turbo Pascal "хорошо написан, иногда удобен в использовании и достаточно быстр, чтобы компенсировать его небольшие недостатки – это выгодное предложение, от которого не стоит отказываться". Второй назвал версию для DOS "без сомнения, лучшим соотношением цены и качества программного обеспечения, которое я когда-либо покупал", а третий сказал, что Borland "заслуживает похвалы за" "высокую ценность" версии для CP/M. В августе 1985 года Пурнелл назвал версию 3.0 "заметным улучшением по сравнению с уже впечатляющей версией 2" и сказал, что новая лицензия на книгу "кажется мне вполне справедливой". Он заявил, что "Turbo Pascal, вероятно, является лучшим языком на рынке сегодня", и что Borland лидирует в отрасли в "предложении отличных продуктов по разумным ценам". Несмотря на то, что журнал обнаружил "серьезную ошибку" в версии 3.0 и сниженную совместимость с клонами ПК, Byte в феврале 1986 года заявил, что "трудно не рекомендовать Turbo всем, кто хочет программировать на Pascal", ссылаясь на улучшенную скорость и графические процедуры. В декабре 1986 года, рассматривая четыре других компилятора Pascal, журнал описал Turbo Pascal как "практичный и привлекательный для программистов любого уровня". Помимо поддержки приложений размером более 64 КБ, Byte в 1988 году сообщил о значительно более быстрой компиляции и выполнении для версии 4.0, и о том, что, хотя она и не сохраняла "почти полную" обратную совместимость предыдущих версий, преобразование было быстрым и простым. Рецензент заключил: "Я настоятельно рекомендую Turbo Pascal 4.0 как дополнение к программному обеспечению любого программиста". В августе 1985 года Уэбстер похвалил язык, заявив, что Turbo Pascal "наиболее известен своим небольшим размером, невероятной скоростью компиляции и быстрым временем выполнения". Он отметил, что качество программного обеспечения и низкая цена были особенно удивительны после "провала JRT Pascal", и заявил, что даже по новой, более высокой цене версия 3.0 "вероятно, по-прежнему является лучшей сделкой на рынке". PC Magazine также положительно отозвался в ноябре 1984 года, заявив, что "ничего подобного Turbo Pascal раньше не существовало для PC DOS". Он похвалил низкую цену, скорость и необычно хорошую документацию для компилятора, а также отметил наличие множества утилит для Turbo Pascal от других компаний. В обзоре говорилось, что IDE, упрощающая цикл редактирования, компиляции, запуска и отладки, сделала Turbo Pascal доступным, как BASIC, для начинающих программистов. В 1989 году Byte включил Turbo C и Turbo Pascal в число победителей "Distinction" на Byte Awards. Ссылаясь на их пользовательский интерфейс и постоянный акцент на скорости, журнал заявил, что "для быстрого прототипирования мало что может быть лучше". В том же выпуске Пурнелл снова похвалил версии 4.0 и 5.0 Turbo Pascal. Ссылаясь на Анакреона как "хороший пример того, насколько сложной может быть программа, написанная на Pascal", и на множество библиотек от Borland и других разработчиков, он написал: "Я думаю, что это может быть язык для всех нас". Скотт Макгрегор из Microsoft сказал, что Билл Гейтс "не мог понять, почему наши продукты были такими медленными" по сравнению с Turbo Pascal. "Он приводил бедного Грега Уиттена [директора по программированию языков Microsoft] и час кричал на него", потому что их компании не удавалось победить небольшую компанию Кана, вспоминал Макгрегор.

Преемники

К 1995 году Borland прекратил поддержку Turbo/Borland Pascal и заменил его средой быстрой разработки приложений (RAD) Borland Delphi, основанной на Object Pascal. 32- и 64-разрядные версии Delphi по-прежнему поддерживают более переносимые расширения Pascal из предыдущих продуктов (то есть, не специфичные для 16-разрядного кода), включая более раннюю статическую объектную модель. Благодаря этой обратной совместимости языка, значительный объем старого кода Turbo Pascal до сих пор можно компилировать и запускать в современной среде. Другие разработчики создали инструменты разработки программного обеспечения, совместимые с Turbo Pascal. Наиболее известные из них – Free Pascal и Virtual Pascal.

Язык сборки

В то время как все версии Turbo Pascal позволяли включать в себя машинный код, начиная с версии 6 появилась возможность интегрировать язык ассемблера непосредственно в исходный код Pascal. Поддержка различных моделей памяти x86 обеспечивалась встроенным ассемблером, опциями компилятора и языковыми расширениями, такими как ключевое слово "absolute". Turbo Assembler (TASM), стандартный x86 ассемблер, независимый от TP и обеспечивающий совместимость исходного кода с широко используемым Microsoft Macro Assembler (MASM), поставлялся вместе с расширенными версиями "Borland Pascal".

Очистка от ошибок и профилирование

IDE предоставляла несколько средств отладки, включая пошаговое выполнение, просмотр и изменение переменных, а также условные точки останова. В более поздних версиях можно было пошагово выполнять блоки ассемблера. Пользователь мог добавлять точки останова для переменных и регистров в окне IDE. Программы, использующие графический режим IBM PC, могли автоматически или вручную переключаться между графическим и текстовым режимами, либо отображать оба режима на двух экранах. В случаях, когда относительно простых средств отладки IDE было недостаточно, компания Turbopower Software разработала более мощный отладчик – T Debug. Эта же компания выпустила Turbo Analyst и Overlay Manager для Turbo Pascal. T Debug позже был обновлен для Turbo Pascal 4, но его поддержка была прекращена с выпуском Borland Turbo Debugger (TD), который также позволял осуществлять некоторые аппаратные воздействия на компьютерах, оснащенных новым процессором 80386. TD обычно поставлялся вместе с Turbo Assembler и Turbo Profiler – профилировщиком кода, который предоставлял информацию о времени, затраченном на выполнение каждой части программы, помогая оптимизировать программу путем выявления узких мест. В книгах, поставляемых с Borland Pascal, содержалось подробное описание языка ассемблера Intel, включая количество тактов, необходимых для каждой инструкции. Разработка и отладка могли выполняться полностью в IDE, если не требовались расширенные средства отладки Turbopower T Debug, а позднее TD. Более поздние версии также поддерживали удаленную отладку через коммуникационный кабель RS 232.

Единицы

За эти годы Borland улучшил не только IDE, но и расширил язык программирования. Система разработки, основанная на стандарте ISO Pascal, требует специфических расширений для разработки реальных приложений на целевых платформах. Стандартный Pascal разработан с учетом платформенной независимости и поэтому не предусматривает низкоуровневый доступ к аппаратному обеспечению или операционным системам, зависящим от платформы. Стандартный Pascal также не определяет, как большая программа должна быть разделена на отдельные компиляционные модули. Начиная с версии 4, Turbo Pascal перенял концепцию модулей из UCSD Pascal. Модули использовались как внешние библиотеки функций, подобно объектным файлам, используемым в других языках, таких как FORTRAN или C. Например, строка `uses crt;` в программе включает модуль с именем `crt;`, а `uses` является механизмом для использования других компиляционных модулей. Ключевые слова `interface` и `implementation` использовались для указания внутри модуля того, что было (и что не было) видимо снаружи модуля. Это аналогично ключевым словам `public` и `private` в других языках, таких как C++ и Java. Модули в Pascal от Borland были схожи с системой раздельной компиляции Modula 2. В 1987 году, когда был выпущен Turbo Pascal 4, Modula 2 набирал популярность как учебный язык, способный заменить Pascal. Borland фактически имел компилятор Turbo Modula 2, но выпустил его только для CP/M (его пользовательский интерфейс был почти идентичен Turbo Pascal 1–3) с минимальным маркетингом. Была разработана значительно улучшенная версия для DOS, но поскольку Borland не желал публиковать результаты, авторы, включая Нильса Йенсена, выкупили права и основали Jensen & Partners International для публикации ее под названием JPI TopSpeed Modula 2. Вместо этого Borland решил реализовать раздельную компиляцию в своем существующем продукте Pascal. Раздельная компиляция не была частью стандартного языка Pascal, но уже была доступна в UCSD Pascal, который был очень популярен на 8-битных машинах. Синтаксис Turbo Pascal для модулей, по-видимому, был заимствован из UCSD Pascal. Ранние версии Turbo Pascal, предназначенные для компьютеров с ограниченными ресурсами, поддерживали систему динамической линковки для раздельно скомпилированных объектов, аналогичную системе, широко используемой в BASIC. Кроме того, в языке было предусмотрено включение отдельного исходного кода в программу при необходимости, а наложение поддерживалось начиная с TP3, но, как и в случае с наложениями, связанные объекты должны были помещаться в исходное (ограниченное) пространство памяти программы. С развитием вычислительных ресурсов и средств хранения в Turbo Pascal появилась возможность генерировать большие EXE-файлы со статической линковкой и коллективной загрузкой раздельно скомпилированных объектов. Файлы TPU, создаваемые при компиляции модуля Turbo Pascal, тесно связаны с внутренними структурами компилятора, а не со стандартными OBJ-файлами, пригодными для линковки. Это улучшило время компиляции и линковки, но означало, что файлы TPU нельзя было связать с выходными данными других языков или даже использовать с другими версиями Turbo Pascal без перекомпиляции из исходного кода.

Объектно-ориентированное программирование

С версии 5.5 были введены некоторые возможности объектно-ориентированного программирования: классы, наследование, конструкторы и деструкторы. Среда разработки (IDE) уже была дополнена интерфейсом объектного браузера, отображающим связи между объектами и методами и позволяющим программистам легко перемещаться по модулям. Borland назвала свой язык Object Pascal, который был значительно расширен и стал языком, лежащим в основе Delphi (в котором реализованы две отдельные системы ООП). Название "Object Pascal" появилось благодаря расширениям Pascal, разработанным компанией Apple Computer для программирования компьютеров Lisa и Macintosh. Создатель Pascal, Никлаус Вирт, консультировал при разработке этих расширений, которые основывались на типе записи, уже существующем в Pascal.

Проблема с CRT-аппаратом на быстрых процессорах

Несколько версий Turbo Pascal, включая последнюю версию 7, содержат модуль CRT, который широко использовался во многих полноэкранных текстовых приложениях на ЭЛТ-мониторах. Этот модуль содержит код в секции инициализации, предназначенный для определения скорости процессора и калибровки циклов задержки. Этот код не работает на процессорах со скоростью выше примерно 200 МГц и аварийно завершает работу с сообщением "Runtime Error 200". (Код ошибки 200 никак не связан со скоростью процессора в 200 МГц). Это происходит из-за того, что цикл подсчитывает количество итераций, которые он может выполнить за фиксированное время, измеренное по системным часам реального времени. Когда Turbo Pascal разрабатывался, он использовался на машинах с процессорами, работающими на частоте от 2,5 до 8 МГц, и возможность значительно более высоких скоростей не принималась во внимание. Поэтому, начиная примерно с 200 МГц, выполняется достаточно итераций, чтобы вызвать переполнение 16-битного счетчика. Был выпущен патч, когда машины стали слишком быстрыми для исходного метода, но он оказался неэффективным с дальнейшим увеличением скорости процессоров и был заменен другими. Программы, подверженные этой ошибке, можно перекомпилировать из исходного кода с использованием патченного компилятора, устраняющего эту ошибку (с использованием TURBO.TPL, скомпилированного с исправленным модулем CRT), или, если исходный код недоступен, исполняемые файлы можно пропатчить с помощью инструмента TPPATCH или его аналога, либо загрузив резидентную программу завершения перед запуском проблемной программы. Существуют также патчи для компилятора TP7, поэтому, если исходный код Pascal доступен, новый скомпилированный код будет работать без необходимости патчить скомпилированный файл. Если исходный код доступен, альтернативным решением является портирование в библиотеки, не зависящие от тактовой частоты процессора.

Арифметика с плавающей запятой

Существовало несколько типов чисел с плавающей точкой, включая одинарную точность (4-байтовое представление [IEEE 754]), двойную точность (8-байтовое представление IEEE 754), расширенную точность (10-байтовое представление IEEE 754, используемое преимущественно внутри цифровых сопроцессоров) и Real (6-байтовое представление). В первые годы Real был наиболее распространенным. Большинство персональных компьютеров того времени не имели сопроцессора для операций с плавающей точкой, поэтому вся арифметика с плавающей точкой выполнялась программно. Собственные алгоритмы Борланда для Real были быстрее, чем использование других типов, хотя его библиотека также эмулировала другие типы программным способом.

Версия 1

Версия 1, выпущенная 20 ноября 1983 года, представляла собой базовую систему «все в одном», работающую в памяти и генерирующую COM-файлы для DOS и CP/M, а также эквивалентные CMD-файлы для CP/M 86 (совершенно отличные от пакетных файлов CMD, которые позже использовались в 32-битных Microsoft Windows). Размер файлов исходного кода был ограничен 64 КБ для упрощения IDE, а размер DOS COM-файлов был ограничен 64 КБ для кода, стека и глобальных (статических) переменных. Исходный код программы можно было расширить с помощью механизма включения файлов, если он превышал лимит памяти редактора. Существовали различные версии Turbo Pascal для компьютеров, работающих под управлением DOS, CP/M или CP/M 86, с 64 КБ памяти и как минимум одним дисководом. Версия CP/M могла работать на множестве машин CP/M того времени с процессорами Z80 или на Apple II с картой Z80. Версии DOS и CP/M 86 работали на множестве машин 8086 и 8088, которые стали доступны, включая IBM PC. Установщик, листер, компилятор с его IDE и исходный код простой программы-электронной таблицы MicroCalc, написанной Филиппом Каном в качестве демонстрации, помещались на один дисковод. Копия диска без MicroCalc вмещала исходный код и скомпилированный исполняемый файл программы разумного размера — поскольку в то время у пользователей часто был только один дисковод в качестве основного носителя информации, было очень удобно размещать как компилятор, так и разрабатываемую программу на одном диске, избегая бесконечной смены дисков. Архитектура различных машин, работающих под управлением MS DOS, дополнительно ограничивала максимальный объем памяти, доступной пользователю, менее чем 1 МБ (например, машины, аппаратно совместимые с IBM PC, были ограничены 640 КБ). IDE Turbo Pascal была очень продвинутой для своего времени. Она могла эффективно работать и компилировать очень быстро, учитывая объем оперативной памяти на типичном домашнем компьютере. IDE была простой и интуитивно понятной в использовании и имела хорошо организованную систему меню. Ранние версии редактора использовали функциональные клавиши WordStar, которые в то время были де-факто стандартом. Более поздние версии IDE, предназначенные для ПК с большим объемом дискового пространства и памяти, могли отображать определения ключевых слов языка при наведении курсора на ключевое слово и нажатии клавиши F1 (традиционно используемой для отображения справки). Многие определения включали примеры кода. Помимо стандартных исполняемых программ, компилятор мог генерировать программы типа «terminate and stay resident» (TSR) — небольшие утилиты, которые оставались в памяти и позволяли компьютеру выполнять другие задачи. Borland выпустила небольшой пакет приложений под названием Sidekick, который был TSR и позволял пользователю вести дневник, делать заметки и т. д.

Версия 2

Версия 2, выпущенная спустя несколько месяцев 17 апреля 1984 года, являлась постепенным улучшением оригинального Turbo Pascal, настолько, что справочное руководство поначалу было идентично версии 1, вплоть до указания 1983 года в качестве даты авторского права в некоторых примерах вывода компилятора, однако имела отдельное руководство "Дополнение к справочному руководству: Версия 2.0 и дополнение 8087" с собственной нумерацией страниц. Дополнения включали систему накладок, при которой отдельные процедуры накладок автоматически подгружались с диска в зарезервированную область памяти. Эта память являлась частью 64 КБ оперативной памяти, используемой кодом программы, и автоматически занимала размер самой большой процедуры накладки.

Версия 3

Версия 3 была выпущена 17 сентября 1986 года. В дополнение к стандартным программным числам с плавающей точкой и 8087-й версии компилятора, Borland также предлагала версию с двоично-десятичным кодированием (BCD) – (TURBOBCD), которая обеспечивала тот же числовой диапазон, что и типы данных с плавающей точкой, но с точностью до 18 значащих цифр. Версия 4 была полностью переработана, существенно изменились как внешний вид, так и внутренняя работа. Компилятор генерировал исполняемые файлы в формате EXE под DOS, а не более простые, но ограниченные исполняемые файлы COM. Устаревшие к тому времени версии операционных систем CP/M и CP/M 86 были исключены при переписывании Turbo Pascal. Версия 4 представила модули и полноэкранный текстовый пользовательский интерфейс с выпадающими меню; в более ранних версиях использовался текстовый экран меню и отдельный полноэкранный редактор. (Microsoft Windows все еще находилась в стадии экспериментов на момент выпуска первой версии, и даже мыши были редкостью.) Для Turbo Pascal V4 был доступен дополнительный пакет – Turbo Pascal Graphix Toolbox.

Версия 5.0

Цветные дисплеи вытесняли монохромные; Turbo Pascal версии 5.0, выпущенная 24 августа 1988 года,

Версия 6.0

Версия 6 была выпущена 23 октября 1990 года.

Версия 7.0

Версия 7 была выпущена 27 октября 1992 года.

Turbo Pascal для Windows

Были выпущены две версии под названием "Turbo Pascal for Windows" (TPW) для Windows 3.x: TPW 1.0, основанная на Turbo Pascal 6, но выпущенная примерно на два года позже, и 1.5, выпущенная после Turbo Pascal 7; им на смену пришел Borland Pascal 7, который поддерживал Windows. Компилятор для Windows в Pascal 7 назывался Borland Pascal for Windows. Обе версии позволяли создавать программы, совместимые с Windows, и включали в себя IDE на базе Windows, в отличие от IDE на базе DOS в Turbo Pascal. Команды IDE и редактора соответствовали рекомендациям по пользовательскому интерфейсу Microsoft Windows, а не классическому интерфейсу Turbo Pascal. Для поддержки программ для Windows требовалась библиотека Object Windows Library (OWL), похожая, но не идентичная той, что использовалась в первой версии Borland C++, и радикально отличающаяся от более ранней среды DOS Turbo Vision. Turbo Pascal для платформы Windows была вытеснена Delphi; компилятор Delphi может создавать как консольные программы, так и приложения с графическим пользовательским интерфейсом (GUI), что сделало использование Turbo и Borland Pascal ненужным.

Turbo Pascal для Macintosh

Борланд выпустил Turbo Pascal для Macintosh в 1986 году. Подобно версиям 1–3 для других операционных систем, он был написан на компактном ассемблере и обладал очень мощной интегрированной средой разработки, но не имел качественного отладчика. Borland не уделял этому продукту должной поддержки, хотя и выпустил версию 1.1 с исправлениями для работы на 32-битном Macintosh II. Поддержка Macintosh была прекращена вскоре после этого.

Свободные версии

Borland выпустила несколько версий Turbo Pascal как бесплатное программное обеспечение после того, как они устарели, включая версии 1.0 для DOS (1 февраля 2000 года), 3.02 (10 февраля 2000 года), 5.5 (21 февраля 2002 года) и Turbo Pascal 7.01 на французском языке (в 2000 году). Большинство загрузок по-прежнему доступны на сайте правопреемника Embarcadero Technologies.