Warum Pascal?

Für Fragen von Einsteigern und Programmieranfängern...
deadc0de
Beiträge: 56
Registriert: So 24. Jan 2016, 18:31
OS, Lazarus, FPC: Windows(10,8.1,7), Archlinux, Debian
CPU-Target: 64Bit + 32Bit
Wohnort: Winnenden
Kontaktdaten:

Warum Pascal?

Beitrag von deadc0de »

Guten Abend,
Ich bin neu im Forum und komme von C Sprachen. Ich wüsste gerne, was für Vorteile Pascal gegenüber C und C++ bietet.
Vielen Dank Im Voraus für die Hilfe

Warf
Beiträge: 1909
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Warum Pascal?

Beitrag von Warf »

deadc0de hat geschrieben:Guten Abend,
Ich bin neu im Forum und komme von C Sprachen. Ich wüsste gerne, was für Vorteile Pascal gegenüber C und C++ bietet.
Vielen Dank Im Voraus für die Hilfe


Hey ho, und willkommen im Forum.

Nun zu deiner Frage. FreePascal mit C zu vergleichen ist ein wenig witzlos, da Pascal und C sehr ähnlich sind, und so ziemlich jedes C Konstrukt ein Äquivalent in Pascal hat, daher kann man eigentlich ziemlich simpel C in Pascal übersetzen. Darüber hinaus kann Pascal dadurch das es Objektorientiert ist mehr Konstrukte als C. Der Großteil der anderen unterschiede ist auch in C++ vorhanden, und daher gehe ich nun vor allem auf den Unterschied zwischen Pascal und C++ ein.

C++ wurde mit der Intension entwickelt, dem Programmierer möglichst viel Freiheit über die Wahl der Sprachfeatures zu lassen, so kann man äquivalente Ausdrücke auf viele verschiedene Weisen ausrücken, ein kleines Beispiel:

Code: Alles auswählen

struct MyStruct {...};
typedef struct {...} MyStruct;
using MyStruct = struct {...};

Diese drei Ausdrücke sind in C++ Semantisch äquivalent, und das zieht sich durch die komplette Sprache.
Sobald man mit mehreren Entwicklern an einem Projekt sitzt wird das zum absoluten Grauen. In Pascal gibt es ein solches Problem nicht.
Dafür muss man fairer Weise anmerken das Pascal einige Konstrukte von C++ nicht unterstützt, z.B. die Mehrfachvererbung.

Als zweites was ich nicht an C++ mag ist, dass der C++ Standard nur relativ mau ist, und somit man sehr leicht Compilerabhängigen Code fabriziert. Viele mögliche Sprachkonstrukte in C++ sind nicht durch den Standard abgedeckt, z.B. was geschieht in einem Case wen das break fehlt. Je nach dem welchen Compiler man verwendet kann bei einem solchen Sprachkonstrukt alles geschehen. Noch dazu ist man für C++ teilweise darauf angewiesen verschiedene Compiler zu verwenden. So gibt des den g++ (mit mingw) zwar u.a. auch für Windows, aber das ist auch mit Vorsicht zu genießen, und da verwenden die meisten Leute lieber den VC++ Compiler von Microsoft. Und somit ist Code der auf Unix einwandfrei läuft, unter Windows eventuell komplett für die Katz. Noch dazu kommt das C++ sich auch von Plattform zu Plattform unterschiedlich verhält, bestes Beispiel der Typ int ist entweder 16 oder 32 (oder 64?) Bit, was auch sehr schnell zu Fehler führen kann mit denen man Wochen verbringen kann um diese zu finden.
Für Pascal gibt es nicht so viele verschiedene Compiler, das ist zwar eher ein Nachteil, allerdings läuft der FPC unter den meisten gängigen Plattformen und der Code verhält sich überall gleich. Außerdem ist der FPC zum größten Teil mit Delphi Code Kompatibel, und somit läuft selbst Delphi Code problemlos unter dem FPC.

Außerdem ist der FPC ein recht schneller Compiler. Wenn der g++ allein Ewigkeiten benötigt um die Includes zu verarbeiten arbeitet Pascal mit ppu Dateien, Vorkompilierten Headern, welche das einbinden in andere Quelltextdateien deutlich Schneller gestaltet. Damit reduziert sich die Compilerzeit ziemlich heftig.


Nun kommt etwas das man sowohl als Nachteil als auch als Vorteil betrachten kann, das ist wohl reine Geschmacksache. Der C/C++ Preprozessor ist komplett überladen. Ein Tuningmächtiges Rechenmodell zur Sourcecodeverarbeitung mag seine Vorteile haben, aber wenn man in manche Codes reinsieht und dank dem Preprozessor den Programmcode nicht mehr erkennen kann wird es obszön. Allein so etwas:

