C ist "freier" als Pascal

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

C ist "freier" als Pascal

Beitrag von compmgmt »

Ein Programmierer, der von Pascal nach C wechselt, wird schon nach kurzer Zeit die neue Freiheit entdecken und nutzen. Umgekehrt fühlt sich ein C-Programmierer nicht selten von anderen Sprachen in seiner Kreativität eingeschränkt.
So steht es in diesem Artikel geschrieben (https://www.computerwoche.de/a/fuer-die-programmierer-ist-c-die-sprache-der-zukunft,1138326). An sich bietet der Artikel schon einige gute Informationen, aber was genau soll denn unter C "freier" sein, als unter Pascal? Etwa dass Pascal sehr streng ist und so eventuelle Fehler schon während des Kompilierens erkennt, die in C nicht erkannt werden?

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Warf
Beiträge: 1445
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: C ist "freier" als Pascal

Beitrag von Warf »

z.B.

Code: Alles auswählen

for (int c = 0, FILE* f = fopen(argv[1], "r"); (c = fgetc(f)) != EOF; putchar(c));

ist bereits die Grundfunktion von dem CoreUtil cat. In Pascal ist das deutlich aufwendiger.

Aber ich denke was mit Freiheit am meisten gemeint ist, ist die Typstrenge. Z.B. die Strikte Trennung zwischen Boolean und Integern, welche in C gar nicht vorhanden ist.
Und Freiheit ist dafür das Perfekte Wort, man hat die Freiheit jeden Typen als Boolean zu verwenden, ob das was Gutes oder was Schlechtes ist, ist jedem selbst überlassen, aber das man Freier ist kann man nicht bestreiten

Ob das allerdings allgemein Gültig ist würde ich bezweifeln, z.B. die Strings in Pascal mit Referenzzählung und Überladenen Operator +, gibt einem Deutlich mehr Freiheiten, da man nicht an GetMem und FreeMem gebunden ist.
Genause mit den Pascal Sets statt C Bitmaps, die Überladenen Operatoren geben dem Entwickler mehr Freiheiten ohne sich über komplizierte BitArithmetkik Gedanken machen zu müssen.

Bei C++ könnte ich es schon eher verstehen, Merfachvererbung, Templates (statt generics), automatische Typerkennung, all diese Features für die Pascal kein Äquivalent hat, geben dir natürlich mehr Freiheit, da du einfach mehr direkt machen kannst, und keine Umwege gehen musst.
Aber auch hier wieder, ob das was Gutes ist kann jeder selbst entscheiden, ich persönlich finde Mehrfachvereerbung nutzlos

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Ubuntu 16.04, FPC 3.0.2, Lazarus 1.6.4
CPU-Target: 64bit
Wohnort: Berlin

Re: C ist "freier" als Pascal

Beitrag von Marsmännchen »

Tja, was ist Freiheit :mrgreen: ?

Freiheit ist oft auch die Freiheit unverständlichen Code zu schreiben. Deswegen mag ich C nicht.
Ich mag Pascal...

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

Re: C ist "freier" als Pascal

Beitrag von Mathias »

Aber ich denke was mit Freiheit am meisten gemeint ist, ist die Typstrenge. Z.B. die Strikte Trennung zwischen Boolean und Integern, welche in C gar nicht vorhanden ist.

Freiheit ist schön, ist mit char in C/C++ ein Zeichen oder ein Zahl gemeint. Bei Pascal ist dies eindeutig, da man Byte oder Char nimmt.

Code: Alles auswählen

for (int c = 0, FILE* f = fopen(argv[1], "r"); (c = fgetc(f)) != EOF; putchar(c));

Man ist richtig frei so richtig unleserlich zu Coden.

all diese Features für die Pascal kein Äquivalent hat, geben dir natürlich mehr Freiheit, da du einfach mehr direkt machen kannst, und keine Umwege gehen musst.

Kann man mit Pascal auch, mit einem asm-Block.
Abrobo C++, hat von euch schon jemand einen asm-Block in C++ erzeugt, unleserlicher geht es kaum. :mrgreen:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1445
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: C ist "freier" als Pascal

Beitrag von Warf »

Mathias hat geschrieben:Freiheit ist schön, ist mit char in C/C++ ein Zeichen oder ein Zahl gemeint. Bei Pascal ist dies eindeutig, da man Byte oder Char nimmt.


Da muss man dazu sagen, es gibt ja keinen unterschied zwischen Zeichen oder Zahlen. Die einzige Situation in der man davon unterscheiden möchte ist eventuell falls man den + Operator für Char Pointer (Strings) und Chars überläd, da es bei einem Zeichen eine Konkatination sein sollte, und bei einer Zahl der Zeiger inkrementiert wird. Das sollte es aber nie in C geben, daher ist eine Unterscheidung zwischen Char und Byte rein didaktisch relevant. Genauso wie die Unterscheidung Zwischen Boolean und Zahlen. Und oftmals stört es mich schon dass ich bei Pascal jedesmal LongBool(Intexpr) schreiben muss für If abfragen, oder dass ich Ord(CharExpr) schreiben muss um einen Char in Byte zu konvertieren.

Mathias hat geschrieben:Man ist richtig frei so richtig unleserlich zu Coden.


Wie gesagt die Bewertung ist jedem selbst überlassen, ich habe aber auch ein extremes Beispiel gewählt, aber die For Syntax von C hat tatsächlich einige Vorteile die ich in Pascal manchmal vermisse.

Mathias hat geschrieben:Kann man mit Pascal auch, mit einem asm-Block.

Das verstehe ich nicht. Assembler hat weder Mehrfachvererbung (immerhin hat ASM nicht mal Klassen), oder Templates oder Typerkennung.

Mathias hat geschrieben:Abrobo C++, hat von euch schon jemand einen asm-Block in C++ erzeugt, unleserlicher geht es kaum. :mrgreen:

Code: Alles auswählen

_asm{
  COMMANDS
}


vs

Code: Alles auswählen

asm 
  COMMANDS
end;


Um ehrlich zu sein gibt sich das nicht so viel

Apropos, das wird nicht Abrobo geschrieben :mrgreen:

braunbär
Beiträge: 294
Registriert: Do 8. Jun 2017, 18:21

Re: C ist "freier" als Pascal

Beitrag von braunbär »

So steht es in diesem Artikel geschrieben (https://www.computerwoche.de/a/fuer-die ... ft,1138326).


Ich habe jetzt nur den ersten Kommentar (Dr. Axel Kemper, Space GmbH, Hannover) gelesen.
Derart geballter Unsinn kombiniert mit Ahnungslosigkeit ist schon eher selten. Ich denke, die Seite kann man abhaken...


edit: Rätsel gelöst: Datum des Artikels: 01.02.1991
:D :D :D

Timm Thaler
Beiträge: 1049
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: C ist "freier" als Pascal

Beitrag von Timm Thaler »

Der Freiheit von C verdanken unzählige Viren und Trojaner ihr Leben. Was wäre ein Schreibprogramm ohne Pufferüberläufe, durch die man beliebigen Code aus einer Datei in den ausführbaren Speicherbereich schieben kann? Oder ein Browser ohne Stringbegrenzung, durch die man mit dem Aufruf einer Webseite ausführbaren Code über die URL einschleusen kann?

Was waren wir immer genervt, wenn Basic oder Pascal gemeckert haben, dass der Arrayindex mal wieder ausserhalb des definierten Arrays liegt. Oder dass die Zeichenkette mal wieder länger als erlaubt ist. Bei C - drauf gschissen, Speicher ist für alle da.

Ja, man hat sicher viele Feiheiten. Aber wie das mit Freiheiten ist, man muss halt damit umgehen können.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: C ist "freier" als Pascal

Beitrag von compmgmt »

Das einzige, was ich an C++ praktischer als an Pascal finde, ist der ++ Operator. Statt "Inc(i);" kann ich dann "i++;" schreiben, was schneller zu tippen ist. Aber das braucht man an den wenigsten Stellen. Ich nutze sowieso viel öfters for- als while-Schleifen.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

siro
Beiträge: 386
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 10
CPU-Target: 64Bit
Wohnort: Berlin

Re: C ist "freier" als Pascal

Beitrag von siro »

Also eine Programmiersprache die nichtmal ein "Byte" kennt ist mir unheimlich.... :shock:
es gibt dafür vorzeichenbehaftete Ascii Character, naja wer die wohl braucht... :mrgreen:

C hat auch "einige" (wenige) gute Dinge die ich in Pascal vermisse:
Die Bitdefinitionen finde ich supi, die gibts in Pascal nicht.
Geht natürlich mit ausmaskieren genauso.

und auch das Schlüsselwort "static" ==> globale Variablen nur innerhalb der Funktion selbst verfügbar
finde ich ganz hervorragend, leider noch nicht in Pascal gefunden.

Aber das Wort "Freiheit" ist ja völlig fehl am Platze.
Für mich ist und bleibt "C" Chaotisch...
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

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

Re: C ist "freier" als Pascal

Beitrag von Mathias »

Abrobo C++, hat von euch schon jemand einen asm-Block in C++ erzeugt, unleserlicher geht es kaum. :mrgreen:

Code: Alles auswählen

_asm{
  COMMANDS
}


Beim Arduino musste ich es so kompliziert machen:

Code: Alles auswählen

  asm("lds r24, (wert) \n\t"
      "rol r24 \n\t"
      "sts (wert), r24 \n\t");

das was du sagst mit:

Code: Alles auswählen

   _asm {
      lds r24, (wert)
      rol r24
      sts (wert), r24
   }

Geht bei mir nicht.

Wie gesagt die Bewertung ist jedem selbst überlassen, ich habe aber auch ein extremes Beispiel gewählt, aber die For Syntax von C hat tatsächlich einige Vorteile die ich in Pascal manchmal vermisse.

Das muss ich zustimmen, das ist bei C/C++ flexibler, man kann auch andere Schritte ausser 1 machen.
Aber dafür ist die Schreibweise um so komplizierter.
Übrigens konnte dies sogar schon GW-BASIC. :wink:

Was waren wir immer genervt, wenn Basic oder Pascal gemeckert haben, dass der Arrayindex mal wieder ausserhalb des definierten Arrays liegt. Oder dass die Zeichenkette mal wieder länger als erlaubt ist. Bei C - drauf gschissen, Speicher ist für alle da.

Wen ich die Bereichsprüfung bei Lazarus abstelle, kann ich auch über die Array schreiben. Das gibt die schönen SIGSVSs.

Das einzige, was ich an C++ praktischer als an Pascal finde, ist der ++ Operator. Statt "Inc(i);" kann ich dann "i++;"

auf dies kann ich verzichten.

und auch das Schlüsselwort "static" ==> globale Variablen nur innerhalb der Funktion selbst verfügbar
finde ich ganz hervorragend, leider noch nicht in Pascal gefunden.

Das mit dem static würde ich in Pascal auch gut finden, gegenwärtig muss man immer mit const arbeiten, was ein bisschen unlogisch ist.
Dies ist auch ein Vorteil, welches Java hat, obwohl ich kein Freund von Java bin.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1049
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: C ist "freier" als Pascal

Beitrag von Timm Thaler »

Mathias hat geschrieben:Wen ich die Bereichsprüfung bei Lazarus abstelle, kann ich auch über die Array schreiben. Das gibt die schönen SIGSVSs.


Ja genau, es gibt eine Schutzverletzung. Und üblicherweise schmiert Dir Dein Programm ab.

Bei C wird dann der Rest einfach in den ausführbaren Speicher geschrieben, und mit etwas RE setzt Dir der Virus eine Sprungadresse genau an eine Stelle im Programm, die demnächst ausgeführt wird, und schon wird der Viruscode anstelle Deines Programms ausgeführt.

Das klappt seit mindestens 25 Jahren mit Webbrowsern, Office-Programmen, Bildprogrammen, Audio- und Videoplayern. Viele der Viren und Trojaner der letzten Jahrzehnte wären schlicht nicht möglich gewesen, wenn C nicht so "frei" wäre.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: C ist "freier" als Pascal

Beitrag von compmgmt »

Timm Thaler hat geschrieben:Bei C wird dann der Rest einfach in den ausführbaren Speicher geschrieben, und mit etwas RE setzt Dir der Virus eine Sprungadresse genau an eine Stelle im Programm, die demnächst ausgeführt wird, und schon wird der Viruscode anstelle Deines Programms ausgeführt.
Und das Tolle ist: Das erkennt kein Antivirenprogramm :D

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

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

Re: C ist "freier" als Pascal

Beitrag von Mathias »

Bei C wird dann der Rest einfach in den ausführbaren Speicher geschrieben, und mit etwas RE setzt Dir der Virus eine Sprungadresse genau an eine Stelle im Programm, die demnächst ausgeführt wird, und schon wird der Viruscode anstelle Deines Programms ausgeführt.

Irgendwas muss ja dies auslösen, somit liegt es am Programmierer zu überprüfen, ob es nicht zuviel Daten für eine Array hat.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

kupferstecher
Beiträge: 272
Registriert: Do 17. Nov 2016, 11:52

Re: C ist "freier" als Pascal

Beitrag von kupferstecher »

siro hat geschrieben:Die Bitdefinitionen finde ich supi, die gibts in Pascal nicht.

Was meinst du damit? Kannst du ein (C-) Beispiel geben?


Timm Thaler hat geschrieben:
Mathias hat geschrieben: Wen[n] ich die Bereichsprüfung bei Lazarus abstelle, kann ich auch über die Array schreiben. Das gibt die schönen SIGSVSs.

Ja genau, es gibt eine Schutzverletzung. Und üblicherweise schmiert Dir Dein Programm ab.

Wird SIGSVC nicht vom Betriebssystem geworfen? Also nur, wenn man den für das Programm reservierten Speicherberich verlässt. D.h. bei deaktivierter Bereichsprüfung hast du die gleiche Anfälligkeit wie unter C.

marcov
Beiträge: 1072
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: C ist "freier" als Pascal

Beitrag von marcov »

compmgmt hat geschrieben:
Ein Programmierer, der von Pascal nach C wechselt, wird schon nach kurzer Zeit die neue Freiheit entdecken und nutzen. Umgekehrt fühlt sich ein C-Programmierer nicht selten von anderen Sprachen in seiner Kreativität eingeschränkt.
So steht es in diesem Artikel geschrieben (https://www.computerwoche.de/a/fuer-die-programmierer-ist-c-die-sprache-der-zukunft,1138326). An sich bietet der Artikel schon einige gute Informationen, aber was genau soll denn unter C "freier" sein, als unter Pascal? Etwa dass Pascal sehr streng ist und so eventuelle Fehler schon während des Kompilierens erkennt, die in C nicht erkannt werden?


Mann muss zuerst Pascal dafür richtiger definieren. Turbo Pascal ist schon freier als altmodisch Pascal (wie zb das Pascal wogegen Kernighan sein Rant "Why Pascal is not ..." schrieb), und Delphi ist noch freier, und mit D2006 (for..in duck typing) und D2009 noch mehr ({$pointermath on}.

Antworten