Парадигмы | Императивный, структурированный, объект- ориентированный, функциональный (только диалект Delphi), компонентный, управляемый событиями, общий |
---|---|
Семейство | Wirth Паскаль |
Разработан | Первоначально Apple Computer с участием Никлауса Вирта, а затем Borland International во главе с Андерсом Хейлсбергом |
Впервые появился | 1986; 34 года назад (1986) |
Дисциплина набора текста | Статическая и динамическая (динамическая типизация с использованием вариантов, массив констант и RTTI ), strong, безопасный |
Платформа | ARM, x86, PowerPC, ppc64, SPARC, MIPS, CLI, Java, Cocoa |
Расширения имени файла | .p , .pp , .pas |
Major реализации | |
Delphi (x86, ARM ), Free Pascal (x86, PowerPC, ppc64, SPARC, MIPS, ARM ), Oxygene (CLI, Java, Native Cocoa ), Smart Mobile Studio (JavaScript ) | |
Dialects | |
Apple, Turbo Pascal, Free Pascal (с использованием режима objfpc или delphi ), Delphi, Delphi.NET, Delphi Web Script, Oxygene | |
Под влиянием | |
Pascal, Simula, Smalltalk | |
Influenced | |
C#, Genie, Java, Nim, C / AL |
Object Pasc al - это расширение языка программирования Pascal, которое предоставляет функции объектно-ориентированного программирования (ООП), такие как классы и методы.
Этот язык был первоначально разработан Apple Computer как Clascal для системы разработки Lisa Workshop. Когда Лиза уступила место Macintosh, Apple в сотрудничестве с Никлаусом Виртом, автором Паскаля, разработала официально стандартизированную версию Clascal. Он был переименован в Object Pascal. До середины 1980-х Object Pascal был основным языком программирования для ранних версий MacApp framework для приложений. Этот язык потерял свое место в качестве основного языка разработки на Mac в 1991 году с выпуском MacApp 3.0 на основе C ++. Официальная поддержка закончилась в 1996 году.
Symantec также разработала компилятор для Object Pascal для своего продукта THINK Pascal, который может компилировать программы намного быстрее, чем собственный Macintosh Programmer's Workshop от Apple. (MPW). Затем Symantec разработала библиотеку классов THINK (TCL) на основе концепций MacApp, которую можно было вызывать как из Object Pascal, так и из THINK C. Пакет THINK в значительной степени вытеснил MPW в качестве основной платформы разработки для Mac в конце 1980-х годов.
Symantec перенесла Object Pascal на ПК и разработала аналогичную объектную среду на этой платформе. В отличие от TCL, который со временем перешел на C ++, библиотеки ПК остались в основном основанными на Паскале.
Borland добавил поддержку объектно-ориентированного программирования в Turbo Pascal 5.5, который в конечном итоге стал основой для диалекта Object Pascal, используемого в Delphi. Delphi оставался основным продуктом для бизнес-приложений на ПК в начале 2000-х, и был частично вытеснен в 2000-х с появлением .NET Framework.
Паскаль стал основным языком программирования в 1970-х годах с высококачественными реализациями на большинстве мини-компьютеров платформ и микрокомпьютеров. Среди последних была система UCSD Pascal, которая была скомпилирована в промежуточный формат кода p-System, который затем мог работать на нескольких платформах. Apple лицензировала UCSD и использовала его в качестве основы для своей системы Apple Pascal для Apple II и Apple III.
Pascal стал одним из основных языков в компании в этот период. С началом проекта Apple Lisa в качестве основного языка программирования платформы был выбран Паскаль, хотя на этот раз в качестве компилятора в отличие от интерпретатора p-System.
Object Pascal - это расширение языка Pascal, которое было разработано в Apple Computer командой под руководством Ларри Теслера при консультации с Никлаус Вирт, изобретатель Паскаля. Он происходит от более ранней объектно-ориентированной версии Паскаля с именем Clascal, которая была доступна на компьютере Lisa.
Object Pascal был необходим для поддержки MacApp, расширяемой среды приложений Macintosh, которая теперь будет называться библиотекой классов. Расширения Object Pascal и MacApp были разработаны Барри Хейнсом, Кеном Дойлом и Ларри Розенштейном и протестированы Дэном Алленом. Ларри Теслер курировал этот проект, который начался очень рано в 1985 году и стал продуктом в 1986 году.
В Think Pascal IDE было реализовано расширение Object Pascal. IDE включает компилятор и редактор с подсветкой и проверкой синтаксиса, мощным отладчиком и библиотекой классов. Многие разработчики предпочли Think Pascal реализации Object Pascal от Apple, потому что Think Pascal предлагал гораздо более быстрый цикл компиляции - link - отладки и тесную интеграцию своих инструментов. Последним официальным выпуском Think Pascal был 4.01 в 1992 году. Symantec позже бесплатно выпустила неофициальную версию 4.5d4.
Apple отказалась от поддержки Object Pascal, когда они перешли с микросхем Motorola серии 68000 на архитектуру IBM PowerPC в 1994 году. MacApp 3.0 для этой платформы был переписан на C ++.
В 1986 году Borland представила аналогичные расширения, также называемые Object Pascal, для Turbo Pascal продукт для Macintosh, а в 1989 году для Turbo Pascal 5.5 для DOS. Когда Borland переориентировался с DOS на Windows в 1994 году, они создали преемника Turbo Pascal, названного Delphi, и представили новый набор расширений для создания того, что теперь известный как язык Delphi.
Разработка Delphi началась в 1993 году, и 14 февраля 1995 года в США был официально выпущен Delphi 1.0. Хотя код, использующий объектную модель Turbo Pascal, все еще можно было скомпилировать, Delphi представил новый синтаксис с использованием ключевого слова класс
вместо объекта
, конструктора Create и виртуального деструктора Destroy (и отмены необходимости вызывать процедуры New
и Dispose
), свойства, указатели на методы и многое другое. Они были вдохновлены ISO рабочим черновиком для объектно-ориентированных расширений, но многие из отличий от диалекта Turbo Pascal (например, требование чернового варианта, чтобы все методы были виртуальными ) были проигнорированы.
Язык Delphi продолжал развиваться на протяжении многих лет для поддержки таких конструкций, как динамические массивы, обобщенные типы и анонимные методы. Старый синтаксис объектов, представленный Apple («Типы объектов в старом стиле»), все еще поддерживается.
asm
, которые представляют собой простой JavaScript, но имеют доступ к символам Pascal, или внешним классам, которые отображаются непосредственно на прототипы. Классы JavaScript. Smart Pascal представляет истинное наследование, классы, частичные классы, интерфейсы, таблицу виртуальных методов и многие другие расширенные конструкции, которые по умолчанию не являются частью JavaScript.Object Pascal компиляторы доступны для широкого диапазона операционных систем и архитектуры.
Pascal Script (ранее InnerFuse) и DWScript (Delphi Web Script) - это интерпретаторы Object Pascal с открытым исходным кодом и механизмы сценариев, написанные на Delphi. Они поддерживают подмножества Object Pascal. DWScript также может компилировать код Object Pascal в код JavaScript (Smart Pascal) и поддерживает своевременную компиляцию (JIT). Modern Pascal предоставляет 3 разных интерпретатора: интерфейс командной строки (CLI), модуль Apache (Celerity) и CodeRunner (решение типа node.js, способное обрабатывать разные сценарии для каждого порта), помимо возможности компилировать и защищать исходный код сценария.
программа ObjectPascalExample; тип THelloWorld = объект процедуры Put; конец; var HelloWorld: THelloWorld; процедура THelloWorld.Put; begin ShowMessage ('Привет, мир!'); конец; begin New (HelloWorld); HelloWorld.Put; Удалить (HelloWorld); конец.
По-прежнему поддерживается в Delphi и Free Pascal. FPC также упаковывает собственные заменители библиотек / модулей. Delphi этого не делает. Серия Free Pascal 1.0 и IDE текстового режима FPC являются крупнейшими открытыми базами кода на этом диалекте. Free Pascal 2.0 был переписан на диалекте, более похожем на Delphi, а IDE текстового режима и связанные с ним фреймворки (Free Vision) - единственные части TP-версии Object Pascal.
программа ObjectPascalExample; тип THelloWorld = объект процедуры Put; конец; процедура THelloWorld.Put; begin WriteLn ('Привет, мир!'); конец; var HelloWorld: THelloWorld; {размещается в стеке и может использоваться без явного выделения. } begin HelloWorld.Put; конец.
программа ObjectPascalExample; введите PHelloWorld = ^ THelloWorld; THelloWorld = объект процедуры Put; конец; процедура THelloWorld.Put; begin WriteLn ('Привет, мир!'); конец; var HelloWorld: PHelloWorld; {это типизированный указатель на THelloWorld} begin New (HelloWorld); HelloWorld ^.Put; Dispose (HelloWorld); конец.
Другой пример:
программа ObjectPascalExample; введите PHelloWorld = ^ THelloWorld; THelloWorld = объект процедуры Put; конец; процедура THelloWorld.Put; begin WriteLn ('Привет, мир!'); конец; var HelloWorld: PHelloWorld; {это типизированный указатель на THelloWorld} HelloWorld2: ^ THelloWorld; {точно так же, но с другим синтаксисом} HelloWorld3: ^ THelloWorld; HelloWorld4: PHelloWorld; begin {Это работает аналогично приведенному выше коду, обратите внимание на выделение и отмену выделения, хотя многие люди путаются. Раньше здесь был неправильный пример с неправильными комментариями...} New (HelloWorld); {один экземпляр} HelloWorld4: = HelloWorld; {это действительно - копия указателя} HelloWorld2: = HelloWorld; {это действительно - копия указателя} New (HelloWorld3); {второй экземпляр} HelloWorld4: = HelloWorld3; {это действительно - копия указателя} HelloWorld2: = HelloWorld3; {это действительно - копия указателя} Dispose (HelloWorld); {мы выделили всего два экземпляра} Dispose (HelloWorld3); {так что мы должны выпустить только два экземпляра} конец.
Это работает на основе копии указателя, если нет специального выделения для более глубокой копии.
программа ObjectPascalExample; тип THelloWorld = class procedure Put; конец; процедура THelloWorld.Put; begin Writeln ('Привет, мир!'); конец; var HelloWorld: THelloWorld; {это неявный указатель} begin HelloWorld: = THelloWorld.Create; {конструктор возвращает указатель на объект типа THelloWorld} HelloWorld.Put; HelloWorld.Free; {эта строка освобождает объект THelloWorld, на который указывает HelloWorld} end.
Обратите внимание, что конструкция объекта все еще доступна в Delphi и Free Pascal.
программа ObjectPascalExample; type THelloWorld = class Put: процедура объекта; конец; процедура THelloWorld.Put; begin Writeln ('Привет, мир!'); конец; процедура THelloWorld.Free; begin // удаляем любые указатели // end; процедура THelloWorld.Init; begin // инициализация переменных // методы связывания (ручное RTTI) с помощью Self do begin TMethod (@Put): = [@ THelloWorld.Put, @Self]; TMethod (@Free): = [@ THelloWorld.Free, @Self]; Конец; конец; var HelloWorld: THelloWorld; {это неявный указатель} begin HelloWorld.Init; {самоинициализация (указатель на объект) типа THelloWorld} HelloWorld.Put; HelloWorld.Free; {эта строка освобождает объект THelloWorld, на который указывает HelloWorld} end.
пространство имен ObjectPascalExample; тип интерфейса ConsoleApp = метод класса класса Main; конец; THelloWorld = метод класса Put; конец; метод реализации THelloWorld.Put; begin Console.WriteLine ('Привет, мир!'); конец; метод класса ConsoleApp.Main; begin var HelloWorld: = новый THelloWorld; HelloWorld.Put; конец; конец.
тип THelloWorld = class procedure Put; begin PrintLn ('Привет, мир!'); конец конец; var HelloWorld: = THelloWorld.Create; HelloWorld.Put;
Реализация метода также может быть выполнена в другом месте, как в других диалектах Object Pascal.
Многие функции постоянно добавляются в Object Pascal с расширениями Delphi и FreePascal. В ответ на критику Free Pascal принял универсальные шаблоны с тем же синтаксисом, что и Delphi, при условии, что выбран режим совместимости с Delphi, и как Delphi (частичный), так и Free Pascal (более расширенный) поддерживают перегрузку оператора . Начиная с версии 7, в Delphi появилось много других функций, включая универсальные. В то время как FreePascal пытается быть совместимым с Delphi в режиме совместимости с Delphi, он также обычно вводит в язык много новых функций, которые не всегда доступны в Delphi.