Code: Alles auswählen

#define begin {
#define end }
 
#define procedure void
#define Pointer void*
 
#define if if(
#define then )
 
#define while while(
#define do )
 
#define record struct{
#define type using
 
type MyStruct = record
  int Elem1;
  string Elem2;
end;
 
procedure MyProc()
begin
  int i = 1;
  while i<100 do
  begin
    if j<i then
      j++
    i = j;
  end;
end;

Ob man das nun wirklich benötigt?

In Pascal die Compileranweisungen können grade das was nötig ist, und damit bilden sich nicht irgendwelche großen undurchsichtigen Preprozessor Konstrukte, sodass man den Code nicht mehr erkennen kann.

Dann stört mich als nächstes das Header und Body System in C und C++. Während man in C 2 Dateien benötigt bietet Pascal das in einer Datei an. Die Units sind unterteilt in einen Interface Teil (Header) und einen Implementation Teil (Body). Somit gibt es eine Trennung zwischen diesen beiden Parts, aber es werden keine extra Dateien benötigt. Das ist allerdings auch eine Sache der Präferenz.


Außerdem ist Pascal Code deutlich besser Strukturiert. So wird zwischen Funktionen mit Rückgabetyp (function) und Funktionen ohne Rückgabetyp (Procedures) unterschieden, und auch zwischen Pascal Dateitypen wird unterschieden. Eine Programm Datei erzeugt immer ein Ausführbares Programm, und der Quelltext dessen kann nicht von anderen Dateien importiert werden (und hat somit auch keinen interface Teil), während Units nur Programmcode bereitstellen, aber kein eigenständiges Programm erzeugen können. Konstrukte wie die For-Schleife sind deutlich Strikter und erlauben keine komischen Konstrukte mit mehreren Variablen und verschiedenen Bedingungen.
Diese Struktur macht das ganze deutlich lesbarer und verständlicher, der Code ist einfacher zu Warten, und für dritte auch besser nachzuvollziehen. Dafür kann man in C++ deutlich schneller und mit weniger Code das selbe ausdrücken.


Das sind jetzt vor allem die Sprachlichen Unterschiede, dir mir jetzt spontan eingefallen sind (es gibt bestimmt noch deutlich mehr), und es ist meist ein Mutal Tradeoff, oft wird Struktur durch Flexibilität getauscht, und an dieser Stelle ist es auch ziemlich Präferenzsache ob man einen Punkt nun als Vor- oder Nachteil sieht.

Kommen wir aber nun zu dem (meines Erachtens nach) Hauptgrund der für FreePascal spricht, undzwar Lazarus. Vorab, da wir hier im Lazarusforum sind gehe ich davon aus das zwar bekannt sein sollte was Lazarus eigentlich ist, dennoch fasse ich es kurz nochmal zusammen.
Lazarus ist eine Open Source Entwicklungsumgebung für Free Pascal, welche sich vor allem an Delphi orientiert (hat). Das Herzstück der IDE ist die LCL (Lazarus Component Library), ein Framework Visueller (und non Visueller) Komponenten für verschiedene Plattformen, zum erstellen Plattformunabhängiger (GUI) Anwendungen.

Und genau das ist das beste an Pascal. Die LCL ist etwas, was ich so noch nirgends sonst gesehen habe. Natürlich gibt es viele GUI Frameworks für die unterschiedlichsten Sprachen (z.B. QT), aber die LCL geht mit einen eigenen Ansatz ran, so genannten Widgetsets.

Mit diesen Widgetsets werden die Standardkomponenten über verschiedene Systeme zugänglich gemacht, ohne das der Entwickler davon was mitbekommt. Z.B. gibt es ein Widgetset für QT, eines für Windowsforms und eines für Mac OSX Carbon. Der Programmierer erstellt nun mit Lazarus eine GUI Anwendung, und kompiliert sie unter Windows mit Windowsforms, unter OSX mit Carbon und unter Linux mit QT. Somit hat er 3 Anwendungen, die auf den verschiedenen Plattformen ein das entsprechende (native/System) Framework zur Darstellung nutzen, während der Entwickler keinen Extraaufwand hat diese verschiedenen Frameworks zu verwenden. Man muss dafür nicht mal eine Zeile Code ändern, sondern nur in den Projekteinstellungen einen Wert verändern.
Außerdem stellt die LCL einige Funktionen der Windows SystemAPI Plattformübergreifend bereit. So muss man wenn man z.B. die Zeit messen will nicht zunächst mal nachschauen wie das unter dem entsprechenden System geht, man kann einfach GetTickCount verwenden, und muss sich so nur eine Funktion merken.


So das war nun ein kurzer und noch sehr Allgemeiner Einblick in die Welt von Pascal mit Lazarus. Es gibt noch vieles weitere was man erwähnen könnte, aber ich denke für einen groben Überblick sollte das reichen.

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Warum Pascal?

Beitrag von SoE »

Und dann wäre da noch CodeTyphon...
Quasi die Lazarus-IDE für FreePascal in der XXL Variante.
Für alle die gerne viel an Bord haben...


Was die Fehlerquellenvorsorge anbelangt soll ja "RUST" der absolute Knaller sein, aber ich denke es gilt die uralte Regel die immer gegolten hat:
Die beste Programmiersprache ist die, die man am besten beherrscht...:-)

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: Warum Pascal?

Beitrag von mischi »

Für mich der wichtigste Punkt ist, dass ich in Pascal nur dann mit Pointern arbeiten muss, wenn ich es wirklich will, während C mir das laufend aufnötigt. Bei Pascal bekomme ich eine Fehlermeldung beim Übersetzen, wenn ich aus Versehen im Trüben des Speichers fische, bei C im besten Fall einen Laufzeitfehler, aber wenn ich Pech habe, einfach nur ein falsches Ergebnis.

Zweitens hat Pascal die Flexibilität beim Aufruf von Funktionen, dass Parameter sowohl mittels call-by-value UND call-by reference übergeben werden können. C kann nur das erste, Fortran nur das zweite. Ich verwende immer mal wieder C- und/oder Fortranroutinen. Mit Pascal muss ich weder beim einen noch beim anderen unnötige Klimmzüge machen, dass das klappt.

Der Modus Objective-Pascal öffnet die Tür zur Objective-C Welt von OS X und iOS.

Ich habe noch nichts besseres als Lazarus gefunden, wenn es darum geht, mit nicht zu großem Aufwand ein Programm für Windows, Linux und OS X zu schreiben.
MiSchi macht die fink-Pakete

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Warum Pascal?

Beitrag von mschnell »

Warf hat geschrieben:. FreePascal mit C zu vergleichen ist ein wenig witzlos, da Pascal und C sehr ähnlich sind,


So gesehen sind alle höheren Computersprachen irgendwie ähnlich. Aber all haben ihre Besonderheiten.

Ich muss zwangsläufig hauptsächlich in C arbeiten, wenn möglich benutze ich aber Pascal, weil mehr Fehler schon beim Compilieren auffallen und der (undokumentierte) Code nachher besser lesbar ist .

-Michael

Lion
Beiträge: 186
Registriert: Mo 24. Mär 2014, 09:58

Re: Warum Pascal?

Beitrag von Lion »

Bei mir ist das die "erste Liebe"! Auch wenn Pascal irgendwo schlecht abschneidet, ich bleibe dabei.

deadc0de
Beiträge: 56
Registriert: So 24. Jan 2016, 18:31
OS, Lazarus, FPC: Windows(10,8.1,7), Archlinux, Debian
CPU-Target: 64Bit + 32Bit
Wohnort: Winnenden
Kontaktdaten:

Re: Warum Pascal?

Beitrag von deadc0de »

Wow, so viele gute Antworten, die auch hilfreich sind. Also im C++ Forum waren die Leute nicht so Hilfsbereit. Ja, tatsächlich hat Pascal mit Lazarus bzw Delphi mein Interesse wegen der relativen Plattformunabhängigkeit geweckt. Bis auf ein paar Bugs, die ich bei einem Kumpel sah, wie beispielsweise das Butten färben unter Windows, das einfach nicht funktionieren möchte, wirkt Lazarus einfach als besseres Gesamtpaket. Und dann gibt es ja auch noch ein Forum, von dem mein Kumpel meinte, das dort alle Nett und Hilfsbereit sind, was ich so jetzt erst mal bestätigen kann. Ich habe mir über Jahre wissen angeeignet, aber auf eine Programmiersprache konnte ich mich noch nicht festlegen, da alle an einen bestimmten Punkt etwas nicht gut können. Z.B C++ ohne QT Grafische Anwendungen. Das ist ja mit der LCL kein Problem.
Vielen Dank an alle Antworten
Wissen ist Macht und ich weis, das ich nichts weis

