C ist "freier" als Pascal

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben

C ist "freier" als Pascal

Beitragvon compmgmt » 5. Aug 2017, 18:57 C ist "freier" als Pascal

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?
Signatur.exe hat eine Zugriffsverletzung ausgelöst und muss beendet werden
compmgmt
 
Beiträge: 272
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro + Linux Manjaro 17.0.2 | Lazarus 1.6.4 | FPC 3.0.2 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon Warf » 5. Aug 2017, 19:18 Re: C ist "freier" als Pascal

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
Warf
 
Beiträge: 586
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Marsmännchen » 5. Aug 2017, 19:32 Re: C ist "freier" als Pascal

Tja, was ist Freiheit :mrgreen: ?

Freiheit ist oft auch die Freiheit unverständlichen Code zu schreiben. Deswegen mag ich C nicht.
Ich mag Pascal...
Marsmännchen
 
Beiträge: 291
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: Ubuntu 16.04, FPC 3.0.2, Lazarus 1.6.4 | 
CPU-Target: 64bit
Nach oben

Beitragvon Mathias » 5. Aug 2017, 19:45 Re: C ist "freier" als Pascal

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
Mathias
 
Beiträge: 3019
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 5. Aug 2017, 20:47 Re: C ist "freier" als Pascal

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:
Warf
 
Beiträge: 586
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon braunbär » 5. Aug 2017, 21:21 Re: C ist "freier" als Pascal

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
braunbär
 
Beiträge: 162
Registriert: 8. Jun 2017, 17:21

Beitragvon Timm Thaler » 6. Aug 2017, 00:17 Re: C ist "freier" als Pascal

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.
Timm Thaler
 
Beiträge: 338
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon compmgmt » 6. Aug 2017, 07:51 Re: C ist "freier" als Pascal

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.
Signatur.exe hat eine Zugriffsverletzung ausgelöst und muss beendet werden
compmgmt
 
Beiträge: 272
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro + Linux Manjaro 17.0.2 | Lazarus 1.6.4 | FPC 3.0.2 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon siro » 6. Aug 2017, 08:41 Re: C ist "freier" als Pascal

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
"C" verCehnfacht die Entwicklungszeit...
siro
 
Beiträge: 202
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 6. Aug 2017, 16:35 Re: C ist "freier" als Pascal

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
Mathias
 
Beiträge: 3019
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 6. Aug 2017, 17:58 Re: C ist "freier" als Pascal

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.
Timm Thaler
 
Beiträge: 338
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon compmgmt » 6. Aug 2017, 18:00 Re: C ist "freier" als Pascal

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
Signatur.exe hat eine Zugriffsverletzung ausgelöst und muss beendet werden
compmgmt
 
Beiträge: 272
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro + Linux Manjaro 17.0.2 | Lazarus 1.6.4 | FPC 3.0.2 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon Mathias » 6. Aug 2017, 18:50 Re: C ist "freier" als Pascal

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
Mathias
 
Beiträge: 3019
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon kupferstecher » 7. Aug 2017, 09:18 Re: C ist "freier" als Pascal

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.
kupferstecher
 
Beiträge: 45
Registriert: 17. Nov 2016, 11:52

Beitragvon marcov » 7. Aug 2017, 10:57 Re: C ist "freier" als Pascal

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}.
marcov
 
Beiträge: 991
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Dies und Das



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried