Obiekt Pascal - Object Pascal
Object Pascal jest rozszerzeniem języka programowania Pascal, które udostępnia funkcje programowania obiektowego (OOP), takie jak klasy i metody .
Język został pierwotnie opracowany przez Apple Computer jako Clascal dla systemu programistycznego Lisa Workshop. Gdy Lisa ustąpiła miejsca Macintoshowi , Apple współpracował z Niklausem Wirthem , autorem Pascala, aby opracować oficjalnie ustandaryzowaną wersję Clascala. Zostało to przemianowane na Object Pascal. W połowie lat 80. Object Pascal był głównym językiem programowania dla wczesnych wersji frameworka aplikacji MacApp . Język stracił swoje miejsce jako główny język programowania na Macu w 1991 roku wraz z wydaniem opartego na C++ MacApp 3.0. Oficjalne wsparcie zakończyło się w 1996 roku.
Firma Symantec opracowała również kompilator dla Object Pascal dla swojego produktu Think Pascal, który może kompilować programy znacznie szybciej niż własne warsztaty programistów Macintosh (MPW). Następnie firma Symantec opracowała bibliotekę Think Class Library (TCL), opartą na koncepcjach MacApp, którą można wywoływać zarówno z Object Pascal, jak i THINK C . Pakiet Think w dużej mierze wyparł MPW jako główna platforma programistyczna na Macu pod koniec lat 80. XX wieku.
Firma Symantec przeniosła Object Pascal na komputer i opracowała podobną strukturę obiektową na tej platformie. W przeciwieństwie do TCL, który ostatecznie przeniósł się do C++, biblioteki PC pozostały głównie oparte na Pascalu.
Borland dodał obsługę programowania obiektowego do Turbo Pascal 5.5, które ostatecznie stało się podstawą dialektu Object Pascal używanego w Delphi . Delphi pozostała głównym nurtem aplikacji biznesowych na PC do początku XXI wieku i została częściowo wyparta w 2000 roku wraz z wprowadzeniem .NET Framework .
Historia
Jabłko Pascal
Pascal stał się głównym językiem w świecie programowania w latach 70., z wysokiej jakości implementacjami na większości platform minikomputerów i mikrokomputerów . Wśród tych ostatnich znalazł się system UCSD Pascal , który został skompilowany do pośredniego formatu kodu p-System , który można następnie uruchomić na wielu platformach. Apple licencjonowało UCSD i używało go jako podstawy dla swojego systemu Apple Pascal dla Apple II i Apple III .
Pascal stał się jednym z głównych języków w firmie w tym okresie. Wraz z rozpoczęciem projektu Apple Lisa , Pascal został wybrany jako główny język programowania platformy, choć tym razem jako kompilator w przeciwieństwie do interpretera p-System .
Wczesny Object Pascal firmy Clascal i Apple
Object Pascal to rozszerzenie języka Pascal, które zostało opracowane w Apple Computer przez zespół kierowany przez Larry'ego Teslera w porozumieniu z Niklausem Wirthem , wynalazcą Pascala. Wywodzi się z wcześniejszej, obiektowej wersji Pascala o nazwie Clascal , która była dostępna na komputerze Lisa .
Object Pascal był potrzebny do obsługi MacApp , rozszerzalnego frameworka aplikacji dla komputerów Macintosh, który byłby teraz nazywany biblioteką klas . Rozszerzenia Object Pascal i MacApp zostały opracowane przez Barry'ego Haynesa, Kena Doyle'a i Larry'ego Rosensteina i przetestowane przez Dana Allena. Larry Tesler nadzorował projekt, który rozpoczął się bardzo wcześnie w 1985 roku i stał się produktem w 1986 roku.
Rozszerzenie Object Pascal zostało również zaimplementowane w zintegrowanym środowisku programistycznym Think Pascal (IDE). IDE zawiera kompilator i edytor z podświetlaniem i sprawdzaniem składni , potężny debugger i bibliotekę klas. Wielu programistów wolało Think Pascal od implementacji Object Pascal przez Apple, ponieważ Think Pascal oferował znacznie szybszy cykl kompilacji, linkowania i debugowania oraz ścisłą integrację swoich narzędzi. Ostatnia oficjalna wersja Think Pascal to 4.01 w 1992 roku. Później Symantec wydał nieoficjalną wersję 4.5d4 bez żadnych opłat.
Apple zrezygnowało ze wsparcia dla Object Pascal, gdy w 1994 roku przeszło z układów Motorola serii 68000 na architekturę IBM PowerPC . MacApp 3.0 został już przepisany w C++ i przeniesiony na tę platformę.
Metrowerks oferował z CodeWarrior kompilator Object Pascal dla Macintosh, który był przeznaczony zarówno dla 68k, jak i PowerPC , zarówno w ich IDE, jak i jako narzędzia MPW. Deweloperzy Macintoshy używający Object Pascal mieli możliwość przeniesienia na PowerPC , nawet architekturę po tym, jak Apple i Symantec zrezygnowali ze wsparcia. MacApp 2.0, napisany w Object Pascal, został przeniesiony na PowerPC za pomocą CodeWarrior .
Lata Borland, Inprise, CodeGear i Embarcadero
W 1986 roku Borland wprowadził podobne rozszerzenia, również nazwane Object Pascal, do produktu Turbo Pascal dla komputerów Macintosh, aw 1989 roku dla Turbo Pascal 5.5 dla DOS. Kiedy Borland przestawił się z DOS na Windows w 1994 roku, stworzyli następcę Turbo Pascala o nazwie Delphi i wprowadzili nowy zestaw rozszerzeń, aby stworzyć coś, co jest obecnie znane jako język Delphi.
Rozwój Delphi rozpoczął się w 1993 roku, a Delphi 1.0 został oficjalnie wydany w Stanach Zjednoczonych 14 lutego 1995 roku. Podczas gdy kod używający modelu obiektowego Turbo Pascal wciąż mógł być kompilowany, Delphi zawiera nową składnię używającą słowa kluczowego class
zamiast object
, konstruktor Create oraz wirtualny destruktor Destroy (i negowanie konieczności wywoływania procedur New
i Dispose
), właściwości, wskaźniki metod i kilka innych rzeczy. Zostały one zainspirowane projektem roboczym ISO dla rozszerzeń obiektowych, ale wiele różnic w stosunku do dialektu Turbo Pascala (takich jak wymaganie w projekcie, aby wszystkie metody były wirtualne ) zostały zignorowane.
Język Delphi ewoluował przez lata, aby wspierać konstrukcje takie jak tablice dynamiczne , generyki i metody anonimowe . Stara składnia obiektów wprowadzona przez firmę Apple („Typy obiektów w starym stylu”) jest nadal obsługiwana.
Wersje
- Borland używał nazwy Object Pascal dla języka programowania w pierwszych wersjach, ale później zmienił nazwę na Delphi . Kompilatory, które twierdzą, że są kompatybilne z Object Pascal, często próbują być kompatybilne z kodem źródłowym Delphi . Ponieważ Delphi jest znakiem towarowym , kompatybilne kompilatory nadal używają nazwy Object Pascal .
- Embarcadero Technologies , które zakupione Delphi w 2008 roku, sprzedaje Delphi zintegrowane środowisko programistyczne (IDE), który kompiluje dialektem Delphi Pascal obiektu do systemu Windows i MacOS , iOS , Android i Web.
- Obsługa .NET istniała od Delphi 8 do Delphi 2005, 2006 i 2007, która została teraz zastąpiona innym językiem, Oxygene (patrz poniżej), który nie jest w pełni kompatybilny wstecz.
- Oxygene język opracowany przez RemObjects Software celuje w Common Language Infrastructure The Java (platforma) Runtime Environment i jabłko „s kakao ram dla iOS i MacOS .
- Projekt Open Source Free Pascal umożliwia kompilację języka dla szerokiej gamy systemów operacyjnych , w tym Linux ( 32-bit , 64-bit ), FreeBSD , Classic Mac OS , macOS , Solaris , Windows API (32, 64, CE ), architekturę zestawu instrukcji ARM (ISA) i kilka innych architektur sprzętowych. Pierwsza wersja Free Pascal dla zestawu do tworzenia oprogramowania dla iPhone'a (SDK) 2.x została ogłoszona 17 stycznia 2009 roku.
- Język Smart Pascal jest skierowany do ECMAScript – JavaScript i jest używany w Smart Mobile Studio, napisanym przez Jona Lennarta Aasenden i opublikowanym przez Optimale Systemer (2012). Język znacznie upraszcza tworzenie HTML5 dzięki metodom zorientowanym obiektowo i szybkim tworzeniu aplikacji (RAD). Smart Pascal ściśle integruje się z uznanymi technologiami, takimi jak node.js , Embarcadero DataSnap i Remobjects SDK, aby tworzyć wysokowydajne aplikacje internetowe w modelu klient-serwer . Język umożliwia łatwe tworzenie komponentów wizualnych i bibliotek wielokrotnego użytku. Dialekt Smart Pascal wywodzi się z języka DWScript, rozszerzonego w celu lepszej integracji ze środowiskiem i bibliotekami JavaScript, takimi jak
asm
sekcje, które są zwykłym JavaScriptem, ale mają dostęp do symboli Pascal, lub klasy zewnętrzne , które mapują bezpośrednio do prototypowych klas JavaScript. Smart Pascal wprowadza prawdziwe dziedziczenie, klasy, klasy częściowe, interfejsy, wirtualną tabelę metod i wiele innych zaawansowanych konstrukcji, które domyślnie nie są częścią JavaScript. - MIDletPascal działa na platformie kodu bajtowego maszyny wirtualnej Java (JVM) ; który Free Pascal jest również celem, z dużo większą liczbą funkcji.
- Język Morfik Pascal, opracowany przez firmę Morfik, jest przeznaczony dla aplikacji internetowych obsługujących technologię Ajax . Kompilator jest wbudowany w IDE AppsBuilder firmy i umożliwia wykorzystanie kodu Object Pascal do implementacji kodu do wykonania w przeglądarce lub serwerze. Używa kompilatora Free Pascal do generowania natywnych plików binarnych z Object Pascal.
- Kompilator GNU Pascal o otwartym kodzie źródłowym jest dostępny jako nakładka na GNU Compiler Collection , która implementuje standard Międzynarodowej Organizacji Normalizacyjnej (ISO) 7185 Pascal i większość rozszerzonego standardu Pascal ISO 10206.
- Turbo51 to darmowy kompilator do programowania układów Intel 8051 .
- WDSibyl jest IDE i kompilatorem typu open source, podobnym do Delphi, dostępnym dla Microsoft Windows i OS/2. Jest to komercyjne środowisko kompatybilne z Turbo Pascal, wydane przez firmę Speedsoft, które zostało później rozwinięte w środowisko RAD podobne do Delphi o nazwie Sybil, a następnie open source na licencji GPL po zamknięciu tej firmy. Wolfgang Draxler (WD) zajmuje się teraz oprogramowaniem. Wygląda na to, że używany kompilator znajduje się w bibliotece DLL i nie jest oprogramowaniem typu open source.
Kompilatory
Kompilatory Object Pascal są dostępne dla szerokiej gamy systemów operacyjnych i architektur.
- Delphi jest prawdopodobnie najbardziej znanym kompilatorem. Jest następcą bardzo udanej linii produktów Borland Pascal i Turbo Pascal . Jest przeznaczony dla systemów Windows 9x , rodziny Windows NT , .NET Framework (Delphi 8, 2005, 2007), macOS (Delphi XE2 i nowsze), iOS (Delphi XE2 i nowsze, generujące natywne pliki binarne w XE4 i nowszych), Android (Delphi XE5 i później, generowanie natywnych plików binarnych w XE5 i nowszych). Wsparcie dla .NET w końcu stało się oddzielnym produktem znanym jako Oxygene (patrz niżej).
- Free Pascal Compiler (FPC) to otwarty kompilator Object Pascal, który obsługuje wiele dialektów Pascala, w tym Turbo Pascal 7, Delphi i inne. Obecnie FPC może generować kod dla procesorów IA-32 , x86-64 , PowerPC , SPARC i ARM oraz dla kilku systemów operacyjnych, w tym Microsoft Windows , Linux , FreeBSD , Classic Mac OS i macOS (z zestawem integracyjnym Xcode ) . Istnieje kilka oddzielnych projektów ułatwiających szybkie tworzenie aplikacji za pomocą FPC, z których najbardziej znanym jest Lazarus (IDE) .
- GNU Pascal (oddzielnie dystrybuowana część GNU Compiler Collection ), chociaż formalnie nie jest przeznaczony do dialektu Delphi w Pascalu, zawiera tryb zgodności Turbo Pascal i bardzo powoli włącza kilka funkcji języka Delphi. Nie nadaje się do bezpośredniej rekompilacji dużych ciał kodu Delphi, ale wyróżnia się obfitym wsparciem dla systemów operacyjnych i architektur sprzętowych.
- Oxygene (dawniej Chrome ) to kompilator Object Pascal firmy RemObjects Software, który integruje się z Microsoft Visual Studio . Jest również dostępny jako darmowy kompilator interfejsu wiersza poleceń, który działa natywnie w CLI . To trzy kompilatory w jednym, z których każdy jest przeznaczony dla innej platformy: Echoes dla .NET Framework , Mono , WinRT i Windows Phone 8 , Cooper dla JDK i Androida oraz Nougat dla iOS i macOS .
- MIDletPascal to narzędzie do tworzenia aplikacji mobilnych, które generuje kod bajtowy Java ME .
- PocketStudio jest opartym na Pascalu zintegrowanym środowiskiem programistycznym (IDE) dla Palm OS .
- Smart Mobile Studio to kompilator typu source-to-source, który przekształca kod źródłowy Pascala na JavaScript
- Ultibo.org Core jest oparty na Free Pascal, z rozwojem w Lazarus IDE dla wbudowanych aplikacji Raspberry Pi .
Starsze produkty
- Borland Kylix był linuksowym wariantem Delphi, który jest przeznaczony tylko dla 32-bitowego systemu Intel z wykorzystaniem biblioteki Qt . Nie działa po wyjęciu z pudełka z większością nowoczesnych dystrybucji Linuksa.
- Virtual Pascal był darmowym 32-bitowym kompilatorem Turbo Pascal i Delphi, przeznaczonym głównie dla systemów OS/2 i Microsoft Windows. Później otrzymał także DOS+ Extender i eksperymentalny cross-kompilator Linuksa. Rozwój kompilatora zatrzymał się mniej więcej na poziomie Delphi 2. W 2007 roku jego oficjalna strona internetowa przestała działać, a dalszy rozwój ustał.
Tłumacze ustni
Pascal Script (dawniej InnerFuse ) i DWScript (Delphi Web Script) to open-source'owe interpretery Object Pascal i silniki skryptowe napisane w Delphi. Obsługują podzbiory Object Pascal. DWScript może również kompilować kod Object Pascal do kodu JavaScript (Smart Pascal) i obsługuje kompilację just -in-time (JIT). Modern Pascal zapewnia 3 różne interpretery: interfejs wiersza poleceń (CLI), moduł Apache (Celerity) i CodeRunner (rozwiązanie podobne do node.js zdolne do obsługi różnych skryptów na port), oprócz możliwości kompilacji i ochrony kodu źródłowego skryptu .
Przykładowe programy „Hello World”
Oto kilka programów "Hello World" w różnych wersjach Object Pascal.
Wersja Apple
program ObjectPascalExample;
type
THelloWorld = object
procedure Put;
end;
var
HelloWorld: THelloWorld;
procedure THelloWorld.Put;
begin
ShowMessage('Hello, World!');
end;
begin
New(HelloWorld);
HelloWorld.Put;
Dispose(HelloWorld);
end.
Wersja Turbo Pascal
Wciąż obsługiwany w Delphi i Free Pascal. FPC również pakuje własne substytuty bibliotek/jednostek. Delphi nie. Seria Free Pascal 1.0 i IDE trybu tekstowego FPC są największymi otwartymi bazami kodu w tym dialekcie. Free Pascal 2.0 został przepisany w dialekcie bardziej podobnym do Delphi, a IDE trybu tekstowego i powiązane frameworki (Free Vision) są jedynymi częściami Object Pascal w wersji TP.
Alokacja na podstawie stosu
program ObjectPascalExample;
type
THelloWorld = object
procedure Put;
end;
procedure THelloWorld.Put;
begin
WriteLn('Hello, World!');
end;
var
HelloWorld: THelloWorld; { allocated on the stack and can be used without explicit allocation. }
begin
HelloWorld.Put;
end.
Alokacja na stercie
program ObjectPascalExample;
type
PHelloWorld = ^THelloWorld;
THelloWorld = object
procedure Put;
end;
procedure THelloWorld.Put;
begin
WriteLn('Hello, World!');
end;
var
HelloWorld: PHelloWorld; { this is a typed pointer to a THelloWorld }
begin
New(HelloWorld);
HelloWorld^.Put;
Dispose(HelloWorld);
end.
Inny przykład:
program ObjectPascalExample;
type
PHelloWorld = ^THelloWorld;
THelloWorld = object
procedure Put;
end;
procedure THelloWorld.Put;
begin
WriteLn('Hello, World!');
end;
var
HelloWorld: PHelloWorld; { this is a typed pointer to a THelloWorld }
HelloWorld2: ^THelloWorld; { this is exactly the same with different syntax }
HelloWorld3: ^THelloWorld;
HelloWorld4: PHelloWorld;
begin
{ This works in a similar way as the code above, note the allocation and de-allocation, though,
many people get confused. In the past there was a wrong example with wrong comments here... }
New(HelloWorld); { one instance }
HelloWorld4 := HelloWorld; { this is valid - a pointer copy }
HelloWorld2 := HelloWorld; { this is valid - a pointer copy }
New(HelloWorld3); { a second instance }
HelloWorld4 := HelloWorld3; { this is valid - a pointer copy }
HelloWorld2 := HelloWorld3; { this is valid - a pointer copy }
Dispose(HelloWorld); { it allocates only two instances }
Dispose(HelloWorld3); { so it must release only two instances }
end.
Działa to w oparciu o kopię wskaźnika, chyba że istnieje określony przydział dla głębszej kopii.
Wersja Delphi i Free Pascal
program ObjectPascalExample;
type
THelloWorld = class
procedure Put;
end;
procedure THelloWorld.Put;
begin
Writeln('Hello, World!');
end;
var
HelloWorld: THelloWorld; { this is an implicit pointer }
begin
HelloWorld := THelloWorld.Create; { constructor returns a pointer to an object of type THelloWorld }
HelloWorld.Put;
HelloWorld.Free; { this line deallocates the THelloWorld object pointed to by HelloWorld }
end.
Zauważ, że konstrukcja obiektu jest nadal dostępna w Delphi i Free Pascal.
Nowoczesna wersja Pascal
program ObjectPascalExample;
type
THelloWorld = class
Put:procedure of object;
end;
procedure THelloWorld.Put;
begin
Writeln('Hello, World!');
end;
procedure THelloWorld.Free;
begin
// dispose any pointers //
end;
procedure THelloWorld.Init;
begin
// initialize variables
// link methods (manual RTTI)
with Self do begin
TMethod(@Put):=[@THelloWorld.Put, @Self];
TMethod(@Free):=[@THelloWorld.Free, @Self];
End;
end;
var
HelloWorld: THelloWorld; { this is an implicit pointer }
begin
HelloWorld.Init; { self initialization (pointer to an object) of type THelloWorld }
HelloWorld.Put;
HelloWorld.Free; { this line deallocates the THelloWorld object pointed to by HelloWorld }
end.
Wersja tlenowa
namespace ObjectPascalExample;
interface
type
ConsoleApp = class
class method Main;
end;
THelloWorld = class
method Put;
end;
implementation
method THelloWorld.Put;
begin
Console.WriteLine('Hello, World!');
end;
class method ConsoleApp.Main;
begin
var HelloWorld := new THelloWorld;
HelloWorld.Put;
end;
end.
Wersja DWScript (Smart Pascal)
type
THelloWorld = class
procedure Put;
begin
PrintLn('Hello, World!');
end
end;
var HelloWorld := THelloWorld.Create;
HelloWorld.Put;
Implementacja metody może być również wykonana w innym miejscu, jak w innych dialektach Object Pascal.
Rozwój
Wiele funkcji było stale wprowadzanych do Object Pascal z rozszerzeniami do Delphi i rozszerzeniami do FreePascal. W odpowiedzi na krytykę Free Pascal przyjął generyki o tej samej składni co Delphi, pod warunkiem, że wybrany jest tryb zgodności Delphi, a zarówno Delphi (częściowe), jak i Free Pascal (bardziej rozbudowane) obsługują przeciążanie operatorów . Delphi wprowadziła również wiele innych funkcji od wersji 7, w tym generyki. Podczas gdy FreePascal stara się być kompatybilny z Delphi w trybie kompatybilności Delphi, zwykle wprowadza również wiele nowych funkcji do języka, które nie zawsze są dostępne w Delphi.
Bibliografia
Zewnętrzne linki
- Wprowadzenie do Object Pascal , MacTech Vol 2 Issue 12 1985.
-
Przewodnik referencyjny Object Pascal dla Free Pascal. „Celem jest wymienienie obsługiwanych konstrukcji Pascala i pokazanie, gdzie implementacja Free Pascal różni się od implementacji Turbo Pascal lub Delphi”.
- Free Pascal: przewodnik referencyjny, przewodnik referencyjny dla Free Pascal, wersja 2.0.0
- Główne różnice między składnią C++ i Object Pascal
- Think Pascal 4.5 Nieoficjalna strona o ostatecznej wersji Think Pascal firmy Symantec.
Delfy
- Przewodnik po języku Object Pascal obejmujący Borland Delphi 6-7
- Podstawy Delphi , Zasoby kodów źródłowych projektów Delphi.
- Delphi-Help - первая помощь программисту na Delphi
- Programowanie Delphi , Zasoby Programowania Delphi i Fora Programowania Delphi.