Obiekt Pascal - Object Pascal

Obiekt Pascal
Paradygmaty imperatywna , strukturalna , obiektowa , funkcjonalna (tylko dialekt Delphi), oparta na komponentach , sterowana zdarzeniami , generyczna
Rodzina Wirth Pascal
Zaprojektowany przez Larry Tesler (Apple)
Niklaus Wirth (dla Apple)
Anders Hejlsberg (Borland)
Deweloperzy Komputer Apple (początkowy)
Borland International
Po raz pierwszy pojawiły się 1986 ; 35 lat temu ( 1986 )
Dyscyplina pisania Statyczne i dynamiczne (dynamiczne typowanie poprzez warianty, tablica const i RTTI ), mocne , bezpieczne
Zakres leksykalny (statyczny)
Platforma ARM , x86 , PowerPC , ppc64 , SPARC , MIPS , CLI , Java , Kakao
Rozszerzenia nazw plików .p, .pp,.pas
Główne wdrożenia
Delphi ( x86 , ARM ), Free Pascal ( x86 , PowerPC , ppc64 , SPARC , MIPS , ARM ), Oxygene ( CLI , Java , Native Cocoa ), Smart Mobile Studio ( JavaScript )
Dialekty
Apple, Turbo Pascal , Free Pascal (w trybie objfpc lub delphi ), Delphi , Delphi.NET, Delphi Web Script, Oxygene
Wpływem
Pascal , Simula , Smalltalk
Pod wpływem
C# , Genie , Java , Nim , C/AL

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 classzamiast object, konstruktor Create oraz wirtualny destruktor Destroy (i negowanie konieczności wywoływania procedur Newi 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 ECMAScriptJavaScript 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 asmsekcje, 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.

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

Delfy