Requion
Beiträge: 106
Registriert: Mi 3. Feb 2016, 09:39
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
CPU-Target: 32/64Bit,ARM(RPi)
Wohnort: nahe Grimma

Re: Warum Pascal?

Beitrag von Requion »

deadc0de hat geschrieben:Wow, so viele gute Antworten, die auch hilfreich sind. Also im C++ Forum waren die Leute nicht so Hilfsbereit.

Und das bei einer C++ Frage im Lazarus Forum. Ja die (deutsche) Community ist zwar recht klein aber dafür umso hilfsbereiter.
Ich bin zu Pascal gekommen weil ich auf Arbeit Delphi benutze. Und zu Lazarus bin ich gekommen weil mir Delphi für meine Hobbyprogrammierung zu teuer ist.

Bei dem Vergleich von Programmiersprachen kommt es immer auch auf den Verwendungszweck an.
In manchen Gebieten hat C/C++ seine stärken und in anderen Gebieten eben Pascal (oder Java oder C# oder oder oder).

Ich find Pascal mit Lazarus sehr gut weil es eine einfache (wirklich einfach durch die Geschichte Pascals), kostenlose Möglichkeit für Jedermann ist, GUI Applikationen plattformunabhängig zu erstellen.
Das wäre in C++ schon wieder etwas schwerer. Deshalb hab ich mich für meine privaten Projekte für Lazarus entschieden.

Trotzdem beschäftige ich mich sehr stark mit der Programmierung in C++ unter Linux(Unix).
Dadurch hab ich nicht nur das programmieren in C++ gelernt, sondern auch sehr wichtige Informationen für Entwickler die vollkommen unabhängig von der Programmiersprache sind.
Ich erwähne das hier weil ich das in Tutorials von anderen Programmiersprachen (auch Pascal/Lazarus/Delphi/wieauchimmer) bisher immer vermisst habe auch wenn dies nicht der Sinn des Tutorials in Sprache X ist.
Mfg Requion

Das beste an Standards ist, dass es so viele davon gibt.

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Warum Pascal?

Beitrag von Mathias »

Wow, so viele gute Antworten, die auch hilfreich sind. Also im C++ Forum waren die Leute nicht so Hilfsbereit.

Das C++ Forum fand ich nicht mal so schlecht, du musst mal in einem Java-Forum eine Frage stellen, da sind die Antworten gleich katastrophal, wie die Sprache Java.
Nur ist man bei Android auf diesen Schrott angewiesen.

Ich finde übrigens Pascal die beste Sprache die es gibt, auch Turbo-Pascal war dazumal schon genial. Auch Delphi war super.
Ich kenne keine Sprache die übersichtlicher ist als Pascal und erst noch guten nativen Code compiliert. Auch wen die Delphi-Compiler besseren Code erzeugt als Lazarus.
Aber dafür ist Lazarus unschlagbar in der Plattformübergreifbarkeit. :shock:

Die Sprache C finde ich nicht mal so schlecht, aber das drum herum. Gutes Beispiel, das gebastel mit den *.h und *.c - Dateien. Da ist das Unit-System unschlagbar.
Java ist in dieser Richtung auch recht übersichtlich, mit seinen Classen, aber dafür bekommt man nicht mal einen nativen Code, irgendwie erinnert mich dies an GW-BASIC, dies war auch ein Interpreter, welcher intern als Bit-Code speicherte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Warum Pascal?

Beitrag von Christian »

Pascal ist viel übersichtlicher als C++. Man erfasst Code den man seit Jahren nicht mehr gesehen hat sehr viel schneller.
Pascal ist sehr Streng von den Compilervorgaben her. Man kann in C/C++ problemlos Code schreiben der "anders gemeint" war. Das ist in Pascal fast unmöglich.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Warum Pascal?

Beitrag von creed steiger »

Das kann ich nur unterstützen.
Als Hobby-Programmierer ist es für mich extrem wertvoll, das Pascal sich fast natürlich liest und man auch Sachen die man lange
nicht angefasst hat fast sofort wieder versteht.

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Warum Pascal?

Beitrag von Mathias »

Als Hobby-Programmierer ist es für mich extrem wertvoll, das Pascal sich fast natürlich liest und man auch Sachen die man lange nicht angefasst hat fast sofort wieder versteht.

Was Pascal anbelangt ja, aber wen zu viel im Object-Inspektor verändert, dann kann es auch sehr schwierig werden.
Aus diesem Grund finde ich es recht sinnvoll, wen man gewisse Komponenten-Angaben erst im FormCreate ändert, dann sieht man jede Änderung auch sofort.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Warum Pascal?

Beitrag von pluto »

Pascal ist viel übersichtlicher als C++. Man erfasst Code den man seit Jahren nicht mehr gesehen hat sehr viel schneller.

Diesen Punkt kann ich nur Fett unterstreichen. Ich habe code von mir den ich seit über 10 Jahren immer mal wieder überarbeite. Kein Problem

Schaut euch mal diese C++ Projekte an wie die aufgebaut sind und sucht da mal was ohne genau zu wissen, was ihr sucht.

Ich arbeite ja auch mit Arduino C. Das ist eigentlich C aber die LIBS z.b. sind in C++ geschrieben. Arduino C ist aber vereinfachtest C.

Wie schon gesagt, bei C basierten Sprachen ist man auf Pointer angewiesen. Z.B. heißt es das die ESA oder NASA das schon zum Verhängnis geworden sind. Ich glaube bei der ESA ist eine Rakte Explodiert oder verloren gegangen, weil ein Entwickler = und == vertauscht hat. Bei Pascal hätte der Kompiler gemerkt bei C ist das aber erlaubt weil man bei einem IF eine Zuweisung machen kann(Warum nur? wird das oft gemacht, habe ich bisher selten gesehen).
MFG
Michael Springwald

Warf
Beiträge: 1909
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Warum Pascal?

Beitrag von Warf »

pluto hat geschrieben:Wie schon gesagt, bei C basierten Sprachen ist man auf Pointer angewiesen. Z.B. heißt es das die ESA oder NASA das schon zum Verhängnis geworden sind. Ich glaube bei der ESA ist eine Rakte Explodiert oder verloren gegangen, weil ein Entwickler = und == vertauscht hat. Bei Pascal hätte der Kompiler gemerkt bei C ist das aber erlaubt weil man bei einem IF eine Zuweisung machen kann(Warum nur? wird das oft gemacht, habe ich bisher selten gesehen).


C kennt keinen boolean Typen, und if prüft einfach ob der Wert ungleich 0 ist, und das funktioniert auf allen Typen.

Außerdem gibt eine Zuweisung immer den selben wert zurück damit lassen sich solche konstrukte wie:

Code: Alles auswählen

a = b = c = 5;

bilden.

Das kann den Code sehr verkürzen, allerdings kann es damit eben auch leicht zu Fehlern kommen. Das ist ein mutal tradeoff zwischen Code Kürze und Lesbarkeit/Fehleranfälligkeit

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Warum Pascal?

Beitrag von SoE »

..heißt es das die ESA oder NASA das schon zum Verhängnis geworden sind...

Bei der NASA benutzt man C oder C++ ?? Ich dachte beim Militär & Co. wird "ADA" eingesetzt um genau so etwas im Vorfeld auszuschließen.
C und C++ sind vom Sicherheitsblickwinkel aus betrachtet antiquierte Sprachen, die wohl auch keine Ausbesserung mehr erhalten werden, da sonst sehr viel alter QuellCode nicht mehr compilierfähig wäre. Und die meisten Betriebssysteme basieren doch auf C und ASM oder? Wer schreibt schon 50 MIO Zeilen MSWindows neu in "RUST" oder "ADA" oder "PASCAL" oder was auch immer... Also ist es echt unwahrscheinlich, dass die vorhandenen Kontruktionsfehler behoben werden.

Jeder Cracker kennt wahrscheinlich folgende Gleichung:
C oder C++ in den Händen von Anfängern oder Amateuren = Großes Grinsen

In der heutigen Zeit braucht man Sprachen, die aufgrund ihrer Struktur und Syntax und mit Hilfe vom Compiler, der während der Kompilierung einige Tests macht, die gröbsten und einfachsten Schnitzer verhindert. Warum sonst haben Leute "RUST" entwickelt? Leider kenne ich "RUST" nicht und das macht für mich als Hobbyprogrammierer wohl auch keinen Sinn mich mit diesen unsäglichen {} Klammern "auseinanderzusetzen". Wenn ich aber nochmal eine ganz neue Sprache lernen müßte, dann würde ich mir "RUST" mal ansehen, auch wenn ich dann umsteigen müßte auf ein englisches Tastatur-Layout aufgrund der bescheuerten Klammern.

Bin mal gespannt wie sich die Sprache in 10 bis 20 Jahren verbreitet hat, falls das überhaupt passiert.
Was sich nicht weiterentwickelt ist recht schnell Schrott von Gestern, es sei denn es ist schon Vollkommen... :-)
Kann mir eigentlich auch egal sein, ich bin froh das ich etwas PASCAL kann und das macht mich schon glücklich genug...

Antworten