Forum: PC-Programmierung Wieso gibt es keine gute Programmiersprache?


von turbo autist (Gast)


Lesenswert?

Jetzt mal ohne Witz, Computer Science existiert schon mehrere Dekaden 
und die Leute haben es noch immer nicht hinbekommen, eine gute 
Programmiersprache zu schreiben?

C:

- Die beste Sprache heutzutage, und das, im Kombination mit C's Alter, 
spricht Bände
- Nur grundlegende Generics
- Keine gute Compile-Time-Evaluation (damit meine ich so etwas wie 
C++14's constexpr)
- Build-Horror
- Weder Modules noch Namespaces

C++:
- Überall falsche Defaults wegen Rückwärtskompatibilität: enum, 
const-Methoden, switch-break, explicit, ...
- iostreams
- Build-Horror (im Gegensatz zu C hat diese moderne Sprache absolut 
keine Entschuldigung dafür, keine Modules zu haben)
- Header-Horror, in Anlehnung an obigen Punkt kommen hier auch noch die 
Abscheulichkeiten mit .inl etc. dazu

D:
- Absolut kein Ecosystem dahinter, genauso wenig wie Libraries
- __traits, __traits, __traits
- Unabdingbarer GC (ja, unabdingbar! Standardbibliothek kompiliert nicht 
ohne)

Java:
- Keine Funktionen
- Keine Funktions-/Methodenzeiger o.Ä.
- Keine gute Compile-Time-Evaluation
- GC/VM, daher extrem langsam, träge und resourcenintensiv (nicht jeder 
hat ein Rechenzentrum unter dem Tisch)
- clone(), finalize(), clone(), finalize(), clone(), finalize()
- Reinkarnation von falschen Defaults
- Devs haben verbissen alles künstlich eingeschränkt

Rust:
- Langatmige Syntax
- Keine gute Compile-Time-Evaluation
- Beschnittene Generics
- Diese hochgepriesene Ownership-Sache ist komplett broken und kostet 
wesentlich mehr Zeit und Haare als die wöchentlichen 10min Debuggen in C

Golang:
- Keine gute Compile-Time-Evaluation
- Keine Generics
- GC
- Halb objektorientiert, halb dann doch nicht. Entweder alles oder 
nichts aber keine halben Dinge.
- Man kommt sich, wie in Java, künstlich beschnitten vor

Nim:
- Ein-Mann-Projekt, inkl. aller Implikationen
- Whitespaces als Syntaxelement

Sprachen mit dynamischem Typensystem habe ich mal nicht aufgeführt weil 
ich mich nicht sonderlich für Kinderspielzeug interessiere.

von (prx) A. K. (prx)


Lesenswert?

Du müsstest erst einmal ein Komitee gründen, um in jahrelanger 
aufreibender Arbeit ein für alle Mal die Frage zu klären, was die Welt 
unter "gut" versteht.

von Marek N. (Gast)


Lesenswert?

Python?
- Whitespaces als Syntaxelement

von Eiermeier (Gast)


Lesenswert?


von Spaminator (Gast)


Lesenswert?

turbo autist schrieb:
> Jetzt mal ohne Witz, Computer Science existiert schon mehrere Dekaden
> und die Leute haben es noch immer nicht hinbekommen, eine gute
> Programmiersprache zu schreiben?

Sind mehrere Dekaden denn lang? Wenn ich überlege wie lange es von den 
Anfängen der Elektrizität bis zu ordentlicher Elektronik gedauert hat, 
dann müsste man der Informatik ruhig noch ein Jahrhundert geben. Der 
Entwurf von Programmiersprachen ist schließlich auch ein wenig 
schwieriger als Schaltungen zu basteln.

von (prx) A. K. (prx)


Lesenswert?

Und wenn man dann noch bedenkt, dass man sich in den Jahrhunderten 
Elektrizität nicht einmal auf eine Netz-Spannung einigen konnte, ganz zu 
schweigen von deren Frequenz...

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

julia?

von Guido B. (guido-b)


Lesenswert?

A. K. schrieb:
> Du müsstest erst einmal ein Komitee gründen, um in jahrelanger
> aufreibender Arbeit ein für alle Mal die Frage zu klären, was die Welt
> unter "gut" versteht.

"A camel is a horse, designed by a comittee!"

von Nop (Gast)


Lesenswert?

turbo autist schrieb:
> Jetzt mal ohne Witz, Computer Science existiert schon mehrere Dekaden
> und die Leute haben es noch immer nicht hinbekommen, eine gute
> Programmiersprache zu schreiben?

Sprachen kommen und gehen wie die Wellen im Meer. Modesprachen werden am 
laufenden Band erschaffen. Auch solche, die "alles besser"(tm) machen 
wollen. Am Punkt von D siehst Du auch schon, was dabei das Problem ist - 
es zählt nicht nur, wie toll die Sprache ist.

Es zählt auch, welches Ökosystem man hat, für wieviele Plattformen das 
verfügbar ist, und wie leicht Du am Markt Programmierer bekommst, die 
das können. Es lohnt sich aber nicht, seine Zeit mit einer 
"superneuallestoll-Sprache" zu verschwenden, weil man damit nicht 
gefragt ist. Henne und Ei.

Und für den Bereich, für den es überhaupt gedacht ist (systemnahe 
Programmierung), ist speziell C deswegen heute noch verbreitet, weil es 
ein riesiges Ökosystem hat, unzählige verfügbare Programmierer, und es 
einfach "gut genug"(tm) ist. Der beste portable Makro-Assembler 
überhaupt eben.

von lanz (Gast)


Lesenswert?

A. K. schrieb:
> Du müsstest erst einmal ein Komitee gründen, um in jahrelanger
> aufreibender Arbeit ein für alle Mal die Frage zu klären, was die Welt
> unter "gut" versteht.

Für Komitees ist der EU Kommissar Günther Oettinger zuständig.

"We in Tschermani say, it's time so start wiss a nasser Computer 
Längwitsch". Letz call it E+++".

"We leave se Details to se Developers in China". They have Schlitzaugen 
and see de sin plusplusplus signs for Developing the läng witch a lot 
better sän auer EU-people" do.

von Jan (Gast)


Lesenswert?

Ich weiß nicht, warum sich Leute einen ganzen Kasten Oettinger kaufen. 
Mir reicht schon die eine Flasche in Brüssel.

von Noch einer (Gast)


Lesenswert?

Die besseren Programmiersprachen verschieben die Massstäbe.

Wenn du unsere heutigen Sprachen mit Fortran/Cobol/Basic vergleichst, 
haben wir ja eine gewaltige Verbesserung.

von Noch einer (Gast)


Lesenswert?

Vielleicht suchen wir den Schlüssel unter der falschen Strassenlaterne.

Falls gute imperativen Sprachen unmöglich sind, falls sich nur für die 
deklarativen Programmierung gute Sprachen entwickeln lassen -- Dann 
müssten wir alles, was wir in den 50 Jahren lernten, vergessen und neu 
anfangen. Die C Programmierer wollten nicht mal ihre C Kenntnisse 
wegwerfen. Ärgern sich lieber mit diesem aufgeblasenen C++ herum.

So bleiben wir lieber bei den alten Paradigmen, diskutieren ewig über 
nebensächliche Detailpunkte, suchen gar nicht nach guten Ansätzen.

von Noch nicht Rentner (Gast)


Lesenswert?

Die Anforderungen aendern sich, die Konzepte aendern sich, es ist im 
Fluss.

Es kommt immer mehr moegliches hinzu

verteilte Programme, Echtzeit, Datenbanken, Web, ...

von Olaf B. (Firma: OBUP) (obrecht)


Lesenswert?

Jan schrieb:
> Ich weiß nicht, warum sich Leute einen ganzen Kasten Oettinger kaufen.
> Mir reicht schon die eine Flasche in Brüssel.

Und mir verursachen beide nur Kopfschmerzen.

Vor allem wenn die Öettinger Flasch Bier leer ist. Bei der anderen ... 
nur Kopfschmerzen & Übelkeit!

mfg

Olaf

von dunno.. (Gast)


Lesenswert?

Wieso hat eigentlich noch niemand C# genannt?

von Jörg M. (derlang)


Lesenswert?

Warum baut ihr keine perfekte Programmiersprache statt zu meckern?

Könnt Ihr nicht? Och....

von PiityJ (Gast)


Lesenswert?

- Build-Horror

Deshalb bleibe ich seit 35 Jahren bei Basic. Da muss man nicht builden. 
Das Programm ist einfach da. Alles ist wunderbar sortiert durch die 
praktischen Zeilennummern. Und wenn es los gehen soll, gibt man einfach 
'run' ein. Kein make gcc link mit 1000senden Optionen.

Einfach nur 'run' und es geht.

von C#? Net! (Gast)


Lesenswert?

dunno.. schrieb:
> Wieso hat eigentlich noch niemand C# genannt?

Vielleicht weil sich einfach keine Sau dafür interessiert?

Außerdem wurden C++ und Java schon im Eröffnungsbeitrag genannt.
Daraus kannst du dir dann C# interpolieren.

von C#? Net! (Gast)


Lesenswert?

PiityJ schrieb:
> [BASIC]
> Alles ist wunderbar sortiert durch die praktischen Zeilennummern.

Stimmt. Und wenn doch mal was durcheinander kommen sollte, braucht man 
seinen Code einfach nur durch sort(1) zu schicken und alles ist wieder 
in der richtigen Reihenfolge. Fairerweise sollte man aber erwähnen,
dass das in C genauso gut geht:

1
/* 10 */ #include <stdio.h>
2
/* 20 */
3
/* 30 */ int main(int argc, char *argv[])
4
/* 40 */ {
5
/* 50 */     puts("Hello, World!"); 
6
/* 60 */     return 0;
7
/* 70 */ }

von julia (Gast)


Lesenswert?

Mike B. schrieb:
> julia?

Ja, Mike? :-)

von Huh (Gast)


Lesenswert?

PiityJ schrieb:
> mit 1000senden Optionen.

Kannst du die tausend senden-Optionen mal aufzählen? ;-)

von PittyJ (Gast)


Lesenswert?

>> Kannst du die tausend senden-Optionen mal aufzählen? ;-)

bei 'man gcc'
      Overall Options
           -c  -S  -E  -o file  -no-canonical-prefixes -pipe 
-pass-exit-codes -x language  -v  -###  --help[=class[,...]]
           --target-help --version -wrapper @file -fplugin=file 
-fplugin-arg-name=arg -fdump-ada-spec[-slim] -fdump-go-spec=file

       C Language Options
           -ansi  -std=standard  -fgnu89-inline -aux-info filename 
-fno-asm  -fno-builtin  -fno-builtin-function -fhosted
           -ffreestanding -fopenmp -fms-extensions -fplan9-extensions 
-trigraphs  -no-integrated-cpp  -traditional
           -traditional-cpp -fallow-single-precision  -fcond-mismatch 
-flax-vector-conversions -fsigned-bitfields  -fsigned-char
           -funsigned-bitfields  -funsigned-char

       C++ Language Options
           -fabi-version=n  -fno-access-control  -fcheck-new 
-fconserve-space  -fconstexpr-depth=n  -ffriend-injection
           -fno-elide-constructors -fno-enforce-eh-specs -ffor-scope 
-fno-for-scope  -fno-gnu-keywords -fno-implicit-templates
           -fno-implicit-inline-templates -fno-implement-inlines 
-fms-extensions -fno-nonansi-builtins  -fnothrow-opt
           -fno-operator-names -fno-optional-diags  -fpermissive 
-fno-pretty-templates -frepo  -fno-rtti  -fstats
           -ftemplate-depth=n -fno-threadsafe-statics -fuse-cxa-atexit 
-fno-weak  -nostdinc++ -fno-default-inline
           -fvisibility-inlines-hidden -fvisibility-ms-compat -Wabi 
-Wconversion-null  -Wctor-dtor-privacy -Wnoexcept
           -Wnon-virtual-dtor  -Wreorder -Weffc++ 
-Wstrict-null-sentinel -Wno-non-template-friend  -Wold-style-cast
           -Woverloaded-virtual  -Wno-pmf-conversions -Wsign-promo

       Objective-C and Objective-C++ Language Options
           -fconstant-string-class=class-name -fgnu-runtime 
-fnext-runtime -fno-nil-receivers -fobjc-abi-version=n
           -fobjc-call-cxx-cdtors -fobjc-direct-dispatch 
-fobjc-exceptions -fobjc-gc -fobjc-nilcheck -fobjc-std=objc1
           -freplace-objc-classes -fzero-link -gen-decls 
-Wassign-intercept -Wno-protocol  -Wselector -Wstrict-selector-match
           -Wundeclared-selector

       Language Independent Options
           -fmessage-length=n 
-fdiagnostics-show-location=[once|every-line] 
-fno-diagnostics-show-option

       Warning Options
           -fsyntax-only  -fmax-errors=n  -pedantic -pedantic-errors -w 
-Wextra  -Wall  -Waddress  -Waggregate-return
           -Warray-bounds -Wno-attributes -Wno-builtin-macro-redefined 
-Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual
           -Wchar-subscripts -Wclobbered  -Wcomment -Wconversion 
-Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
           -Wno-deprecated-declarations -Wdisabled-optimization 
-Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
           -Wno-endif-labels -Werror  -Werror=* -Wfatal-errors 
-Wfloat-equal  -Wformat  -Wformat=2 -Wno-format-contains-nul
           -Wno-format-extra-args -Wformat-nonliteral -Wformat-security 
-Wformat-y2k -Wframe-larger-than=len -Wjump-misses-init
           -Wignored-qualifiers -Wimplicit 
-Wimplicit-function-declaration  -Wimplicit-int -Winit-self  -Winline
           -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch 
-Wlarger-than=len  -Wunsafe-loop-optimizations
           -Wlogical-op -Wlong-long -Wmain  -Wmissing-braces 
-Wmissing-field-initializers -Wmissing-format-attribute
           -Wmissing-include-dirs -Wno-mudflap -Wno-multichar  -Wnonnull 
-Wno-overflow -Woverlength-strings  -Wpacked
           -Wpacked-bitfield-compat  -Wpadded -Wparentheses 
-Wpedantic-ms-format -Wno-pedantic-ms-format -Wpointer-arith
           -Wno-pointer-to-int-cast -Wredundant-decls -Wreturn-type 
-Wsequence-point  -Wshadow -Wsign-compare
           -Wsign-conversion  -Wstack-protector -Wstrict-aliasing 
-Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=n
           -Wsuggest-attribute=[pure|const|noreturn] -Wswitch 
-Wswitch-default  -Wswitch-enum -Wsync-nand -Wsystem-headers
           -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef 
-Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
           -Wunsuffixed-float-constants  -Wunused  -Wunused-function 
-Wunused-label  -Wunused-parameter -Wno-unused-result
           -Wunused-value -Wunused-variable -Wunused-but-set-parameter 
-Wunused-but-set-variable -Wvariadic-macros -Wvla
           -Wvolatile-register-var  -Wwrite-strings
......


Ich mache hier mal Schluss, ist noch nicht mal die Hälfte.

von Huh (Gast)


Lesenswert?

PittyJ schrieb:
> Ich mache hier mal Schluss, ist noch nicht mal die Hälfte.

Da war aber keine einzige senden-Option dabei!
Sagtest du nicht, es sind tausend?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Frage des Threadstarters ist leicht zu beantworten:

Weil dann keine Programmiersprachenflamewars mehr nötig wären, in denen 
sich Leute in erster Linie über die Nachteile von ihnen nicht 
verstandener Programmiersprachen auslassen, und Dinge, die sie in ihrem 
jeweiligen persönlichen Favoriten entdeckt haben, als weltbewegend und 
einzigartig ansehen.

Und da das Internet von Programmiersprachen- und anderen Flamewars lebt, 
gibt es eine sehr aktive Gemeinde von Programmiersprachenhackern, die 
dafür sorgen, daß keine Programmiersprache "gut" wird.

von Ben W. (ben_w)


Lesenswert?

C#? Net! schrieb:
> dunno.. schrieb:
>> Wieso hat eigentlich noch niemand C# genannt?
>
> Vielleicht weil sich einfach keine Sau dafür interessiert?
>
> Außerdem wurden C++ und Java schon im Eröffnungsbeitrag genannt.
> Daraus kannst du dir dann C# interpolieren.

naja gefühlt ist C# mittlerweile mehr als Java und C++ zusammen ...
hat aber auch den nachteil das es mehrere Größenordnungen mehr 
Möglichkeiten gibt genau das gleiche auszudrücken.

was wäre denn eine gute Sprache?
Selbst wenn du heute einen total genialen C++ code entwickeln würdest, 
auf den du richtig stolz sein kannst, in 10 Jahren schaust du dir den 
nochmal an und denkst nur, welcher trottel hat das geschrieben ...

von Nop (Gast)


Lesenswert?

dunno.. schrieb:
> Wieso hat eigentlich noch niemand C# genannt?

Weil es zu stark mit MS verbandelt ist. Wenn MS irgendwas erschafft, 
dann steht dahinter IMMER die Idee von "embrace, extend, destroy". Wie 
schon die alten Römer sagten "timeo Danaos et donas ferentes" - und was 
anderes als Danaergeschenke sind von MS nie zu erwarten.

Deswegen ist Mono ja auch geflopt.

von Watch the Trolls (Gast)


Lesenswert?

Wenn man bedenkt dass die Evolution 1000000 jahre gebraucht hat um sowas 
wie Turbo Autist hinzubekommen, dann entwickeln sich Programmiersprachen 
doch rasend schnell.

von Bert3 (Gast)


Lesenswert?

>Java:
>- GC/VM, daher extrem langsam, träge und resourcenintensiv (nicht jeder
>hat ein Rechenzentrum unter dem Tisch)

extrem ist hier vielleicht ein wenig zu extrem - es kommt doch immer auf 
den Anwendungsfall an

>Rust:
>Diese hochgepriesene Ownership-Sache ist komplett broken und kostet
>wesentlich mehr Zeit und Haare als die wöchentlichen 10min Debuggen in C

die Ownership-Sache ist das bisher das beste was überhaupt in der langen 
Zeit an Sprachenentwicklung entstanden ist (Funktional setzt sich leider 
nicht durch) - und es geht den Rust Entwicklern und vielen anderen 
Entwicklern sicherlich nicht um deine 10min Debuggen trivial Probleme 
von dir - und klar ist auch das Konzpte/Einschränkung in dem bösesten 
Bereich der Dominant-Sprachen sicher nicht ohne Opfer vonstatten geht - 
die brauchen eben noch ein bisschen

von Noch einer (Gast)


Lesenswert?

>Weil dann keine Programmiersprachenflamewars mehr nötig wären, in denen
>sich Leute in erster Linie über die Nachteile von ihnen nicht
>verstandener Programmiersprachen auslassen

Ja. Das ist es.

Wir Programmierer haben uns nur drei mal etwas neues gelernt. Uns in 
neue Konzepte eingearbeitet. 1945 in die von Neumann Architektur. 1957 
in Fortran. 1980 in die Disketten-Betriebssysteme.

Die heutigen Programmiersprachen sind so verkrüppelt und aufwendig, weil 
wir alle weiteren Konzepte ignorieren.

Mit den Milliarden von Transistoren könnten die Hardwareentwickler ganz 
andere Ansätze realisieren. Stattdessen bauen die immer neue 
Beschleunigungen um ein prähistorisches Rechenwerk aus 1000 
Transistoren.

Dieser irrsinnigen Aufwand, mit dem unsere Programmiersprachen ein paar 
prähistorischen Maschinenbefehle verpacken, ist überhaupt nicht 
notwendig.

Die verbreiteten Programmiersprachen werden nur deswegen immer 
verwickelter und absurder, weil wir zu träge geworden sind. Weil wir uns 
nicht mehr in die neuen Konzepte einarbeiten wollen.

von Reinhard M. (Gast)


Lesenswert?

Noch einer schrieb:
> Mit den Milliarden von Transistoren könnten die Hardwareentwickler ganz
> andere Ansätze realisieren.

Sobald es dafür einen gcc gibt, soll es mir recht sein ;

von Tommi (Gast)


Lesenswert?

turbo autist schrieb:
> Wieso gibt es keine gute Programmiersprache?

Wieso gibt es keinen Weltfrieden? Es ist halt nicht so dass sich das 
Bessere automatisch durchsetzt. Selbst forciert setzt sich das Bessere 
oft nicht durch. Es wäre ja auch für ein "C-Fan" ein Vorteil, wenn es 
eine bessere Alterative gäbe, aber er sieht halt tausend Gründe, warum 
für ihn C die beste Wahl ist. Das ist die Freiheit jedes Einzelnen.

von uwe (Gast)


Lesenswert?

Ada ?!

von ui (Gast)


Lesenswert?

Noch einer schrieb:
> Mit den Milliarden von Transistoren könnten die Hardwareentwickler ganz
> andere Ansätze realisieren. Stattdessen bauen die immer neue
> Beschleunigungen um ein prähistorisches Rechenwerk aus 1000
> Transistoren.
>
> Dieser irrsinnigen Aufwand, mit dem unsere Programmiersprachen ein paar
> prähistorischen Maschinenbefehle verpacken, ist überhaupt nicht
> notwendig.

Es steht dir frei andere Ansätze zu realisieren.
Wenn es ein gutes/tolles Konzept gibt, wirst du bald sehr reich sein. 
Selbst wenn du nur das Konzept darstellst und einen Prototypen auf nem 
FPGA aufbaust.

von Jack (Gast)


Lesenswert?

Noch einer schrieb:
> Die heutigen Programmiersprachen sind so verkrüppelt und aufwendig, weil
> wir alle weiteren Konzepte ignorieren.
>
> Mit den Milliarden von Transistoren könnten die Hardwareentwickler ganz
> andere Ansätze realisieren. Stattdessen bauen die immer neue
> Beschleunigungen um ein prähistorisches Rechenwerk aus 1000
> Transistoren.

Dann mach. Es ist heute kein grundsätzliches Problem sich einen eigenen 
Prozessor zu basteln. Bauteile wie FPGAs sind bis zu einer gewissen 
Größe für den normalen Bastler erschwinglich. Eine HDL lernen und 
beherrschen ist natürlich nicht ganz so einfach, aber als notwendiger 
Zwischenschritt zur Verbesserung der Welt sicher akzeptabel.

Wenn ein FPGA nicht für deinen Ansatz taugt, dann kannst du dir auch das 
ganze IC-Design auf Silizium-Ebene im Hobbykeller aus dem Boden 
stampfen: Electric VLSI Design System 
http://www.staticfreesoft.com/index.html

Nehmen wir an, du schaffst eine überlegene Technologie. Dann gibt es 
mindestens zwei Wege wie es weitergehen kann:

1. Du nutzt sie still und heimlich in Projekten und Produkten um 
Wunderdinge zu schaffen "Any sufficiently advanced technology is 
indistinguishable from magic" -- Arthur C. Clark

Damit wirst du reich, und keiner versteht wie du es machst.

2. Du machst sie öffentlich. Sie ist in sich selbst so überzeugend, dass 
sie in kurzer Zeit existierende Techniken verdrängt. Mit in sich selbst 
überzeugend meine ich, dass es ohne Marketing-Hype und Fanboy-Propaganda 
geht.

Damit wirst du berühmt (und vielleicht auch reich).

Jetzt kommt aber das Interessante. Täglich werden beide Ansätze 
hundertfach versucht. Vom Erfolg mit Ansatz 1. hören wir per Definition 
nichts (und egal was die Fanboys sagen, Apple ist kein Beispiel dafür). 
Von einem Erfolg nach Ansatz 2. hören wir aber auch nichts.

> Die verbreiteten Programmiersprachen werden nur deswegen immer
> verwickelter und absurder, weil wir zu träge geworden sind. Weil wir uns
> nicht mehr in die neuen Konzepte einarbeiten wollen.

Ich glaube, da ist etwas anderes am Werk. Das Genie vergisst immer, dass 
seine Erfindungen für den normalen Ingenieur oder Programmierer 
verständlich und anwendbar sein müssen. Was für das Genie 
selbstverständlich ist, ist für den Durchschnittsprogrammierer eventuell 
unbegreiflich.

Sehr salopp und unwissenschaftlich ausgedrückt, unter der Annahme einer 
gewissen Intelligenzverteilung ist die Hälfte aller Programmierer dümmer 
als der Durchschnittsprogrammierer.

C++ ist eine Programmiersprache die das schön zeigt. Mit jeder 
Standard-Revision wird sie komplizierter, weil das Standard-Komitee den 
Durchschnittsprogrammierer oder gar den normal-dummen Programmierer 
schon lange aus den Augen verloren hat. Java ist auch auf dem Weg dahin.

Hinzu kommt gerade in der Informatik der Trend, dass Fehlerkorrektur, 
Bugfixing uncool ist und man lieber neue Dinge macht. So wird alter Müll 
in Programmiersprachen nicht behoben, sondern Standard-Komitees bastelt 
lieber neuen Müll dazu.

von Codix (Gast)


Lesenswert?

Nop schrieb:
> Der beste portable Makro-Assembler
> überhaupt eben.

So ist es!
Die ganzen "neuen" Sprachen die in den letzten 30 Jahren entwickelt 
wurden, haben aus meiner Sicht als Firmware-Entwickler in keinster Weise 
das Potential das C hat und immer haben wird.
Wenn ich mich an die Hitachi-CPUs erinnere, die eine JAVA-Runtime 
implementiert hatten, dann wird es mir heute noch schlecht.
Ich muss(te) oft lachen, wenn ich immer wieder lese, dass bspw. 
JAVA-Applikationen auf allen System laufen sollen. Da komme ich vor 
Lachen nicht in den Schlaf.
So verhält es sich aus meiner Sicht auch mit den anderen "neuen" 
Sprachen.
Wirkliche Verbesserungen haben sie nicht zu bieten. Ähm..., doch, man 
braucht immer leistungsfähigere CPUs/Systeme.
Oft kann ich mich des Eindrucks nicht erwehren, dass die Ruby, Phyton, 
Java und wie der ganze unpraktikable Quatsch sich immer nennt, nur dazu 
gedacht sind die "Russen zu verwirren".
Und wenn man sich den Quellcode von vielen Sprachen anschraut 
(Compiler/Interpreter): Die sind fast zu 100% in C geschrieben.
Komisch oder?

von rmu (Gast)


Lesenswert?

(Turbo-) Pascal war genial. Ist irgendwo aber das selbe wie C, nur mit 
anderer Syntax, die aber um Größenordnungen einfacher zu verstehen ist, 
vor allem wenns um Zeiger geht. Darum geht auch C++ (z.B. using) und 
Golang syntaktisch wieder in diese Richtung.

von Borislav B. (boris_b)


Lesenswert?

Codix schrieb:
> Und wenn man sich den Quellcode von vielen Sprachen anschraut
> (Compiler/Interpreter): Die sind fast zu 100% in C geschrieben.
> Komisch oder?

Nö.
GCC, LLVM, Roslyn usw. sind alle in C++ / C# geschrieben.

von Noch einer (Gast)


Lesenswert?

> ist für den Durchschnittsprogrammierer eventuell unbegreiflich

Nö. Meine Kollegen sind nicht zu dumm. Die haben halt eine Sprache so 
gut gelernt, dass sie damit mühelos gutes Geld verdienen können. Kommen 
gar nicht auf die Idee, sie konnten mal was ganz anderes an testen, 
Prolog, Haskell oder Parallax Propeller. Spielen lieber mit den Kindern 
oder tauchen in der Südsee.

von ASM Superprofi (Gast)


Lesenswert?

Die ersten C-Compiler wurden in ASM geschrieben. Komisch, oder?

von Nop (Gast)


Lesenswert?

Jack schrieb:
> C++ ist eine Programmiersprache die das schön zeigt. Mit jeder
> Standard-Revision wird sie komplizierter

In der Limesbetrachtung strebt jede hinreichend lange "erweiterte" 
Programmiersprache gegen Lisp. Sowohl was die Features als auch was die 
Unverständlichkeit angeht. ;-)


Codix schrieb:

> Die ganzen "neuen" Sprachen die in den letzten 30 Jahren entwickelt
> wurden, haben aus meiner Sicht als Firmware-Entwickler in keinster Weise
> das Potential das C hat und immer haben wird.

Für Firmware ja.

Nur, ich habe auch schon z.B. Xwindow-Programmierung in reinem C 
gemacht, und das will man einfach nicht, weil es Codehorror ist. 90% der 
Zeit verschwendet man mit irgendwelchen GUI-Problemen, anstatt sich auf 
die inhaltliche Anwendung zu konzentrieren. Deswegen hat man ja OOP 
erfunden, weil dieses Paradigma bei GUIs (und Simulationen) gut 
funktioniert.

Dann haben wir ja jetzt auch noch den Trend zur Parallelisierung, und 
wenn eine Applikation nicht "bloß" in mehreren Threads skalieren soll 
(was zu Fuß schon schwierig genug ist), sondern dynamisch ganze Server 
zu- und wegschalten können soll, dann ist das ohne entsprechende 
Frameworks gar nicht mehr zu schaffen.

Das Dumme ist, daß solche Frameworks zwar die Komplexität abstrahieren - 
aber sobald irgendwas nicht klappt wie gedacht, muß man das Framework 
selber AUCH verstanden haben, und eben nicht nur als Blackbox nutzen 
können. Weil jede Abstraktion ihre Löcher hat.

von Yalu X. (yalu) (Moderator)


Lesenswert?

@turbo autist:

Du machst es dir mit deiner Kritik sehr leicht (vielleicht ging es dir
auch einfach nur darum, schon am Sonntag eine heftige Freitgasdiskussion
auszulösen):

Sei S die Menge aller Sprachen und F(s) die Menge aller Features der
Sprache s ∈ S. Die Gesamtheit aller überhaupt jemals implementierten
Sprachfeatures ist damit


Jetzt gehst ein paar willkürlich ausgewählte Sprachen der Reihe nach
durch, bildest jeweils die Differenzmenge D(s) = G \ F(s) und sagst:

  Die Sprache s taugt nichts, weil die Features f₁, f₂, ... (f_i ∈ D(s))
  fehlen.

Daraus folgerst du, dass alle Sprachen schlecht sind.

"Gut" ist eine Sprache also erst dann, wenn sie sämtlich Features aus G
umfasst. Falls es diese Sprache – nennen wir sie g – eines Tages
tatsächlich geben sollte, wirst du (zurecht) behaupten:

  Die Sprache g ist hoffnungslos überladen und deswegen nicht
  erlernbar.

Zudem wird g nur so lange "gut" sein, bis eine neue Sprache mit einem
Feature f ∉ G kommt. Dann müsste g mindestens um das Feature f erweitert
werden, um weiterhin als "gut" zu gelten, was g aber noch überladener
macht.

Ein historischer Versuch, die Sprache g zu entwickeln, war PL/1. Man hat
aber bald eingesehen, dass dies zu nichts führt und deswegen keine
weiteren Anstrengungen in diese Richtung mehr unternommen ...

... bis vor ein paar Jahren, als MS anfing, C# zu entwickeln ;-)

: Bearbeitet durch Moderator
von Stefan S. (Gast)


Lesenswert?

turbo autist schrieb:

Ich denke eher, es gibt schon etwas zu viel "gute" Sprachen, so dass es 
schon schwierig wird sich welche auszusuchen.

Vergessen hast Du u.a. auch Haskell, Swift, Julia, Scala, OCaml und 
Crystal.

Oder die eher als Java-Script Ersatz gedachten Kotlin und Dart.

Und man muss sich schon entscheiden, ob man eher eine universelle Spache 
wie D, Nim, Rust, Swift will oder eher spezielle Sprachen, etwa für 
Web-Anwendungen. Oder Interpreter-Sprachen wie Python und Ruby, Sprachen 
für virtuelle Maschienen wie Scala oder Julia, oder Sprachen, die 
Maschienencode erzeugen wie D, Rust, Nim.

Und speziell zu Nim

> Nim:
> - Ein-Mann-Projekt, inkl. aller Implikationen

Ja, der Bus-Faktor ist natürlich etwas kritisch. Auch wenn es im Umfeld 
einige fähige Leute gibt, dominiert der Hauptentwickler sehr stark. Aber 
andererseits spricht es doch sehr für die Sprache selbst, dass das 
Projekt mit wenig Man-Power so weit gekommen ist.

> - Whitespaces als Syntaxelement

Für die, die über Einrückungen definierte Blöcke überhaupt nicht leiden 
können, gibt es seit kurzem die Braces Variante, so dass man wie in C {} 
für Blöcke verwendet. Sollte zumindest in der Git-Version schon 
verfügbar sein. Ich denke aber nicht, dass sich das durchsetzen wird -- 
für Python gab es ja auch mal eine Variante mit END Keyword, hat dann 
aber letztendlich auch keiner wirklich gewollt.

Ich hatte übrigenz kürzlich mal spasseshalber ein Schachprogramm "from 
Scratch" in Nim geschrieben, und dass hat mich durchaus Überzeugt. Nur 
1000 Zeilen, eine brauchbare Spielstärke, und nur ein par Wochen 
Entwicklungszeit. https://github.com/ngtk3/nim-chess2

Und Rust: Für mich ein durchaus interessanter Ansatz, wenn man partout 
keine Garbage-Collector verwenden möchte. Und sicher eine sehr gute 
Alternative zu C++, zumindest für Linux.

von Nop (Gast)


Lesenswert?

rmu schrieb:
> (Turbo-) Pascal war genial.

Als Spielzeug ja, und auch dafür war Turbopascal nur wegen der 
proprietären, zu nichts kompatiblen Erweiterungen überhaupt irgendwie 
nutzbar.

Allein schon, daß man nur einen Returnpunkt pro Funktion hat, und daß 
die Reihenfolge bei der Auswertung komplexerer Logikbedingungen 
undefiniert ist, macht das praktisch schon unbrauchbar.

Wo man in C Idiome wie "if ((ptr != NULL) && (*ptr == Bla))" machen 
kann, hat man in Pascal schonmal zwei Blockebenen.

Und die Ideologie des "ein Ausgang pro Funktion" verschiebt die 
Fehlerbehandlung in den Else-Zweig des Blocks, WEIT weg von der 
Fehlerabfrage. Der Codehorror aus gestackter Fehlerbehandlung kommt dann 
noch hinzu.

Also wenn ein Programm erst Ressource A alloziert, und wenn das OK geht, 
Ressource B, und dann Ressource C. Allokation von C scheitert aber, also 
muß man erst B und dann A wieder rückgängig machen. In C nutzt man dafür 
einfach goto, während man sich in Pascal mit Code-Duplikationen einen 
Wartungs-Horror baut.

War aber auch egal, denn bei Spielzeugprogrammen für Lehrzwecke braucht 
man keine Fehlerbehandlung.

Grundsätzlich hat C gegenüber Pascal (und C++) immerhin den Dogfood-Test 
durchgemacht, denn K&R haben nicht wie Wirth und Stroustrup Sprachen vor 
sich hindesigned, sondern hatten ein konkretes Projekt vor Augen und 
mußten dann das, was sie verzapft haben, auch jeden Tag nutzen.

C wurde von Programmierern für Programmierer geschaffen und nicht von 
einem Akademiker oder gar einem Komitee. Das wäre dann auch eine der 
wichtigsten Eigenschaften, die eine Sprache IMO mitbringen sollte, um 
"gut" zu sein.

von Babbage (Gast)


Lesenswert?

https://de.wikipedia.org/wiki/Brainfuck

Hat Vorteile wie
-  gut geeignet, um Grundlagen der Computertechnik zu erlernen
-  extrem einfaches Sprachkonzept
-  hochkompakte Realisierung des Compilers
-  universelle Einsetzbarkeit nicht eingeschränkt

"Gut" liegt immer im Auge des Betrachters.

von Peter II (Gast)


Lesenswert?

Nop schrieb:
> Allein schon, daß man nur einen Returnpunkt pro Funktion hat, und daß
> die Reihenfolge bei der Auswertung komplexerer Logikbedingungen
> undefiniert ist, macht das praktisch schon unbrauchbar.

https://en.wikibooks.org/wiki/Pascal_Programming/Syntax_and_functions

von Eric B. (beric)


Lesenswert?

Babbage schrieb:
> https://de.wikipedia.org/wiki/Brainfuck

Dann eher Whitespace: 
https://en.wikipedia.org/wiki/Whitespace_(programming_language)

> "Gut" liegt immer im Auge des Betrachters.

Genau, und Whitespace blockiert nicht die Sicht ;-)

von Jack (Gast)


Lesenswert?

Codix schrieb:
> Ich muss(te) oft lachen, wenn ich immer wieder lese, dass bspw.
> JAVA-Applikationen auf allen System laufen sollen.

Na ja, spezielle Java-Applikationen laufen auf deiner Kreditkarte.

Stefan S. schrieb:
> Ich hatte übrigenz kürzlich mal spasseshalber ein Schachprogramm "from
> Scratch" in Nim geschrieben, und dass hat mich durchaus Überzeugt. Nur
> 1000 Zeilen, eine brauchbare Spielstärke, und nur ein par Wochen
> Entwicklungszeit. https://github.com/ngtk3/nim-chess2

Beispiele dieser Art gibt es für jede Sprache. Leider wird dann von so 
einem Beispiel immer auf die universelle Verwendbarkeit geschlossen. Was 
aber, wenn ich zum Beispiel kein Schachprogramm schreiben möchte sondern 
ganz andere Probleme zu lösen habe? Was beweist dein Schachprogramm 
dann?

Nop schrieb:
> Als Spielzeug ja, und auch dafür war Turbopascal nur wegen der
> proprietären, zu nichts kompatiblen Erweiterungen überhaupt irgendwie
> nutzbar.

ISO Pascal war in der Tat zu nichts zu gebrauchen. Turbo-Pascal 
allerdings hat sicher erheblich zum Erfolg von Windows beigetragen.

ASM Superprofi schrieb:
> Die ersten C-Compiler wurden in ASM geschrieben. Komisch, oder?

Nicht komisch. Das gilt für tausende von Industrieprodukten dass sie 
nicht mit sich selbst hergestellt werden. Wenn du einen Nagel verwenden 
möchtest, kaufst du nicht einen Hochofen und versuchst den Hochofen an 
die Wand zu nageln.

von rmu (Gast)


Lesenswert?

Nop schrieb:
> Als Spielzeug ja, und auch dafür war Turbopascal nur wegen der
> proprietären, zu nichts kompatiblen Erweiterungen überhaupt irgendwie
> nutzbar.

Es gibt genug Programme, die in Pascal geschrieben wurden und wirklich 
brauchbar sind, z.B. die TeX-Familie.

> Allein schon, daß man nur einen Returnpunkt pro Funktion hat, und daß
> die Reihenfolge bei der Auswertung komplexerer Logikbedingungen
> undefiniert ist, macht das praktisch schon unbrauchbar.
>
> Wo man in C Idiome wie "if ((ptr != NULL) && (*ptr == Bla))" machen
> kann, hat man in Pascal schonmal zwei Blockebenen.

Ja und. Kürzer als ein äquivalentes C-Programm ist ein Pascal-Programm 
vermutlich nicht. Dafür gibts keine *** Programme, keinen infix/postfix 
unfug, Verwirrungen wie weit ein for (int i = ...) gilt,

> Und die Ideologie des "ein Ausgang pro Funktion" verschiebt die
> Fehlerbehandlung in den Else-Zweig des Blocks, WEIT weg von der
> Fehlerabfrage. Der Codehorror aus gestackter Fehlerbehandlung kommt dann
> noch hinzu.

Kann mich nicht erinnern, dass die Fehlerbehandlung da wirklich 
substantiell anders aussieht als in C. In Pascal gibts doch auch ein 
goto, wenn man in C damit leben kann warum nicht auch in Pascal?

Ist aber eh müssig die Diskussion.

von Noch einer (Gast)


Lesenswert?

Yalu X. schrieb:
> Die Sprache s taugt nichts, weil die Features f₁, f₂, ... (f_i ∈ D(s))
> fehlen.

> Die Sprache g ist hoffnungslos überladen und deswegen nicht
> erlernbar.

Du hast einen Punkt übersehen.

Bei einer "guten" Sprache würde gar nicht auffallen, dass diese Features 
fehlen. Diese Features sind nur Workarounds für Fehler in den 
Paradigmen.

Der zentrale Kritikpunkt: Dieser turbo autist bezeichnet nur 
Workaround-Sammelsurien als Programmiersprachen. Konzepte, die diese 
Unmassen an konfusen Features überflüssig machen, schaut er gar nicht 
an.

von Nop (Gast)


Lesenswert?

Peter II schrieb:

> https://en.wikibooks.org/wiki/Pascal_Programming/Syntax_and_functions

Ja, natürlich wurde das später aufgebohrt, mit genau den zu nichts 
kompatiblen Erweiterungen. Ich sehe aber da kein "exit":
http://www.pascal-central.com/iso7185.html


Stefan S. schrieb:
> Ich hatte übrigenz kürzlich mal spasseshalber ein Schachprogramm "from
> Scratch" in Nim geschrieben, und dass hat mich durchaus Überzeugt.

Ja und? Es gibt auch Spielzeug-Schachprogramme in LISP. Aber eben auch 
nur Spielzeugprogramme mit dem Grundgerüst, und danach ist Schluß.


Jack schrieb:
> Turbo-Pascal
> allerdings hat sicher erheblich zum Erfolg von Windows beigetragen.

Unwahrscheinlich, weil TP unter DOS lief. Die Grafikbibliothek späterer 
Versionen war allerdings super, wenn man nicht gerade enorme Performance 
benötigte. Ich hab übrigens anfänglich mit Turbo Pascal 3.0 gearbeitet.


rmu schrieb:
> Es gibt genug Programme, die in Pascal geschrieben wurden und wirklich
> brauchbar sind, z.B. die TeX-Familie.

Wirklich in ISO-Pascal?

> In Pascal gibts doch auch ein goto

Stimmt, mein Fehler. Ist halt schon über 20 Jahre her, da bleiben die 
ersten Speicherfehler nicht aus. ;-)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Jack schrieb:
> Sehr salopp und unwissenschaftlich ausgedrückt, unter der Annahme einer
> gewissen Intelligenzverteilung ist die Hälfte aller Programmierer dümmer
> als der Durchschnittsprogrammierer.

Das scheint übrigens für jede Berufsgruppe gültig zu sein ;-)

von Nop (Gast)


Lesenswert?

Aber mal generell wieder zum Topic auch noch.. der bereits angebrachte 
Punkt stimmt schon. Eine Programmiersprache, die alles könnte, wäre so 
komplex, daß sie unbeherrschbar wird.

C++ tendiert in diese Richtung, was Stroustrup mit dem berühmten Spruch 
vom Beinwegschießen ja durchaus zugegeben hat. Zudem zerfällt C++ 
langsam in Dialekte, weil es so umfangreich ist, daß niemand alles inkl. 
Libraries verstehen kann, weswegen das mit Codingrichtlinien gehandhabt 
wird. Diese sind aber in jeder Firma unterschiedlich, was zu einem 
Wartbarkeitsproblem führt, wenn das Personal fluktuiert. Erst recht, 
wenn man auch noch Legacycode hat, weil das praktisch eine deutlich 
andere Sprache ist.

LISP war von Anfang an so, hat diese Übung aber anders als C++ nicht mit 
immer komplexerer Syntax hingelegt, sondern sich lieber als 
Turing-Tarpit positioniert. Es gibt eigentlich nur ein Syntax-Element, 
so daß sich jeder LISP-Hacker effektiv seine eigene Sprache baut, 
weswegen es nie ein wirkliches LISP-Ökosystem gegeben hat und auch 
keines geben wird.

C finde ich da angenehm schlank, weil es gar nicht erst versucht, auf 
allen Hochzeiten zu tanzen und sich tierisch aufzublähen. Der Preis ist 
eben, daß es für komplexe Applikationen nicht so gut geeignet ist, weil 
man sich schon sehr auf das "wie" mitsamt manuellem Ressourcenmanagement 
konzentrieren muß anstatt auf das "was".

Wenn man nun eine handhabbare Sprache will, dann kann sie nicht alles 
leisten. Problembezogene Sprachen lösen das Problem aber, zumal sie 
üblicherweise mit Praxisbezug zur jeweiligen Problemstellung gemacht 
wurden und deswegen leicht sind, wenn man einen Bezug zum Inhalt hat.

Ich habe auch schon eigene (simple und zeilenbasierte) 
Programmiersprachen entwickelt, die genau auf das Problem zugeschnitten 
waren. Nicht "gut" für jeden, aber sehr effizient für das jeweilige 
Problem.

von Oliver S. (oliverso)


Lesenswert?

Nop schrieb:
> Stimmt, mein Fehler. Ist halt schon über 20 Jahre her, da bleiben die
> ersten Speicherfehler nicht aus. ;-)

Das wird wohl eher der GC gewesen sein. Das Konzept hat die Natur schon 
vor sehr langer Zeit perfektioniert ;)

Oliver

von Achim.S (Gast)


Lesenswert?

ASM Superprofi schrieb:
> Die ersten C-Compiler wurden in ASM geschrieben. Komisch, oder?

Nein. Schon die ersten Compiler wurden in C geschrieben! Es wurden nur 
erste, unvollständige Vorabversionen in ASM geschrieben, notgedrungen. 
Einen sinnvollen C-Compiler in ASM gab es sicher nie.

von Oliver S. (oliverso)


Lesenswert?

Es gab tatsächlich auch vor C schon höhere Programmiersprachen.

Der erste C-Compiler wurden daher nicht in C, aber auch nicht 
"gezwungenermaßen" in Assembler geschrieben, sondern (sehr 
wahrscheinlich) in der "Vorgängersprache" mit dem schönen Namen 
(Achtung, Überraschung !!!) B.

Steht zumindest so ungefähr hier:
http://csapp.cs.cmu.edu/3e/docs/chistory.html

Oliver

von 垃圾​件 (Gast)


Lesenswert?

Spaminator schrieb:
> Der Entwurf von Programmiersprachen ist schließlich auch ein wenig
> schwieriger als Schaltungen zu basteln.

Dann frage ich mich, wieso die Leistungsfähigkeit von Rechnern immer 
hinter den Anforderungen irgendwelcher Softwarekonstrukte hinterher 
hängt. So schwierig kann es doch nicht sein, Programme zu schreiben, die 
mit breitenverfügbarer Hardware schnell laufen.

von Borislav B. (boris_b)


Lesenswert?

垃圾​件 schrieb:
> So schwierig kann es doch nicht sein, Programme zu schreiben, die
> mit breitenverfügbarer Hardware schnell laufen.

Battlefield 1 läuft bei mir mit 60 fps!

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

rmu schrieb:
> (Turbo-) Pascal war genial. Ist irgendwo aber das selbe wie C, nur
> mit
> anderer Syntax, die aber um Größenordnungen einfacher zu verstehen ist,

wieso "war"?
unglaublich aber war: Pascal gibt es noch -FreePascal->Lazarus und 
Delphi

Nop schrieb:
> rmu schrieb:
>> (Turbo-) Pascal war genial.
>
> Als Spielzeug ja, und auch dafür war Turbopascal nur wegen der
> proprietären, zu nichts kompatiblen Erweiterungen überhaupt irgendwie
> nutzbar.
>
...
> Wo man in C Idiome wie "if ((ptr != NULL) && (*ptr == Bla))" machen
> kann, hat man in Pascal schonmal zwei Blockebenen.

dafür peilt man als normalo-Hobby-Programmierer auch beim ersten Blick 
was gemeint ist
"if ((ptr != NULL) && (*ptr == Bla))"
um sowas logisch fehlerfrei beisammen zu tippen braucht man 1 Jahr
für Pascal reicht es 2x if-then-else logisch zusammen zu kriegen

glücklicherweise gibt es Hochsprachen, die in annähernd menschlicher 
Sprache zu bearbeiten sind
ansonsten könnten wir gleich asm oder hex da reinhämmern

: Bearbeitet durch User
von Ordner (Gast)


Lesenswert?

Oliver S. schrieb:
> Es gab tatsächlich auch vor C schon höhere Programmiersprachen.

Ja beispielsweise BASIC (1964). C konnte sich erst nach einer gezielten 
Diffamierungskamapagne gegen BASIC durchsetzen (Dijsktra, "GOTO 
statement considered harmful", 1968)

von (prx) A. K. (prx)


Lesenswert?

ASM Superprofi schrieb:
> Die ersten C-Compiler wurden in ASM geschrieben. Komisch, oder?

Der erste Pascal Compiler wurde selbstverständlich in Pascal 
geschrieben.

: Bearbeitet durch User
von rmu (Gast)


Lesenswert?

Nop schrieb:
> rmu schrieb:
>> Es gibt genug Programme, die in Pascal geschrieben wurden und wirklich
>> brauchbar sind, z.B. die TeX-Familie.
>
> Wirklich in ISO-Pascal?

Eigentlich ist TeX in "web" geschrieben, nennt sich literal programming, 
und mischt TeX-Code zur Dokumentation mit dem eigentlichen Programmcode. 
Der ist in Pascal, ob das ISO-Pascal ist kann ich nicht sagen. Ich kenn 
nur die Version, den web-code direkt nach C zu konvertieren, diverse 
Infrastruktur dabei auszutauschen, und das dann zu kompilieren.

Ursprünglich ist aber sicher als Pascal übersetzt worden.

Mike B. schrieb:
> wieso "war"?
> unglaublich aber war: Pascal gibt es noch -FreePascal->Lazarus und
> Delphi

Ist bekannt, aber es hat sich irgendwie überholt. Kenne nichts und 
niemanden der irgendwas in Pascal, Delphi oder Lazarus neu entwickelt.

垃圾​件 schrieb:
> Dann frage ich mich, wieso die Leistungsfähigkeit von Rechnern immer
> hinter den Anforderungen irgendwelcher Softwarekonstrukte hinterher
> hängt. So schwierig kann es doch nicht sein, Programme zu schreiben, die
> mit breitenverfügbarer Hardware schnell laufen.

Ist es auch nicht. Auf meinem aktuellen Rechner laufen > 400 threads, 
dabei sind 20 Datenblätter offen, ein paar ODT-Files und Spreadsheets, 
der ERP-Client, eine eclipse, ein emacs und was weiss ich noch alles. 
Dabei spielt noch ein mp3-player und ob im Hintergrund kompiliert wird 
oder nicht merkt man gar nicht.

von Paul B. (paul_baumann)


Lesenswert?

Mike B. schrieb:
> glücklicherweise gibt es Hochsprachen, die in annähernd menschlicher
> Sprache zu bearbeiten sind
> ansonsten könnten wir gleich asm oder hex da reinhämmern

Jawoll! Das ist der beste Satz in dem ganzen Thread.
Was nützt mir eine Sprache, deren Sytax so verworren ist, daß ich 3 
Dolmetscher in Buchform benötige, um dem Kompiler eine für ihn 
verständliche Zeile vorzusetzen?

Der Mist wird durch 10 neue Sprachen pro Jahr immer komplizierter, aber 
nicht besser.

MfG Paul

von Werner F. (Gast)


Lesenswert?

PiityJ schrieb:
> Deshalb bleibe ich seit 35 Jahren bei Basic.

Meine vollste Zustimmung!!!
Ich gehöre auch dazu;-)

10 for i = 1 to 1000
20 print i
30 next i

MfG. Zeinerling

von C#? Net! (Gast)


Lesenswert?

Werner F. schrieb:
> 10 for i = 1 to 1000
> 20 print i
> 30 next i

Druck dir einfach diesen Beitrag aus, dann brauchst du nicht jedes Mal 
dein BASIC-Programm auszuführen.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 
280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 
316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 
352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 
370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 
406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 
424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 
442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 
460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 
478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 
496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 
514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 
532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 
568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 
586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 
604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 
622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 
640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 
658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 
676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 
694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 
712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 
730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 
748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 
766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 
784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 
802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 
820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 
838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 
856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 
874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 
892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 
910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 
928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 
946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 
964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 
982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 
1000

von Jack (Gast)


Lesenswert?

Ordner schrieb:
> Oliver S. schrieb:
>> Es gab tatsächlich auch vor C schon höhere Programmiersprachen.
>
> Ja beispielsweise BASIC (1964). C konnte sich erst nach einer gezielten
> Diffamierungskamapagne gegen BASIC durchsetzen (Dijsktra, "GOTO
> statement considered harmful", 1968)

Das war kein gezielter Angriff auf BASIC. Hier kann jeder das 
Original-Traktat lesen: 
http://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf

Über die Jahrzehnte ist mehr aus diesem kurzen Waschzettel gemacht 
worden als drin steht. Es war sicher auch keine pro C Kampagne. C hat ja 
sogar zwei Arten von goto. Das goto in der Sprache und long-jump in der 
Bibliothek.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jack schrieb:
> Es war sicher auch keine pro C Kampagne.

Schon deshalb nicht, weil es damals noch gar kein C gab. :-)

(BCPL als Vorläufer gab es schon.)

Allerdings gab es massig FORTRAN-Code, und der strotzte nur so von
GO TOs.  Die beiden Worte konnte man in FORTRAN ja auch auseinander
schreiben.

Wer mal FORTRAN-Spaghetti gesehen hat, kann Dijkstras Motivation gewiss
gut verstehen.

von Nop (Gast)


Lesenswert?

垃圾​件 schrieb:
> So schwierig kann es doch nicht sein, Programme zu schreiben, die
> mit breitenverfügbarer Hardware schnell laufen.

Das kommt daher, daß man immer mehr Frameworks und Abstraktionsschichten 
dazwischen setzt. Was wiederum daher kommt, daß man ansonsten die 
Entwicklungen nicht in vertretbarer Zeit (und somit auch zu vertretbarem 
Preis) hinbekäme. Das wiederum liegt daran, daß die Software heute 
weitaus komplexere Dinge tun soll als früher.

Diese Komplexität versteht aber niemand mehr. Also würfelt man sich APIs 
und Frameworks zusammen, die das bewerkstelligen, was erwünscht wird - 
mit erheblich mehr Overhead halt.


Mike B. schrieb:
> unglaublich aber war: Pascal gibt es noch -FreePascal->Lazarus und
> Delphi

Delphi? Jau, hängt an Embarcadero, die gerade erst dies Jahr den 
Standort Spanien dichtgemacht haben und 80 Leute gefeuert haben. Damit 
macht man keine ernsthaften Projekte. Die Misere ging natürlich 
seinerzeit schon von Borland aus.

Bleibt FreePascal, u.a. weil OSS, wodurch man das jederzeit warten kann, 
falls nötig. Gibt's da eigentlich einen offiziellen Standard, oder ist 
seit ISO-Pascal weiterhin nur fröhliches Gefrickel einzelner 
Compilerprojekte angesagt wie zu Zeiten von Turbo-Pascal?

Es bleibt allerdings festzustellen, daß das 30 Jahre zu spät kommt und 
der Zug in der Praxis längst abgefahren ist. Für professionelle Projekte 
mit Zertifizierungsaspekten sowieso, aus denselben Gründen, wieso man 
dort nicht GCC einsetzt.

> für Pascal reicht es 2x if-then-else logisch zusammen zu kriegen

Ja, und die Einrückungstiefen werden dann abenteuerlich. Bei dem von mir 
geposteten C-Idiom sind die Dinge in einer Zeile, die eben auch direkt 
zusammengehören. Gut, für Hobbyprogrammierer ist das egal, deren 
Programme sind erstens nicht groß und werden zweitens auch nicht von wem 
anders später gewartet werden müssen.

Ach ja, und es ist natürlich auch ein Performanceproblem, wenn die 
Reihenfolge der Auswertung nicht definiert ist. In C setzt man deswegen 
setzt in UND-Ausdrücken den unwahrscheinlichsten nach vorne, in 
ODER-Ausdrücken den wahrscheinlichsten. Mag aber kompensiert werden, 
weil man dafür in FreePascal keine Aliasingprobleme hat, wenn man nicht 
mit Pointern loslegt.


Ordner schrieb:
> C konnte sich erst nach einer gezielten
> Diffamierungskamapagne gegen BASIC durchsetzen

Glaube ich nicht. Basic ist eine Interpretersprache (und damals gab es 
noch keine Basic-Compiler), C für systemnahe Programmierung (u.a. 
Interrupts und so ein Zeug). Die stehen zueinander überhaupt nicht in 
Konkurrenz, weil Basic sowieso zu langsam war für das, wofür man C 
entwickelt hat.

Zweitens hat C ja auch noch goto, wenn auch immerhin nicht mehr mit 
Zeilennummer, das war bei Basic damals wirklich übel. Drittens gleicht C 
das aber mehr als aus über die interessanten Möglichkeiten des 
Präprozessors und der Pointerarithmetik.

Diffamieren mußte man übrigens nicht, das "B" stand immer schon für 
"Beginner" - Basic war noch nie was anderes als eine Anfängersprache.


A. K. schrieb:
> Der erste Pascal Compiler wurde selbstverständlich in Pascal
> geschrieben.

Dann hätte man aber das Bootstrap-Problem gehabt. Tatsächlich war es 
genau umgedreht, der erste Pascal-Compiler hat Pascal erschaffen und 
Wirth nur vorgeschoben.

von Nase (Gast)


Lesenswert?

Mike B. schrieb:
> [...]
> dafür peilt man als normalo-Hobby-Programmierer auch beim ersten Blick
> was gemeint ist
> "if ((ptr != NULL) && (*ptr == Bla))"
> um sowas logisch fehlerfrei beisammen zu tippen braucht man 1 Jahr
> für Pascal reicht es 2x if-then-else logisch zusammen zu kriegen
Wenn man bedenkt, dass manche Leute ja nicht einmal drei Zeilen Text mit 
Satzzeichen versehen können, wundert mich das nicht.

> "if ((ptr != NULL) && (*ptr == Bla))"
Wie würde das denn in Pascal aussehen? Zwei Paare Klammern weniger?

Wer sich ernsthaft noch an syntaktischen Banalitäten wie 'begin' und 
'end' statt geschweifter Klammern oder '&&' statt 'and' stört, der ist 
mit seiner Programmierkarriere noch nicht einmnal aus dem Kindergarten 
gekommen...

von Nase (Gast)


Lesenswert?

Nop schrieb:
> Für professionelle Projekte
> mit Zertifizierungsaspekten sowieso, aus denselben Gründen, wieso man
> dort nicht GCC einsetzt.
Formal sicher richtig, praktisch aber lächerlich.

Als ob ein zertifizierter Compiler weniger Ärger machen würde, als gcc 
oder sonstwer. Ich empfinde es als eine widerliche Farce, dass heute 
überhaupt noch Compiler zerzifiziert werden - ich bezweifle nämlich, 
dass irgendein anderer, kommerzieller Compiler eine Testsuite hat, die 
auch nur im Entferntesten an die Abdeckung des GCC heranreicht.

Das einzige, was man sich mit dem Zertifikat erkauft, ist ein Stück 
Klopapier über die QS-Prozesse. Und die sind in der Industrie praktisch 
ausnahmslos genauso erstunken und erlogen, wie Sicherheitsbewertungen 
nach EN61508 und so weiter.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jörg M. schrieb:
> Warum baut ihr keine perfekte Programmiersprache statt zu meckern?

Leider hat Apple/Claris die Sourcen für HyperCard/Hypertalk nie 
veröffentlicht (Zeit wärs ja, die Jungs habens nie weiterentwickelt). 
Deswegen bleibt einem nur der Mainstream :-P

von Kaj (Gast)


Lesenswert?


von Nop (Gast)


Lesenswert?

Nase schrieb:
> Formal sicher richtig, praktisch aber lächerlich.

Würde ich so nicht sagen, denn GCC betont in der Lizenz ausdrücklich, 
daß sie nicht zusichern, daß das Programm für irgendeinen konkreten 
Einsatzzweck geeignet ist.

Dazu kommt, daß man bei GCC keinen Support hat. Man kann nicht mal eben 
aufgrund eines Wartungsvertrages wen anrufen und am selben Tag eine 
Antwort erwarten. Sich das im Ernstfall zu Entwickler-Stundensätzen 
zusammenzugooglen wird sehr schnell sehr teuer, zumal Projektverzug noch 
weitere Folgen haben kann.

Für privat nutze ich GCC aber auch gerne. Wenn ich da herumsuchen muß, 
ist das aber auch meine Freizeit, und mich interessiert's halt auch 
einfach. Ob meine Privatprojekte nun heute, morgen oder nächstes Quartal 
fertigwerden, ist auch egal.

Das wäre bei FreePascal aber alles ganz genauso. Nur, was man hier auch 
mal sehen muß - sowohl Pascal als auch C sind prozedurale Sprachen. Klar 
finde ich C besser, bin ja von Pascal zu C gewechselt und wollte nie 
mehr zurück. Aber beide spielen in derselben Liga. C ist nur 
praxisrelevanter, allein wenn man sich z.B. die verfügbaren RTOS 
ansieht, die meistens in C daherkommen.

Sie teilen aber als prozedurale Sprachen auch dieselben Begrenzungen, 
weil der Programmablauf sequentiell ist. Multithreading verlangt da 
schon Handarbeit, und vom verteilten Rechnen mal ganz zu schweigen. Da 
tut sich auch OOP sehr schwer. Gegen Fehler wie race conditions sind die 
üblichen C-Pointerfehler ja noch harmlos.


Kaj schrieb:
> Lisp :)

Eher der hier: https://xkcd.com/224/ ^^

Wobei LISP sich genau deswegen nie durchgesetzt hat und es auch nicht 
wird, weil man zwar alles draus machen kann, aber keine Grundstruktur 
hingestellt bekommt. Demzufolge gibt es kein LISP-Ökosystem, sondern 
jeder LISP-Hacker macht sein eigenes Ding.

von Nase (Gast)


Lesenswert?

Nop schrieb:
> Würde ich so nicht sagen, denn GCC betont in der Lizenz ausdrücklich,
> daß sie nicht zusichern, daß das Programm für irgendeinen konkreten
> Einsatzzweck geeignet ist.
Das war auch eher umgekehrt gedacht: Glaubst du, dass kommerzielle 
Compiler irgendwie besser sind? Eher nicht. Eher im Gegenteil: Sie 
sichern etwas zu, was sie garnicht können...

Nop schrieb:
> Dazu kommt, daß man bei GCC keinen Support hat. Man kann nicht mal eben
> aufgrund eines Wartungsvertrages wen anrufen und am selben Tag eine
> Antwort erwarten.
Hat dir das schonmal geholfen? Fairerweise jetzt mal bezogen auf 
Compiler. Erfahrungsgemäß debuggt man doch als Anwender zuerstmal 
tagelang, bis man tatsächlich beim Tool (Compiler...) angekommen ist ;-)

von Nop (Gast)


Lesenswert?

Nase schrieb:

> Das war auch eher umgekehrt gedacht: Glaubst du, dass kommerzielle
> Compiler irgendwie besser sind? Eher nicht. Eher im Gegenteil: Sie
> sichern etwas zu, was sie garnicht können...

Sie gehen aber auch mehr Verpflichtungen ein. Der Haftungsausschluß der 
GPL ist nach deutschem Recht in dieser Vollständigkeit ohnehin ungültig, 
weswegen er ja auch einschränkt auf die rechtliche Zulässigkeit. Aber 
bei kostenloser Abgabe ist da kaum mehr Vorsatz abgedeckt. Bezahlt man 
Geld, sieht es halt anders aus - allein die Bezahlung läßt die Haftung 
schon deutlich weitergehen.

> Hat dir das schonmal geholfen? Fairerweise jetzt mal bezogen auf
> Compiler.

Mir selber noch nicht. Allerdings sind die Foren voll von Threads "GCC 
macht komische Sachen", die meistens nicht am GCC liegen. Wann und ob 
man eine brauchbare Antwort bekommt, ist halt Glückssache. Kommerziell 
kann man das mit einem Supportvertrag regeln.


MaWin. schrieb im Beitrag #4784487:
> So ein Unsinn. Es gibt viele Firmen, die Compiler auf GCC-Basis anbieten
> und den Support dazu.

Installsupport mit Sicherheit. Beratung auch. Ob sie aber im Ernstfall 
auch haftbar gemacht werden können, hängt doch sehr davon ab, was genau 
denn verkauft wurde. Wenn es nur der Support ist, nicht aber das Produkt 
selber, dann ist das eben was anderes, als wenn das Produkt selber 
verkauft wurde. Vom Produktverkauf können sie aber nicht leben, weil sie 
jedem Kunden auch die Sourcen mitsamt Buildscripten aushändigen müssen, 
und jeder darf das online stellen zum Gratisdownload. Da ergibt sich 
kein Geschäftsmodell für das Produkt selber.

Das Produkt selber ist aber für ernsthafte Sachen AUCH untauglich, weil 
die GCC-Truppe fest im Lager der language lawyers verankert sind. Siehe 
Torvalds entsprechende Rants. Die scheren sich nicht darum, was mit den 
"Kunden" ist, die ja eh kein Geld bezahlen, sondern dafür, den Standard 
striktestmöglich auszulegen, so daß sie damit gerade noch durchkommen. 
Egal wieviel Bestandscode zerbricht. Die Schuldzuweisung ist natürlich 
korrekt, daß der Code selber halt nicht konform ist, aber das hilft den 
Kunden nicht. Ebensowenig, daß die Lizenz klar sagt "take as is".

Dieses Spiel könnte sich eine Firma wie Keil nicht erlauben, weil die 
Kunden eine neue Version dann einfach nicht kaufen würden. Davon lebt 
Keil aber. Die Interessenlage ist somit eine deutlich andere - und eine, 
die ich für professionelle Entwicklung bevorzuge.

von Hä??? (Gast)


Lesenswert?

Für jeden Zweck gibt es ein passendes Werkzeug. Die Frage ist, ob man 
effizient und geschickt damit umgehen kann. Auf einem Klavier kann man 
beispielsweise auch nicht Gitarre spielen (und wenn, dann nur mit sehr 
großem Aufwand ;-) ). Aber warum gibt es eigentlich keine guten 
Instrumente? Man muss immer alles von Hand machen! So ein Mist aber 
auch!

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

Nop schrieb:
> Multithreading verlangt da
> schon Handarbeit, und vom verteilten Rechnen mal ganz zu schweigen. Da
> tut sich auch OOP sehr schwer.

multitherading: OpenMP
ein paar pragmas verteilen und schon löpp dat, krieg sogar ich hin
verteiltes Rechnen: OpenMPI

(effizient geht dann aber anders ;-) )

aber nur für C/C++
bei Pascal gibts das nicht, da gibts nur die TThread-Handarbeit

von A. S. (Gast)


Lesenswert?

Mike B. schrieb:
>> "if ((ptr != NULL) && (*ptr == Bla))"
> um sowas logisch fehlerfrei beisammen zu tippen braucht man 1 Jahr
> für Pascal reicht es 2x if-then-else logisch zusammen zu kriegen
>
> glücklicherweise gibt es Hochsprachen, die in annähernd menschlicher
> Sprache zu bearbeiten sind
> ansonsten könnten wir gleich asm oder hex da reinhämmern

Als allererste Sprache im ersten Jahr ist Pascal ja OK. Aber frag Dich 
mal, warum mathematische Formeln kompakt dargestellt werden. Oder Noten. 
Wenn Du "if (ptr && *ptr == Bla)" einmal kennst, kannst Du Code viel 
schneller erfassen.

Sobald Du mit Programmierung Geld verdienst, zählt Produktivität. Da ist 
es egal, ob es im ersten Jahr ein bisschen einfacher war. Und es geht 
ausdrücklich nicht um die gesparte Zeit fürs Tippen (die liegt bei 
wenigen Minuten am Tag), sondern fürs erfassen.

Und der Vergleich mit asm oder hex ist doch einfach Quatsch. Was soll 
das?

von Flitzpiep (Gast)


Lesenswert?

Torsten C. (torsten_c) schrieb:
> Aha. Naja, in C# .Net geht das eh nicht ohne (ptr != null).

Jein; kommt auf den Kontext an.

string s = null;

if (s?.Length == 3)
{
  ...

entspricht

if (s != null && s.Length == 3)
{
  ...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Nop schrieb:
> Dazu kommt, daß man bei GCC keinen Support hat. Man kann nicht mal eben
> aufgrund eines Wartungsvertrages wen anrufen und am selben Tag eine
> Antwort erwarten. Sich das im Ernstfall zu Entwickler-Stundensätzen
> zusammenzugooglen wird sehr schnell sehr teuer, zumal Projektverzug noch
> weitere Folgen haben kann.

Der nop hat mal wieder keine Ahnung.
Schonmal mit dem IAR Support zu tun gehabt?
Weil die nicht zu Potte kamen hats schonmal eines meiner Projekte 
verzögert.
Da ist es mir lieber was zum GCC zusammenzugoogeln.

Und GCC Supportfirmen gibts wie Sand am Meer, musst nur mal gidf.de 
aufrufen.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Flitzpiep schrieb:
> Jein; kommt auf den Kontext an.

Klar, der oben genannte Kontext wäre aber:
string s = null;
if (s? == "Bla") ...

Das geht eben nicht.

Aber es ginge mit (s?.ToString() == "Bla")

Aber ob das wirkich besser ist?!

von Yalu X. (yalu) (Moderator)


Lesenswert?

Nop schrieb:
> Bleibt FreePascal, u.a. weil OSS, wodurch man das jederzeit warten kann,
> falls nötig. Gibt's da eigentlich einen offiziellen Standard, oder ist
> seit ISO-Pascal weiterhin nur fröhliches Gefrickel einzelner
> Compilerprojekte angesagt wie zu Zeiten von Turbo-Pascal?

Es gab einen ISO-Working-Draft "Object-Oriented Extensions to Pascal"
von 1993.

  http://www.pascal-central.com/OOE-stds.html

Der verlief aber mangels Interesse im Sande. Die heutigen Object-Pascals
haben damit ziemlich wenig gemein. Der heutige De-Facto-Standard ist
Delphi, an dem sich auch Free Pascal orientiert, und andere Compiler für
objektorientiertes Pascal gibt es ja nicht (mehr).

> Ach ja, und es ist natürlich auch ein Performanceproblem, wenn die
> Reihenfolge der Auswertung nicht definiert ist.

Free Pascal macht – entgegen der ISO-Norm – Short-Circuit-Evaluation,
was aber abschaltbar ist. Eigentlich gäbe es in Extended Pascal  nach
ISO 10206) zusätzlich zum normalen "and" und "or" die Operatoren "and
then" und "or else", so dass man beide Auswerteprinzipien gleichzeitig
zur Verfügung hat.

Aber wie alle Bestrebungen, ein einheitliches Pascal zu schaffen, wurde
auch ISO 10206 weitgehend ignoriert. Eine Ausnahme ist GNU Pascal, das
weitgehend die offiziellen Normen umsetzt. Dafür wurde aber GNU Pascal
ignoriert und dessen Entwicklung deswegen schließlich eingestellt.

von Flitzpiep (Gast)


Lesenswert?

Torsten C. schrieb:
> Flitzpiep schrieb:
>> Jein; kommt auf den Kontext an.
>
> Klar, der oben genannte Kontext wäre aber:
> string s = null;
> if (s? == "Bla") ...
>
> Das geht eben nicht.
>
> Aber es ginge mit (s?.ToString() == "Bla")

oder

if (s?.Equals("Bla") ?? false)
      {
>>> Aha. Naja, in C# .Net geht das eh nicht ohne (ptr != null).

Ist also gleich doppelt widerlegt.

> Aber ob das wirkich besser ist?!

Nein, beides nicht. Also diesbezüglich das "(N)ein" von "Jein". ;)

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Flitzpiep schrieb:
> Ist also gleich doppelt widerlegt.
Herzlichen Glückwunsch!

von Zeno (Gast)


Lesenswert?

Nop schrieb:
> Wo man in C Idiome wie "if ((ptr != NULL) && (*ptr == Bla))" machen
> kann, hat man in Pascal schonmal zwei Blockebenen.

Schon mal was von {$B+} und {$B-} gehört? Wahrscheinlich noch nicht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Zeno schrieb:

> Schon mal was von {$B+} und {$B-} gehört? Wahrscheinlich noch nicht.

In welchem Standard ist das dokumentiert? ;-)

von Sebastian S. (amateur)


Lesenswert?

Wenn Du eine wirklich gute Programmiersprache brauchst, die alle Deine 
Wünsche erfüllt, so schreib' sie Dir selber.

Wundere Dich aber nicht wenn, außer Dir, alle anderen NICHT Deiner 
Meinung sind.

Darüber hinaus bin ich der Meinung, dass es keine "beste" 
Programmiersprache gibt.

Wie schon von anderen gesagt gibt es für verschiedene Anwendungsziele 
verschiedene besser oder schlechter geeignete Sprachen.

Darüber hinaus gibt es noch die Sprache, mit der der einzelne am besten 
zurechtkommt und im Zweifelsfalle die auch besten Ergebnisse erreicht. 
Hier besteht allerdings die Gefahr, dass mit einer Sprache, die als 
völlig ungeeignet angesehen wird, die besten Ergebnisse erzielt 
werden;-)

von Christopher C. (trihexagon)


Lesenswert?

Nop schrieb:
> Mag aber kompensiert werden,
> weil man dafür in FreePascal keine Aliasingprobleme hat, wenn man nicht
> mit Pointern loslegt.

Keine Ahnung wie du darauf kommst. Es lassen sich doch problemlos zwei 
Referenzen auf dasselbe Objekt erzeugen? Das ist Aliasing. Die einzige 
Sprache, die ich kenne, die sowas verbietet ist Rust (wenn mutable). 
Aber da war doch irgendwas mit Fortran, wenn ich mich recht erinnere.

Nop schrieb:
> Nase schrieb:
>
>> Das war auch eher umgekehrt gedacht: Glaubst du, dass kommerzielle
>> Compiler irgendwie besser sind? Eher nicht. Eher im Gegenteil: Sie
>> sichern etwas zu, was sie garnicht können...
>
> Sie gehen aber auch mehr Verpflichtungen ein. Der Haftungsausschluß der
> GPL ist nach deutschem Recht in dieser Vollständigkeit ohnehin ungültig,
> weswegen er ja auch einschränkt auf die rechtliche Zulässigkeit. Aber
> bei kostenloser Abgabe ist da kaum mehr Vorsatz abgedeckt. Bezahlt man
> Geld, sieht es halt anders aus - allein die Bezahlung läßt die Haftung
> schon deutlich weitergehen.

Dann schau mal schnell in die EULAs sämtlicher kommerzieller Software, 
einschließlich Kompiler. Da haftet niemand, aber zahlen darf man immer 
und zwar kräftig.

BTW wenn du dem GCC solch ein großes Misstrauen begegnest, solltest du 
gehörig aufpassen. Es gibt da eine Menge Geräte im Medizin- und 
Sicherheitsbereich auf Linux RT Basis, natürlich gebaut mit GCC.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Die Frage nach der besten Programmiersprache würde sich vielleicht gar 
nicht stellen, wenn am Ende eh immer das gleiche heraus käme, egal, 
welche Programmiersprache benutzt wurde.

Also so ähnlich wie bei einer 'portable code machine'.

Kann man z.B. VHDL oder lisp eigentlich nach p-code 'compilieren'?

PS: Die Frage wäre dann: "Wieso gibt es keine gute p-code-Spec?"

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

Mike B. schrieb:
> ein paar pragmas verteilen und schon löpp dat, krieg sogar ich hin

Das ist die Trivialvariante, ein paar Schleifen parallelisieren. Es ist 
aber wesentlich härter, Algorithmen so zu bauen, daß sie vernünftig 
skalieren.

Mal als Beispiel - Schach scheint gut parallelisierbar, ist es aber 
nicht. Da haben sehr schlaue Leute eine Menge Hirnschmalz investiert. 
Das Problem ist, daß im Suchbaum bei halbwegs naivem Herangehen sehr 
viele Sachen doppelt berechnet werden, die mit nur einem Thread eben nur 
einmal berechnet würden. Deswegen ist die Beschleunigung nicht linear. 
Und mit naivem Herangehen kriegt man allenfalls bis zu 4 Kernen etwas 
raus, ab 8 Kernen nicht mehr, und deutlich darüber frißt der Overhead 
die zusätzlichen Kerne mehr als auf.

Tja, und das machen die tatsächlich alles zu Fuß in C oder C++, 
jedenfalls bei wirklich guten Programmen. Mit dem Ansatz wäre Googles 
Alpha-Go auf zig Servern gar nicht erst realisierbar gewesen, denn wenn 
kein geteilter Speicher da ist, wird das alles noch viel schlimmer.

von Nop (Gast)


Lesenswert?

Sebastian S. schrieb:
> Wenn Du eine wirklich gute Programmiersprache brauchst, die alle Deine
> Wünsche erfüllt, so schreib' sie Dir selber.

Das hat man in LISP ja schon. In jedem einzelnen Projekt, was der Grund 
ist, wieso es geflopt ist.


Christopher C. schrieb:
> Keine Ahnung wie du darauf kommst. Es lassen sich doch problemlos zwei
> Referenzen auf dasselbe Objekt erzeugen?

Das kann der Compiler dann aber auch sehen. Etwa, wenn man an dieselbe 
Funktion zweimal dieselbe Variable by reference übergibt. Für sowas wie 
void* oder char*, was alles und jeden aliasen darf, muß man sich in 
Pascal schon sehr anstrengen.

> Dann schau mal schnell in die EULAs sämtlicher kommerzieller Software,
> einschließlich Kompiler. Da haftet niemand

EULAs sind rechtlich irrelevant. Da kann man viel reinschmieren, wenn 
der Tag lang ist. Ein weitverbreitetes Mißverständnis bei Softwarefirmen 
ist, daß EULAs geeignet sind, um die Gesetzeslage auszuhebeln.

von Nop (Gast)


Lesenswert?

Mw E. schrieb:
> Schonmal mit dem IAR Support zu tun gehabt?
> Weil die nicht zu Potte kamen hats schonmal eines meiner Projekte
> verzögert.

Die Defizite Deiner Rechtsabteilung sind ja nun nicht mein Problem.

von S. R. (svenska)


Lesenswert?

Torsten C. schrieb:
> Die Frage nach der besten Programmiersprache würde sich vielleicht
> gar nicht stellen, wenn am Ende eh immer das gleiche heraus käme,
> egal, welche Programmiersprache benutzt wurde.

Dann sollte man das Object-Format (neben ABI, Calling-Convention und 
Name Mangling) standardisieren, aber nicht die Architektur.

Relevant wäre doch nur, dass ich die Ergebnisse von einem LISP-Compiler, 
einem C-Compiler und einem Pascal-Compiler zu einem auch noch debugbaren 
Programm verkleben könnte.

> Also so ähnlich wie bei einer 'portable code machine'.
> PS: Die Frage wäre dann: "Wieso gibt es keine gute p-code-Spec?"

Java ist meines Wissens gut spezifiziert, und bezahlt dies mit nur 
mäßiger Performance (und komplizierten JVMs).

Warum muss es portabel mit AVR sein, wenn es am Ende ohnehin nur auf 
ARM64 läuft? In Sachen Performance gibt es da nur wenig 
Überschneidungen: Was auf ARM64 schnell ist, ist auf AVR langsam /und 
umgekehrt/.

Willst du das wirklich?

> Kann man z.B. VHDL oder lisp eigentlich nach p-code 'compilieren'?

FreeHDL "kompiliert" VHDL zu C++, während GHDL direkt als GCC-Frontend 
implementiert ist und direkt Object-Files erstellt. GCL erzeugt 
Object-Files aus LISP-Code.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

S. R. schrieb:
> Was auf ARM64 schnell ist, ist auf AVR langsam /und
> umgekehrt/.

Wenn der p-code gut ist, dann holt er überall raus, was rauszuholen ist.

Es muss ja kein JIT-Compiler sein.
Es könnte aus p-code ja auch ASM erzeugt werden.

> Willst du das wirklich?

Interessante Frage. Vielleicht?
Falls es gut funktioniert, warum nicht?

von Nase (Gast)


Lesenswert?

Nop schrieb:
> ieses Spiel könnte sich eine Firma wie Keil nicht erlauben, weil die
> Kunden eine neue Version dann einfach nicht kaufen würden. Davon lebt
> Keil aber.
Das ist ungefähr so, wie damals der "Browserwar" gerechtfertigt wurde.
Anstatt dass die Leute sich Gedanken darüber machen, dass vielleicht 
wirklich ihr Quelltext semantische Fehler hat, wird solange am Tool 
herumgebastelt, bis es wieder irgendwie kompiliert.

Ich kenne das doch aus eigener Erfahrung aus der Industrie: Keine Sau 
hat eine Vorstellung davon, was 'volatile' in C bedeutet und wie es sich 
auf Multitasking auswirkt. Ergebnis: Man schaltet einfach ein paar 
Optimierungen des Compilers ab und verbaut einen schnelleren Prozessor.

Dass solche Programme semantisch einfach falsch geschrieben sind und der 
Compiler sie deshalb normalerweise großflächig wegoptimiert, realisiert 
doch niemand.

Nop schrieb:
> Sie gehen aber auch mehr Verpflichtungen ein.
Welche Verpflichtungen denn? Gehen sie mit dir pleite und in den Knast, 
wenn deine Herzlungenmaschine versagt? Oder war die Risikobewertung doch 
nicht ganz wasserdicht?
Support - ja, Haftung...?

Zertifizierte Software ist Augenwischerei.

von Nop (Gast)


Lesenswert?

Torsten C. schrieb:
> Die Frage nach der besten Programmiersprache würde sich vielleicht gar
> nicht stellen, wenn am Ende eh immer das gleiche heraus käme, egal,
> welche Programmiersprache benutzt wurde.

Doch, würde sie. Am Beispiel von Assembler und C: Der Output eines 
C-Compilers war sogar wesentlich schlechter als handprogrammierter 
Assembler, als C erfunden wurde. Das war auch nicht der Grund, wieso man 
Hochsprachen erfunden hat.

Es geht zentral dabei doch darum, wie leicht man in einer Sprache ein 
konkretes Vorhaben umsetzen kann. Weil auch die Entwicklungszeit wichtig 
ist.

In C hat man sehr direkten Zugriff auf die Hardware, weswegen es für 
hardwarenahe Programmierung und Systemprogrammierung super ist. Man muß 
sich aus demselben Grund aber auch um alles kümmern, weswegen das für 
große Applikationen nicht so toll ist. C++ versucht, auf allen 
Hochzeiten zu tanzen und wird zusehends unübersichtlich.

Man kann sagen, was man will, aber der wirkliche Knaller in der 
Produktivität seit C war nicht etwa OOP (ausgenommen GUIs und 
Simulationen), sondern vor allem automatisches Speichermanagement.

Wenn man Algorithmen haben will, in denen man tausende Server 
zusammenschalten und wegschalten kann, dann ist auch MPI einfach keine 
brauchbare Option mehr. Man muß sich zuviel auf das Wie konzentrieren 
und kommt nicht mehr zum Was, und die Bugrate sieht entsprechend aus. 
Zumal es auch nicht die Frage ist, ob man damit 80% oder 90% rausholt, 
sondern ob die Skalierung so ist, daß man ÜBERHAUPT mit tausenden 
Servern gleichzeitig etwas bearbeiten kann.

Dafür lohnt es sich auch, was Neues zu machen.

Ansonsten wird es für hardwarenahe Programmierung in absehbarer Zeit 
nichts Besseres als C/C++ geben, was sich auch durchsetzt, weil es dafür 
nicht relevant ist, ob das Neue "schöner" oder "sauberer" ist. Oftmals 
ist "gut genug" ausreichend, so daß ein "besser" nicht angenommen wird.

Entscheidend sind zwei Faktoren:
a) wie groß ist der bestehende Leidensdruck?
b) wie groß sind die Umstiegskosten? (Aufgabe bestehender Ökosysteme, 
Aufgabe unzähliger Source-Sammlungen, Neuentwicklung von Software - die 
die Kunden nicht bezahlen werden, nur weil die Programmiersprache cooler 
ist)

Sieht man sich den Sprung von Assembler zu C an, wird unmittelbar klar, 
wieso das akzeptiert wurde, speziell weil die Rechner und damit auch die 
Software immer größer wurden. Cross-Platform wäre in Assembler gar nicht 
möglich. Ausnutzen von neuen Prozessor-Features hieße nicht 
recompilieren, sondern neu programmieren.

Sieht man sich den Sprung von C zu einer ähnlich positionierten, aber 
"saubereren" Sprache an, dann ist der Leidensdruck nicht hoch 
(Hobbyisten mit C-Allergie sind schlichtweg nicht relevant), die Kosten 
aber schon.

Was stattdessen geht, ist die Kombination aus C und Scriptsprachen wie 
Python. C für die geschwindigkeitskritischen Sachen, Python mitsamt dem 
automatischen Speichermanagement für den Rest. Das ergibt Sinn, weil der 
Leidensdruck da nicht heißt "C ist sooo häßlich mimimi", sondern "C 
erfordert manuelles Speichermanagement, Python nicht". Für Python gibt 
es ein großes Ökosystem, also Software ist auch reichlich da. Daß 
Einrückungen in Python relevant sind, halten etliche (ich auch) für 
schlecht, ändert aber nichts.

Sieht man sich den Krampf von C für GUIs an, ist auch klar, wieso man zu 
OOP kam. Naja, und sieht man sich den Krampf von C/C++ bei massiv 
parallelem verteilten Rechnen an, dann ist auch klar, daß hier ein 
ernsthafter Bedarf bestehen kann.

von Nop (Gast)


Lesenswert?

Nase schrieb:
> Anstatt dass die Leute sich Gedanken darüber machen, dass vielleicht
> wirklich ihr Quelltext semantische Fehler hat, wird solange am Tool
> herumgebastelt, bis es wieder irgendwie kompiliert.

Das ist genau das Blameshifting der GCC-Crew. Ja, das ist sachlich 
völlig korrekt. Nein, die Kunden interessiert das nicht. Und zum Thema 
Aliasing hat Torvalds ja schon einiges gesagt.

Angeblich wegen Performance, so die GCC-Leute, war strict-aliasing auf 
einmal default. Daten haben sie aber keine vorgelegt, die diesen Schritt 
gerechtfertigt hätten. Weil es language lawyers sind, die sich nicht für 
das Ergebnis interessieren. Außer wenn es Benchmarks zerbricht, DANN auf 
einmal stellen sie sich nicht hin und sagen "nanana, der Standard sagt 
aber, wir dürfen, und Ihr seid Schuld". Nein, dann auf einmal wird der 
Compiler so hingebaut, daß Specint wieder läuft, trotz undefiniertem 
Verhalten.

Guckst Du hier: http://blog.regehr.org/archives/918

Nur: kommerziellen Firmen sind ihre Kunden ebensowichtig den GCC-Leuten 
die Benchmarks. Als Kunde ist klar, was vorzuziehen ist.

Übrigens teste ich gerne mit strict-aliasing aktiv. Aber wenn 
Performance-Messungen da keinen deutlichen Gewinn gegenüber 
no-strict-aliasing ergeben, dann schalte ich es ab. In einer ziemlich 
pointer-intensiven Anwendung konnte ich übrigens keinerlei Zugewinn 
durch strict-aliasing messen.

von Nase (Gast)


Lesenswert?

Nop schrieb:
> Das ist genau das Blameshifting der GCC-Crew. Ja, das ist sachlich
> völlig korrekt.
Das ist nicht nur sachlich korrekt, sondern in vielen Fällen die einzige 
Möglichkeit, aus dem Dilemma zu kommen.

Was soll man denn machen, wenn zig verschiedene Leute jeweils "ihren" 
fehlerhaften Quelltext übersetzen wollen und dabei "ihr" liebstes 
Resultat erhalten möchten?

von Max S. (maximus-minimus)


Lesenswert?

Was Du suchst ist Pascal, schau Dir mal Lazarus an

von Nop (Gast)


Lesenswert?

Nase schrieb:
> Das ist nicht nur sachlich korrekt, sondern in vielen Fällen die einzige
> Möglichkeit, aus dem Dilemma zu kommen.

Wie gesagt - diese harte Tour fahren die GCC-Leute nur gegenüber 
Nutzern. Bei Benchmarks legen sie aber dann eine 180-Grad-Wendung hin 
und passen den Compiler an den Bestandscode an. Kommerzielle Firmen 
verhalten sich gegenüber zahlenden Kunden so wie GCC zu Benchmarks.

Und nein, es ist oftmals schlichtweg praktisch nicht möglich, aus dem 
Dilemma rauszukommen, indem man bestehende Codebasen ändert. Deswegen 
compiliert der Linuxkernel mit no-strict-aliasing, und für Release 
empfehle ich das auch - jedenfalls solange nicht Meßdaten eindeutig 
einen massiven Vorteil von -strict-alising im konkreten Fall belegen. 
Was sie in den allermeisten Fällen schlichtweg nicht tun.

von S. R. (svenska)


Lesenswert?

Torsten C. schrieb:
>> Was auf ARM64 schnell ist, ist auf AVR langsam /und
>> umgekehrt/.
> Wenn der p-code gut ist, dann holt er überall raus, was rauszuholen ist.

Das ist prinzipbedingt unmöglich. Schaue dir die üblichen 
Programmierstile für AVR und x86 an und du weißt, warum.

> Es muss ja kein JIT-Compiler sein.
> Es könnte aus p-code ja auch ASM erzeugt werden.

Genau das tut ein JIT ja.

>> Willst du das wirklich?
>
> Interessante Frage. Vielleicht?
> Falls es gut funktioniert, warum nicht?

Dann nimm Java, da bist du nah genug dran.

von Pandur S. (jetztnicht)


Lesenswert?

Lassen wir doch die Portierglaeubigen, die ihren Code auf irgendwelchen 
Plattformen zwischen ATTiny und Quadcore 64 Bit hin und her portieren 
wollen etwas weitertraeumen. Ich denk die haben genausowenig etwas 
portiert wie ich.
Fuer mich ist ein Projekt zusammen mit der Hardware und dem Compiler, 
sowie dessen Version eingefroren. Ich portiere nicht mal von Compiler 
Version 7 nach Version 8. Neue Projekte werden mit der aktuellen Version 
des Compilers begonnen, und bleiben auf dieser Version.
Vielleicht wird ein Teil ruebergezogen, wird dann aber angepasst. 
Zurueck geht's nicht mehr, Ist weder geplant, noch macht es Sinn.

von Nop (Gast)


Lesenswert?

Oh D. schrieb:
> Ich denk die haben genausowenig etwas
> portiert wie ich.

Doch, zwischen x86 und Cortex-M. x86 als test bed für die business 
logic, weil es sich wesentlich leichter testen und debuggen läßt. 
Weiterer Vorteil ist, daß so ein Vorgehen automatisch ein sauberes 
Kapseln der Abhängigkeiten von Hardware und Betriebssystem erzwingt.

von (prx) A. K. (prx)


Lesenswert?

Christopher C. schrieb:
> Dann schau mal schnell in die EULAs sämtlicher kommerzieller Software,
> einschließlich Kompiler.

Beim Konflikt zwischen Haftungsausschluss und Lizenzbedingungen und dem 
deutschem Recht dürfte es um sowas wie Haftung bei Vorsatz gehen.

von Nop (Gast)


Lesenswert?

A. K. schrieb:
> Christopher C. schrieb:
>> Dann schau mal schnell in die EULAs sämtlicher kommerzieller Software,
>> einschließlich Kompiler.
>
> Beim Konflikt zwischen Haftungsausschluss und Lizenzbedingungen und dem
> deutschem Recht dürfte es um sowas wie Haftung bei Vorsatz gehen.

Das sowieso, der gilt übrigens auch bei FOSS mit free wie in Bier.

Aber man kann sich aus der Produkthaftung nicht einseitig verabschieden, 
nur weil man zufällig Software herstellt. Sobald man das kommerziell 
macht, ist man da drin, egal was man in die EULA schreibt. Wenn da grobe 
Fahrlässigkeit im Spiel ist, ist man halt dran. Wäre ja noch schöner, 
wenn man per EULA Gesetze aushebeln könnte.

Das ist übrigens durchaus keine Theorie, wenn man sich mal anschaut, was 
Toyota seinerzeit mit dem Camry verzapft hat. Das war haarsträubend 
unprofessionell. Leute sind umgekommen, und weil es US-Amerikaner waren, 
wurde das für Toyota sehr teuer, denn dort ist man für grobe 
Fahrlässigkeit mit Todesfolge nicht mit einem Trinkgeld dabei.

(Quelle: 
http://embeddedgurus.com/state-space/2014/02/are-we-shooting-ourselves-in-the-foot-with-stack-overflow/ 
)

von Christopher C. (trihexagon)


Lesenswert?

A. K. schrieb:
> Christopher C. schrieb:
>> Dann schau mal schnell in die EULAs sämtlicher kommerzieller Software,
>> einschließlich Kompiler.
>
> Beim Konflikt zwischen Haftungsausschluss und Lizenzbedingungen und dem
> deutschem Recht dürfte es um sowas wie Haftung bei Vorsatz gehen.

Das ist natürlich klar, dass man bei Vorsatz belangt werden kann. Nur 
kann man einfach auf Grund von Bugs nach deutschem Recht, wohl kaum 
bestraft werden. Selbst den Juristen ist klar, dass es fehlerfreie 
Software nicht gibt (ab gewisser Komplexität). Das würde eigentlich nur 
gehen, wenn sie dir das schriftlich garantieren. Aber wer wäre so 
wahnsinnig? Das ist schlicht unkalkulierbar. Erst recht bei Kompilern 
mit praktisch unendlicher Eingabemöglichkeit.

Außerdem würde wohl so ziemlich niemand freiwillig haften. Da müsste 
man, wenns mal um richtig was geht, schon den Rechtsweg gehen. Das 
dürfte viel Zeit dauern und ordentlich Geld kosten.

von Nop (Gast)


Lesenswert?

Christopher C. schrieb:
> Nur
> kann man einfach auf Grund von Bugs nach deutschem Recht, wohl kaum
> bestraft werden.

Doch kann man - und zwar wenn die Entwicklung selber sich nicht an den 
üblichen oder gar vorgeschriebenen Stand der Technik gehalten hat, weil 
das dann keine Bugs sind, sondern grobe Fahrlässigkeit. Bei grobem 
Pfusch in regulierten Bereichen wie z.B. Luftfahrt können Leute dann 
auch durchaus in den Knast kommen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nop schrieb:
> Doch kann man - und zwar wenn die Entwicklung selber sich nicht an den
> üblichen oder gar vorgeschriebenen Stand der Technik gehalten hat, weil
> das dann keine Bugs sind, sondern grobe Fahrlässigkeit.

Aber um sowas geht's ja hier nun wirklich nicht.

Es geht eben nur darum, dass es ein Trugschluss ist, dass man, nur
weil man für einen IAR einen mittleren vierstelligen Betrag bezahlt
hat, automatisch irgendeine Garantie oder gar Haftung des Herstellers
mit bekäme.  Für diesen (durchaus stolzen) Preis bekommt man
diesbezüglich kaum mehr als für den GCC, nämlich bestenfalls eine
Zusage, dass einem der Support auch zuhört und ggf. den Bug überhaupt
erstmal aufnimmt.

Klar bekommt man von IAR auch irgendwelche Varianten mit einer
Garantie, Probleme innerhalb eines bestimmten Zeitraums zu beheben,
aber das kostet dann nochmal eine Stange mehr.

von Nop (Gast)


Lesenswert?

Jörg W. schrieb:
> Es geht eben nur darum, dass es ein Trugschluss ist, dass man, nur
> weil man für einen IAR einen mittleren vierstelligen Betrag bezahlt
> hat, automatisch irgendeine Garantie oder gar Haftung des Herstellers
> mit bekäme.

Ein Trugschluß ist eher der verbreitete Glaube, bei Software ließen sich 
per EULA sämtliche Gesetze aushebeln, Produkthaftung gelte nicht mehr, 
und man könne ohnehin machen, was man will. Und selbstverständlich kommt 
automatisch eine Gewährleistung (!) mit dem Kauf - genau wie bei jedem 
anderen gekauften Produkt.

Leute, wenn Ihr jede Software akzeptiert, weil Software halt buggy ist 
und man ja eh nichts machen kann, dann liegt der Fehler klar bei Eurer 
Rechtsabteilung.

Bei einem finanziell gesehen verschenkten GCC gibt es keine 
Gewährleistung, weil es keinen Vertrag gibt, den man notfalls mindern 
oder wandeln kann. Produkthaftung beschränkt sich bei geschenkter 
Software auch auf allenfalls Vorsatz (z.B. eingebaute Malware). Man hat 
dementsprechend auch kein "Druckmittel", um schnell einen Fix zu 
kriegen.

Niemand verwendet kommerziell in sensiblen Bereichen GCC.

Was anderes ist es natürlich für Geräte, die sowieso unter embedded 
Linux laufen - wenn das fürs Produkt denn zulässig ist, dann nimmt man 
natürlich auch gleich GCC, weil es halt zusammenpaßt. Oder für Projekte, 
die ohnehin Opensource sein sollen. Da ergibt es kaum Sinn, zwar die 
Sourcen zu öffnen, aber mit Keil/IAR eine Paywall vor den Build zu 
setzen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nop schrieb:
> Und selbstverständlich kommt automatisch eine Gewährleistung (!) mit dem
> Kauf - genau wie bei jedem anderen gekauften Produkt.

Und?  Die gewährleistet dir, dass das Ding überhaupt benutzbar ist.

Trotzdem kann es für genau deinen Anwendungsfall einen Bug haben.

Einen konkreten Bug bekommst du ja auch akzeptiert, aber eben ohne
das Versprechen, bis wann der repariert sein wird.  Die reparierte
Version bekommst du dann schon noch, und das ist alles, was du aus
dem Gewährleistungsanspruch erwarten kannst.

von Nase (Gast)


Lesenswert?

Nop schrieb:
> Ein Trugschluß ist eher der verbreitete Glaube, bei Software ließen sich
> per EULA sämtliche Gesetze aushebeln, Produkthaftung gelte nicht mehr,
> und man könne ohnehin machen, was man will. Und selbstverständlich kommt
> automatisch eine Gewährleistung (!) mit dem Kauf - genau wie bei jedem
> anderen gekauften Produkt.
Hast du diese zugegebenermaßen doch naive Kausalkette denn mal in der 
Praxis erlebt?
Praktisch macht nämlich der kommerzielle Compiler-Hersteller mit teurem 
Support-Vertrag nämlich genau eines, wenn ihm wirklich einmal ernsthaft 
ans Bein gepinkelt werden soll: Er betreibt Blameshifting bis zum 
abkratzen, um dir als Kunden irgendeinen Verstoß gegen den - 
Trommelwirbel - C-Standard nachzuweisen, am liebsten natürlich mit 
undefined behaviour.
Das macht er nämlich viel lieber, als horrende Strafen zu bezahlen. In 
dem Moment scheißt der auf dich als Kunden genauso, wie es jeder 
popelige Handwerksbetrieb in der freien Wirtschaft tun würde.

Nop schrieb:
> Niemand verwendet kommerziell in sensiblen Bereichen GCC.
Dem kann ich widersprechen.
Ich kann weiters bestätigen, dass viel beschissenere Compiler in viel 
sensibleren Bereichen verwendet werden. Meistens dann auch noch in 
steinmurmelalten Versionen inklusive aller ungefixten Bugs, weil ein 
Update schweineteuer ist.
Ich kann außerdem bestätigen, dass das Niveau, auf dem in der Industrie 
programmiert wird, um Lichtjahre unterirdischer ist, als das, auf dem 
üblicherweise Open Source betrieben wird.

Wach mal auf. Deine ideale Argumentation spricht mir aus der Seele. Die 
Praxis ist frustrierend. Und das habe ich mindestens bis SIL2 erlebt.

von Nop (Gast)


Lesenswert?

Jörg W. schrieb:
> Einen konkreten Bug bekommst du ja auch akzeptiert, aber eben ohne
> das Versprechen, bis wann der repariert sein wird.  Die reparierte
> Version bekommst du dann schon noch, und das ist alles, was du aus
> dem Gewährleistungsanspruch erwarten kannst.

Das stimmt nicht. Gewährleistung heißt nicht, daß der Händler (!) 
beliebig viel Zeit hätte. Frist setzen, evtl. Nachfrist setzen, 
Rücktritt. Mit "wird irgendwann repariert" braucht sich kein Kunde 
zufriedenzugeben.

Das würdest Du bei einem Autokauf auch nicht akzeptieren, und anders als 
manche Softwarefirmen das denken, gelten für Software keine 
Sondergesetze. Auch die EULAs entfalten keinen Gesetzesrang - und sind 
ohnehin nichtig, wenn man die erst NACH dem Kauf zu lesen bekommt.

Zumal bei Software der Nachweis, daß der Fehler von Anfang an drin war, 
trivial ist.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Nop schrieb:
> Das stimmt nicht. Gewährleistung heißt nicht, daß der Händler (!)
> beliebig viel Zeit hätte. Frist setzen, evtl. Nachfrist setzen,
> Rücktritt. Mit "wird irgendwann repariert" braucht sich kein Kunde
> zufriedenzugeben.
>
> Das würdest Du bei einem Autokauf auch nicht akzeptieren, und anders als
> manche Softwarefirmen das denken, gelten für Software keine
> Sondergesetze. Auch die EULAs entfalten keinen Gesetzesrang - und sind
> ohnehin nichtig, wenn man die erst NACH dem Kauf zu lesen bekommt.
>
> Zumal bei Software der Nachweis, daß der Fehler von Anfang an drin war,
> trivial ist.

Das ist richtig - aber im konkreten Fall hilft einem das doch wenig.

Bis zur Behebung können mit Fristsetzung etc. gerne mal viele Wochen ins 
Land gehen.

Oder dem Compilerhersteller ist das zu lästig und er sagt einfach: "Och 
nee, hier haste Dein Geld zurück. Her mit dem Lizenzschlüssel."

Dann hat man nicht viel gewonnen, außer dass man sich zusätzlich zum 
Projektdruck auch noch einen neuen Compiler/Toolchain suchen kann.

Davon abgesehen kenne ich keinen Compilerfehler, den man nicht umgehen 
kann. Selbst wenn man also einen Fehler im GCC findet, dann sollte der 
sich umgehen lassen, bis er gefixt ist.

Das Fixen dauert vermutlich weniger lange als auf das Bugfixing eines 
Compilerherstellers zu warten. Der wird erstmal ausführlich testen und 
schauenm, bevor er da etwas ändert.

Unterstützung in Compilerfragen etc. - ja, das sehe ich ein. Dafür kann 
man sinnvoll Geld ausgeben. Aber das kann man auch beim GCC, wenn 
gewünscht.

von Nase (Gast)


Lesenswert?

Nop schrieb:
> Zumal bei Software der Nachweis, daß der Fehler von Anfang an drin war,
> trivial ist.
Dann weis doch mal nach, dass z.B. eine fehlerhafte Optimierung - um 
beim Beispiel des Compilers zu bleiben - ursächlich für dein Problem 
ist. Möglicherweise noch eine, die nur sporadisch zum Fehler in deiner 
Anwendung führt (Randwerte, vorzeichenbehaftete Arithmetik und solche 
Schmankerl).

Nop schrieb:
> Das stimmt nicht.
So läuft es aber. Versuch deine Rechte doch mal bei Microsoft 
durchzusetzen, wenn du im Business einen Bluescreen hast oder Office dir 
privat deine Arbeit zerschossen hat. Office hat damals(tm) fast 500 Euro 
gekostet.

von Nop (Gast)


Lesenswert?

Nase schrieb:
> Dann weis doch mal nach, dass z.B. eine fehlerhafte Optimierung - um
> beim Beispiel des Compilers zu bleiben - ursächlich für dein Problem
> ist.

Man sieht sich das Disassembly der betroffenen Routine an. Das ist bei 
allen Compilern der Weg, wie man Compilerfehler überhaupt nachweist. Bei 
GCC ist derlei üblicherweise in den Bugreports drin, weil die 
Compiler-Entwickler sonst nicht wissen können, was denn gefixt werden 
soll.

Das ist auch der Unterschied zu sporadischen Abstürzen von Windows. Weis 
mal nach, daß die überhaupt da sind.


Chris D. schrieb:
> Dann hat man nicht viel gewonnen, außer dass man sich zusätzlich zum
> Projektdruck auch noch einen neuen Compiler/Toolchain suchen kann.

Wie lange kann ein kommerzieller Compilerhersteller das tun? Vor allem 
in Zeiten des Internet? Bis sich die Kundenschicht schon VOR 
Projektbeginn ein andere Toolchain sucht?

Im Vergleich dazu besehe man sich die Reaktion des GCC-Teams auf 
Torvalds Rants. DAS kann sich ein kommerzieller Hersteller gegenüber 
seinen Kunden einfach nicht erlauben. Der Linuxkernel ist zwar eine der 
wichtigsten GCC-Anwendungen, aber es fließt eben kein Geld. Eine 
grundsätzliche Schwäche bei OSS-Projekten. Wer zahlt, bestellt auch die 
Musik - aber ohne Bezahlen kein Musikwunsch.

von Oliver S. (oliverso)


Lesenswert?

Nop schrieb:
> Wie lange kann ein kommerzieller Compilerhersteller das tun?

So lange, wie es Kunden gibt, die aus was für Gründen auch immer darauf 
angewiesen sind, Geld für eine Toolchain zu bezahlen.

Und alleine das "im Falle eines Falles den eigenen Arsch retten", was 
man für das Geld bekommt, sorgt dafür, daß das immer genug bleiben 
werden, egal, wie die Anbieter da mit den Kunden umgehen.

Oliver

von Nase (Gast)


Lesenswert?

Nop schrieb:
> Man sieht sich das Disassembly der betroffenen Routine an. Das ist bei
> allen Compilern der Weg, wie man Compilerfehler überhaupt nachweist.
Du schon, ich vielleicht auch. 'Man' aber gewiss nicht.

Praktisch läuft das eher so:
- Im Feld berichtet dein Kunde von einer Baugruppe (dein Produkt), die 
manchmal seltsame Dinge macht.
- Es läuft zwei Wochen durch die QS/Serviceabteilung deines 
Unternehmens, bis du davon erfährst.
- Es dauert einen Monat, die betroffene Baugruppe zu dir zu schaffen, 
damit du per Analyse Hardwarefehler ausschließen kannst.
- Du baust dir parallel dazu einen Test auf, kannst das Problem mangels 
Rahmenparameter von vor Ort aber nicht reproduzieren.
- Der Kunde meldet sich nochmals.
- Nächste Woche wird ein Vor-Ort-Termin angesetzt, damit du Fehler 
suchen kannst.
- Beim Termin vor Ort steht die Anlage gerade, macht also auch keine 
Fehler. Alternativ reißt dir der Schichtleiter den Kopf ab, wenn du die 
Anlage anhälst um dein Debug-Zeug anzuschließen.
- Du fährst wieder heim und brütest drei Tage über dem Quelltext in der 
Hoffnung, analytisch/formal etwas zu finden. Der Quelltext ist aber 
semantisch in Ordnung.
- 42: Irgendwie kriegst du den Fehler dann tatsächlich zufällig 
nachgestellt und fängst an, das (hypothetisch korrekte) Programm 
systematisch zusammenzustreichen, um irgendwie auf eine reduzierte 
Codebasis unter 5.000 Zeilen zu kommen, die den Fehler reproduziert. Bei 
jedem zweiten Versuch ist der Fehler wieder weg. Goto 42.
- Irgendwann beginnst du an dir zu zweifeln und druckst Assemblies aus 
und wälzt Datenblätter des Controllers und Bücher über Zweierkomplement 
oder über Linkerskripte.
- Irgendwann fällt dir im Map-File auf, dass Adressen subtil verrutscht 
sind, was bei relokatierenden Builds ja nicht ungewöhnlich ist. Der 
Groschen ist gefallen und du findest ein defektes Linkerskript, durch 
das versehentlich ein wichtiges Register des Prozessors als RAM 
verwendet wird.
- Mit dieser Information findest du auch den seit über fünf Monaten 
gefixten Bug im Tracker des Compiler-Herstellers. Du resignierst, weil 
die Firma nicht bereit ist, schon wieder €€€€ für ein Update zu bezahlen 
und frickelst händisch im Linkerskript herum.

Den Bug gabs bei avr-gcc.
Und jetzt denk dir noch eine MMU und Ethernet dazu.

Der Compiler-Hersteller wird dich bestenfalls fragen, ob du das letzte 
Bulletin nicht gelesen hast.

Nop schrieb:
> Eine grundsätzliche Schwäche bei OSS-Projekten.
Kann auch eine Stärke sein. Fork und gut.

von Nase (Gast)


Lesenswert?

Nop schrieb:
> Wie lange kann ein kommerzieller Compilerhersteller das tun? Vor allem
> in Zeiten des Internet? Bis sich die Kundenschicht schon VOR
> Projektbeginn ein andere Toolchain sucht?
Egal. Wie lange kannst du dir das erlauben, bis du keine Compiler mehr 
hast?
Aktuell ist N(Compiler) << N(Kunden).
Wie schnell kriegst du dein Projekt portiert?

Compiler-Hersteller sind auch nicht blöd.
Wenn Xilinx neue FPGAs rausbringt und die alten loswerden will, 
verdoppeln sie einfach die Preise. Und? Klar gibts Altera, Atmel, 
Cypress und so weiter. Und wie schnell hast du das Redesign durch...?

Ich habe gerade Handwerker im Haus. Morgens sammle ich deren 
Spaxschrauben vom Garagenboden und abends kann ich ihren Müll wegräumen. 
Und hier ist N(Handwerker) ~ N(Kunden), die wollen mein Geld, nicht 
umgekehrt. Trotzdem interessierts keinen.

von Daniel A. (daniel-a)


Lesenswert?

Nase schrieb:
> - Mit dieser Information findest du auch den seit über fünf Monaten
> gefixten Bug im Tracker des Compiler-Herstellers. Du resignierst, weil
> die Firma nicht bereit ist, schon wieder €€€€ für ein Update zu bezahlen
> und frickelst händisch im Linkerskript herum.
>
> Den Bug gabs bei avr-gcc.
> Und jetzt denk dir noch eine MMU und Ethernet dazu.

Das passt nicht Zusammen. avr-gcc ist soweit ich weiss gratis. Wenn man 
auf einer noch supporteten Version ist, und ein derart kritischer Bug 
taucht auf, wird das nicht nur die neusten Version, sondern in allen 
noch supporteten Versionen gefixt. Im moment vermutlich die 6.x.x, 5.x.x 
und eventuell 4.x.x. Wo entstehen da bitte kosten, wenn man einen 
neueren Kompiler nimmt und der eigene Code dem C-Standard entspricht?
Und was hat eine MMU und Ethernet mit all dem zutun?

von Nase (Gast)


Lesenswert?

Daniel A. schrieb:
> Das passt nicht Zusammen. avr-gcc ist soweit ich weiss gratis. Wenn man
> auf einer noch supporteten Version ist, [...]
Das war einfach ein reales Beispiel, in diesem Fall mit dem GCC. GCC ist 
gratis, der Bug war schon längst gefixt, aber ich hatte trotzdem mit 
einem alten GCC zu tun. Der Projektleiter war halt so "klug", die 
Toolchain komplett mit dem Projekt nebst VM einzufrieren, "damit nix 
passiert".
Der Ablauf ist aber grunsätzlich unabhängig vom Compiler oder von der 
Programmiersprache überhaupt usw.


> Wo entstehen da bitte kosten, wenn man einen
> neueren Kompiler nimmt und der eigene Code dem C-Standard entspricht?
Kannst dir ja mal Preislisten von IAR, Codevision und WND schicken 
lassen.

> Und was hat eine MMU und Ethernet mit all dem zutun?
Das macht die Fehlersuche weitaus unüberschaubarer, als der 
durchschnittliche Programmierer es zu handhaben vermag. Vorallem nicht, 
wenn man seine Build-Tools anzweifeln muss - normalerweise verlässt man 
sich ja beim Debuggen zumindest darauf.

von hal9000 (Gast)


Lesenswert?

Nase schrieb:
> Ich kann außerdem bestätigen, dass das Niveau, auf dem in der Industrie
> programmiert wird, um Lichtjahre unterirdischer ist, als das, auf dem
> üblicherweise Open Source betrieben wird.

Jaja genau

Diese Truppe hat bei meinem Arbeitgeber auch die Macht übernommen. Da 
beschäftigen sich tausende leute mit irgendwelchen makefiles und 
optimierung des buildprozesses. Von den leuten ist ja keiner in der Lage 
eine SPI oder
Uart zu programmieren wenn man nix passendes in der Community findet.
Was rauskommt frisst alle Resourcen die der baustein hat
die Geräte leisten weniger als das was 10 jahre lang gut war. Am besten 
alles
auf Kommandozeile und mit einer primitive Debug Umgebung. Da lobe ich 
mir doch meinen IAR oder Keil. Zum glück habe ich nur noch 6 Monate bis 
zum
Ruhestand.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Und warum ist es jetzt die Schuld des Compilers, dass die Kollegen nix 
auf der Pfanne haben?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Nop schrieb:
> Niemand verwendet kommerziell in sensiblen Bereichen GCC.

Gut zu wissen, dass Schummelsoftware[tm] nicht sensibel ist ;-)

von Nase (Gast)


Lesenswert?

hal9000 schrieb:
> das was 10 jahre lang gut war.
> [...] Zum glück habe ich nur noch 6 Monate bis zum Ruhestand.
Solche Leute haben wir auch.
Die halten verbissen an ihrem zenn Jahre alten Kram fest, weil das ja 
schon immer so war, verweigern jegliches Fortkommen und blockieren 
wichtige Entscheidungen.

Deshalb darf ich mich heute auch ab und an mit völlig veraltetem Müll 
herumschlagen, um deren Baustellen anzupassen, mit primitivem Debugging 
auf DOS-Prompt. Denen ists nämlich jetzt egal, die haben nur noch ein 
halbes Jahr bis zur Rente und nach ihnen die Sintflut.

von Zeno (Gast)


Angehängte Dateien:

Lesenswert?

Mike B. schrieb:
> ...
>> Wo man in C Idiome wie "if ((ptr != NULL) && (*ptr == Bla))" machen
>> kann, hat man in Pascal schonmal zwei Blockebenen.
>
> dafür peilt man als normalo-Hobby-Programmierer auch beim ersten Blick
> was gemeint ist
> "if ((ptr != NULL) && (*ptr == Bla))"
> um sowas logisch fehlerfrei beisammen zu tippen braucht man 1 Jahr
> für Pascal reicht es 2x if-then-else logisch zusammen zu kriegen

Genau für solche Sachen gibt es (bei Pascal) Compilerschalter, im 
konkreten Fall $B- . Diesen setze ich entweder in den 
Projekteinstellungen oder im Quelltext am Anfang des Programmes oder 
dort wo ich ihn brauche. Mal ein Beispiel für Letzteres :
1
(* vollständige Prüfung boolscher Ausdrücke abschalten *)
2
{$B-} 
3
if (ptr <> nil) and (ptr^ = 'Bla')
4
then begin
5
  ...
6
end;
7
   ...
8
9
(* vollständige Prüfung boolscher Ausdrücke wieder einschalten *)
10
{$B+}

Für so etwas braucht es keine 2 Blockebenen.

Diesen Compilerschalter gibt es definitiv ab Borlandpascal 7.0 (bei 
Turbopascal weis ich es nicht ganz genau), Virtualpascal, Freepascal, 
Lazarus und natürlich auch bei Delphi. Angehängtes Bild ist aus der 
Hilfe von Virtualpascal.
Ich mache das bei mir meist in den Projekteinstellungen, da gilt dies 
für alle im Projekt benutzten Quelltextdateien.
Man muß bei so was natürlich die Reihenfolge beachten, also erst 
Existenz des Zeigers prüfen und dann den Inhalt abfragen, denn sonst 
kracht es falls der Zeiger nicht initialisiert ist. Das ist aber in 
allen Programmiersprachen so.

Jörg W. schrieb:
>> Schon mal was von {$B+} und {$B-} gehört? Wahrscheinlich noch nicht.
>
> In welchem Standard ist das dokumentiert? ;-)

Wozu brauche ich da einen Standard? Mir reicht es wenn der Compiler die 
passenden Stellschrauben hat. Ist ja letztendlich bei C auch nicht 
anders.

Zeno

von (prx) A. K. (prx)


Lesenswert?

Zeno schrieb:
> Wozu brauche ich da einen Standard?

In diesem speziellen Fall darf man wohl davon ausgehen, dass jeder 
Compiler einer Pascal-ähnlichen Sprache so einen Schalter mitbringt oder 
Bedingungen gleich von vorneherein kurzschliessend implementiert. Dieses 
Problem der Sprache ist offenkundig und die Lösung liegt auf der Hand.

Für andere Sprachfeatures ist das weniger einfach. Nicht jeder 
Sprachschöpfer sieht die gleichen Probleme und dafür auch die gleichen 
Lösungen. Dann sind Standards schon nützlich.

: Bearbeitet durch User
von Nase (Gast)


Lesenswert?

Zeno schrieb:
> Genau für solche Sachen gibt es (bei Pascal) Compilerschalter, im
> konkreten Fall $B-
In C gibts dafür eine eigentlich recht intuitive Regel im Sprachschatz.

Zeno schrieb:
> Ich mache das bei mir meist in den Projekteinstellungen, da gilt dies
> für alle im Projekt benutzten Quelltextdateien.
Damit hast du aber auch gleich das gravierende Problem erfasst:
Es reicht nicht mehr, den Quelltext zu lesen.

Beispiel: In C kenne ich die Regel mit der Short-Circuit-Evaluation, auf 
der dein Beispiel fußt (wenn der erste !=0-Vergleich fehlschlägt, wird 
der zweite garnicht erst ausgeführt). Wenn ich das irgendwo im Quelltext 
lese, habe ich die Semantik vollständig erschlossen.
Wenn ich dasselbe in einem Pascal-Quelltext lese, muss ich erst nach 
Compilerschaltern und Projekteinstellungen in anderen Dateien 
herumsuchen, um rauszukriegen, wie so eine if-Bedingung bewertet wird. 
Der Quelltext ist also jetzt abhängig von Rahmenbedingungen, sofern man 
nicht händisch im Quelltext immer die Schalter setzt, die man gerade 
braucht.

Beispiel: Du bindest eine Pascal-Unit ein. Jetzt müsste entweder der 
Autor diese Unit in selbiger die Schalter bedienen oder du müsstest 
nachsehen, welche Schalter der Autor erwartet. Wenn du immer mit B+ 
arbeitest und das in den Projekteinstellungen festlegst, kracht es in 
der Unit, wenn deren Autor B- benutzt hat.

von 123457890 (Gast)


Lesenswert?

Zeno schrieb:
> Wozu brauche ich da einen Standard?

Weil ein Standard dazu führt, dass man "Dinge" vereinheitlichen und 
damit verschiedene Quellen austauschen bzw. kombinieren kann.

In der Nicht-Virtuellen Welt bedeutet dies, dass bei allen ein Meter 
auch ein Meter lang ist und wenn ich einen 100 Meter langes Kabel 
bestelle, ich auch 100 Meter nach meinen Vorstellungen bekomme, egal bei 
wem ich es bestelle.

von S. R. (svenska)


Lesenswert?

Zeno schrieb:
> Genau für solche Sachen gibt es (bei Pascal) Compilerschalter,

Nein. Für solche Sachen gibt es in deinem Turbo-Pascal Compilerschalter. 
Ob es die bei jedem Compiler gibt, und ob die bei jedem Compiler gleich 
heißen und auch das im Detail das gleiche tun, weißt du nicht.

Und darum gibt es Standards.

Dein Programm mag ja fix auf dein TP abgestimmt sein, aber für eine 
wiederverwendbare Unit sollte das nicht gelten.

von Arc N. (arc)


Lesenswert?

A. K. schrieb:
> Zeno schrieb:
>> Wozu brauche ich da einen Standard?
>
> In diesem speziellen Fall darf man wohl davon ausgehen, dass jeder
> Compiler einer Pascal-ähnlichen Sprache so einen Schalter mitbringt oder
> Bedingungen gleich von vorneherein kurzschliessend implementiert. Dieses
> Problem der Sprache ist offenkundig und die Lösung liegt auf der Hand.

Keine Ahnung ob/welche Compiler das implementieren 1), aber es gibt im 
Pascal-Standard (ebenso wie bspw. in Eiffel ) and_then/or_else (bzw. and 
then und or else)
http://www.eah-jena.de/~kleine/history/languages/iso-iec-10206-1990-ExtendedPascal.pdf
1) z.B. http://www.gnu-pascal.de/gpc/and-then.html

von Der E. (rogie)


Lesenswert?

@ turbo autist:

Du bist herzlichst dazu eingeladen, die perfekte Programmiersprache für 
uns zu entwickeln, damit wir "Beschränkten" endlich wissen, was wirklich 
gut ist.

Kopfschüttel

von Rainer S. (rsonline)


Lesenswert?

rmu schrieb:
> Ist bekannt, aber es hat sich irgendwie überholt. Kenne nichts und
> niemanden der irgendwas in Pascal, Delphi oder Lazarus neu entwickelt.

Klappt hervorragend, sehr großes Projekt.
Mess- & Regelungstechnik auf x86 Industrie PC Basis.
Mit Server Anbindung, alles selbst geschrieben.
In Turbo Pascal und DOS gestartet, dann gab es eine 32 Bit Version für 
DOS/Windows von einer kleinen amerikanischen Softwarefirma. Nach einigem 
Abwägen dann auf Freepascal umgestellt. Mittlerweile auf Linux portiert.
Bis heute sehr gut damit gefahren.

Die Bedienerfreundlichkeit von Lazarus könnte besser sein.
Auch der Anfang ist für unerfahrene wohl etwas holprig.

Habe damit sogar schon embedded Code für einen STM32 ARM Prozessor 
geschrieben und ausgeführt.

Die Community ist klein aber fein.

von (prx) A. K. (prx)


Lesenswert?

Der E. schrieb:
> Du bist herzlichst dazu eingeladen, die perfekte Programmiersprache für
> uns zu entwickeln, damit wir "Beschränkten" endlich wissen, was wirklich
> gut ist.

Komisch, dass den noch niemand brachte. Na denn, 2 xkcds hatten wir 
schon, aber aller guten Dinge sind 3: https://xkcd.com/927/

von Arc N. (arc)


Lesenswert?

A. K. schrieb:
> Der E. schrieb:
>> Du bist herzlichst dazu eingeladen, die perfekte Programmiersprache für
>> uns zu entwickeln, damit wir "Beschränkten" endlich wissen, was wirklich
>> gut ist.
>
> Komisch, dass den noch niemand brachte. Na denn, 2 xkcds hatten wir
> schon, aber aller guten Dinge sind 3: https://xkcd.com/927/

Einfach Katahdin nehmen...
"Katahdin is a programming language where the syntax and semantics are 
mutable at runtime...
There are no special constructs in Katahdin that cannot be modified, 
including white-space and basic tokens."
http://chrisseaton.com/katahdin/
https://github.com/chrisseaton/katahdin/

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Zeno schrieb:
> Ist ja letztendlich bei C auch nicht anders.

Ist da sehr wohl anders.

Jeder ordentliche Compiler implementiert den Standard, und man kann
fast alles (außer dem OS selbst oder einem Scheduler oder andere
Spezialfälle) in der Tat als strictly conforming program verfassen.
Das wiederum muss sich unter allen Compilern gleich verhalten.

Das heißt natürlich, dass ein solches Programm auf solche Gimmicks
wie dein $B+ nicht bauen kann (-f<something> bei GCC, irgendwelche
#pragmas bei anderen Compilern).

Arc N. schrieb:
> and_then/or_else

Spät genug hat offenbar jemand eingesehen, dass shortcut evaluation
ein sinnvolles Feature ist.

von chris_ (Gast)


Lesenswert?

Was hier noch gar nicht vor kam: graphische Programmiersprachen.
Ich bin der Meinung, eine richtig gute Programmiersprache muss 
graphische Anteile beinhalten.

Weil: ein Bild sagt mehr als tausend Worte.

LabView zeigt hier schon mal einen guten Weg auf.
Allerdings muss man sagen, dass bestimmte Teile eines Projektes am 
besten  klassisch einfach Zeilen-orientiert gelöst werden. Eine richtig 
gute Programmiersprache enthält beide Elemente in ausgeglichener 
Ordnung, also sowohl graphische Elemente für die strukturelle Übersicht 
als auch klassische Elemente für einfache Algorithmik.
Die UML-Generatoren sind dahingehend eine Fehlentwicklung weil sie weder 
schön, noch einfach, noch übersichtlich sind.

Aber verständlich ist auch: Wer sein leben lang nur die 
Zeilenorientierung kennt und gewohnt ist, wird sich mit anderem schwer 
tun.
Außerdem ist es natürlich so, dass die Menschen unterschiedlich denken: 
Während die einen graphisch in Bildern denken, denken andere eher in 
Texten.

von Nase (Gast)


Lesenswert?

chris_ schrieb:
> LabView zeigt hier schon mal einen guten Weg auf.
Findest du? LabView ist ein prima Spielzeug, um mal eben einen Prüfstand 
mit bisschen Messen/Steuern/Regeln zu programmieren. Oder im Labor.

chris_ schrieb:
> Wer sein leben lang nur die
> Zeilenorientierung kennt und gewohnt ist, wird sich mit anderem schwer
> tun.
Andersrum geht das aber auch: Wer mal ernsthaft mit graphischen 
Auswüchsen programmiert hat, merkt schnell, wie unflexibel und mühsam 
das ist.

Ich kenne als Vertreter der graphischen "Programmiersprachen" jetzt 
LabView und im weiteren Sinne z.B. auch XILINX ISE/Vivado oder Altera 
Quartus für programmierbare Logik. Mit allen dreien habe ich größere 
Projekte (mit-)umgesetzt und bei allen dreien war ich (waren wir) 
anschließend heilfroh, wieder davon wegzukommen hin zu einer 
"textbasierten" Programmierung.

Die LabView-Programme sind irgendwann einfach nicht mehr zu pflegen, 
weil allein schon Refactoring eine Katastrophe ist. Man kann halt nicht 
einfach durch den Quelltext navigieren, jedes Stück ist eher ein Bild 
als irgendwas systematisch Programmiertes.
Bei Xilinx ists für Toplevel ganz nett, wenn man ein Blockschaltbild 
malen kann. Letztlich hat man aber leider auch wieder nur proprietären 
Binärmüll in der Hand. Daher nimmt man dann doch gerne wieder 
VHDL/Verilog.

von Thomas (Gast)


Lesenswert?

Nun als jemand der sowohl in Pascal als auch in C programmiert kann ich 
dir folgendes sagen.
Pascal ist fuer schnelle Tools besser man kommt wesentlich schneller zum 
Ziel. Schau dir nur mal das stringhandling an. Zig verschiedene 
Funktionen die sich in irgendwelchen Header Dateien befinden. Dazu dann 
noch unverständliche Fehlermeldungen.
Wer hat noch nie suspicious Pointer conversion gesehen?
Das ist in Pascal besser gelöst.  Allerdings auch wesentlich langsamer.
Was die Compiler Schalter in Pascal sind sind die pragmas in C eben 
nicht portabel.
Woher kommen denn die ganzen Buffer overflow leaks? Sicher nicht von 
Pascal Programmen dort wird das zur Runtime überwacht.
Mir ist schon klar dass Pascal sicher veraltet ist doch für schnelle 
Problem Lösungen setze ich das nach wie vor ein.
Thomas

von Segler (Gast)


Lesenswert?

chris_ schrieb:
> Was hier noch gar nicht vor kam: graphische Programmiersprachen.
> Ich bin der Meinung, eine richtig gute Programmiersprache muss
> graphische Anteile beinhalten.

Naja, wie immer gilt: "Richtig gut" ist halt lediglich eine relative 
Bewertung, nach irgendwelchen individuellen Kriterien. Deswegen gehören 
DSLs* auch schon seit Jahrzehnten zum Werkzeugkasten "richtig guter" 
Informatiker.


PS, allgemeiner Rant: Bisweilen täten E-Techniker gut daran in Sachen SW 
auf Informatiker zu hören anstatt selbst etwas zu "basteln". Es mag 
erstaunen, aber Informatiker haben während ihres Studiums nicht nur Eier 
geschaukelt sondern auch eine Menge sehr nützliche Dinge bezüglich SW 
erlernt. Dinge, von denen ein E-Techniker i.d.R. keinen blassen Schimmer 
hat. Sein wir ehrlich, wenn man einen E-Techniker bittet SW zu erstellen 
kommt dabei nicht selten genau so ein Murks heraus (aus der Sicht eines 
SW-Spezialisten) wie wenn man einen Informatiker bittet HW zu entwerfen 
(aus der Sicht eines HW-Spezialisten).

*: Domain Specific Language, siehe auch 
https://de.wikipedia.org/wiki/Dom%C3%A4nenspezifische_Sprache

von Nase (Gast)


Lesenswert?

Thomas schrieb:
> Schau dir nur mal das stringhandling an.
Ja, das war in Pascal früher eine Zumutung. Es gab alle Stringfunktionen 
doppelt, einmal für PChar auf dem Heap und einmal für string, bei 
dem die Stringlänge im ersten Byte stand und damit auf 255 Zeichen 
beschränkt war.

Thomas schrieb:
> Zig verschiedene
> Funktionen die sich in irgendwelchen Header Dateien befinden.
Naja, abseits von der eher akademisch angehauchten STL hat sich da 
vieles getan. Strings in Qt sind zum Beispiel herrlich simpel.
#include <QString>

Thomas schrieb:
> Was die Compiler Schalter in Pascal sind sind die pragmas in C eben
> nicht portabel.
Mit dem Unterschied, dass solche elementaren Dinge in C nicht per 
unportablem Schalter sondern im Sprachstandard festgelegt werden.

Thomas schrieb:
> Woher kommen denn die ganzen Buffer overflow leaks?
Daher, dass Pascal in der Wildnis praktisch keine Relevanz hat...

> Sicher nicht von
> Pascal Programmen dort wird das zur Runtime überwacht.
Wenn man den Compilerschalter einschaltet.

von Andreas H. (ahz)


Lesenswert?

Jörg W. schrieb:
> Spät genug hat offenbar jemand eingesehen, dass shortcut evaluation
> ein sinnvolles Feature ist.

Mhh. Ich bin mir da nicht sicher, ob die das nicht schon eingesehen 
hatten als in Ansi-C die Auswertungsreihenfolge solcher Ausdrücke noch 
"depents on the implementation" war. Und DAS war damals unter UNIX auch 
immer ein beliebter Fehler, das bekannte (*p && p->x++)  ;-)

Ansonsten muss ich gestehen, dass ich Lazarus (also Freepascal als 
Compiler) inzwischen auch gerne benutze. Macht Spass, ist 
plattformunabhängig und hat eine nette & hilfreiche Community.

/regards

von Andreas H. (ahz)


Lesenswert?

Nase schrieb:
> Thomas schrieb:
>> Woher kommen denn die ganzen Buffer overflow leaks?
> Daher, dass Pascal in der Wildnis praktisch keine Relevanz hat...

Ich frage mich immer wieder woher Leute glauben zu wissen, was relevant 
ist.

Hast Du da stabile (!) Zahlen? Ich wäre da wirklich mal neugierig.

Denn leider kriegt man ja meist nur die "paar" Ideen, die in Foren 
diskutiert werden.

Aber das ist nur ein Bruchteil der existierenden SW. Ich kenne einige 
(auch aktuelle) "größere" Projekte die in Delphi entwickelt werden. 
Allerdings hängen da überall DICKE NDAs drauf :/

/regards

von Kaj (Gast)


Lesenswert?

Andreas H. schrieb:
> Projekte die in Delphi entwickelt werden.
Da faellt mir ein sehr aktuelles Beispiel ein ;)

The first cryptor to exploit Telegram
https://securelist.com/blog/research/76558/the-first-cryptor-to-exploit-telegram/
1
The Telegram Trojan is written in Delphi and is over 3MB in size.

von W.S. (Gast)


Lesenswert?

Ach, es ist zwar grad nicht Freitag, aber doch nett, mal wieder so einen 
höchstwissenschaftliche Disput genießen zu können. Ein paar Perlen sind 
mir dabei schon aufgefallen:

rmu schrieb:
> Kenne nichts und
> niemanden der irgendwas in Pascal, Delphi oder Lazarus neu entwickelt.

Tja, wenn du die Augen zu machst, dann siehste eben nix. Kleiner Tip: 
Programmiertool für STM32 von mir hier im Forum.
btw: eine Lazarus-Version hab ich inzwischen auch fertig. Funktioniert 
gut wie die Delphi-Version. Sieht mir aber zu grau aus.
Also: Mach deine Klüsen auf, dann siehst du auch was.

Nase schrieb:
> Als ob ein zertifizierter Compiler weniger Ärger machen würde, als gcc
> oder sonstwer. Ich empfinde es als eine widerliche Farce, dass heute
> überhaupt noch Compiler zerzifiziert werden -

Es geht um's Geld. Ganz speziell um die Position vor Gericht, wenn es 
Zoff gibt - und den gibt es bei den heutigen Programmerern fast immer. 
Nochmal: Es geht definitiv NICHT um Sachgründe, Support oder Qualität, 
sondern um das Vorweisenkönnen eines Zertifikates vor dem Kadi.

Jörg W. schrieb:
>> Schon mal was von {$B+} und {$B-} gehört? Wahrscheinlich noch nicht.
>
> In welchem Standard ist das dokumentiert? ;-)

Jörg, ich hab das schon immer vermutet: Du bist Beamter, sonst könntest 
du nicht auf so eine komische Frage kommen.

Vielleicht hilft es dir, daß Standards in aller Regel von den Leuten aus 
der Industrie gemacht werden, die beispielsweise im VDMA vertreten sind 
und dort logischermaßen ihr Ding in einem passenden Standard 
festklopfen.

Ich sag's mal brüsk: Standard ist DAS, was unsereiner macht. Basta. 
Aufgeschrieben wird's hinterher.


123457890 schrieb:
> In der Nicht-Virtuellen Welt bedeutet dies, dass bei allen ein Meter
> auch ein Meter lang ist

Scherzbold!
Du solltest beachten, daß ein Meter in der realen Welt eben nur dann 
exakt ein Meter ist, wenn du stillstehst und alle anderen auch. Sonst 
eben nicht, lies mal Einsteins Relativitätstheorie.

So, das sollte für einen leicht verspäteten 11.11. ausreichen - HELAU

W.S.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andreas H. schrieb:
> Jörg W. schrieb:
>> Spät genug hat offenbar jemand eingesehen, dass shortcut evaluation
>> ein sinnvolles Feature ist.
>
> Mhh. Ich bin mir da nicht sicher, ob die das nicht schon eingesehen
> hatten als in Ansi-C die Auswertungsreihenfolge solcher Ausdrücke noch
> "depents on the implementation" war. Und DAS war damals unter UNIX auch
> immer ein beliebter Fehler, das bekannte (*p && p->x++)  ;-)

Wo hast du das denn her?

Selbst lange vor ANSI-C war das schon eindeutig festgelegt.

Hier beispielsweise in der Doku von 1974:

https://www.bell-labs.com/usr/dmr/www/cman74.pdf

(7.11 und 7.12)

von Max S. (maximus-minimus)


Lesenswert?

> Ist ja letztendlich bei C auch nicht anders.

Ist da sehr wohl anders.


Ich denke nicht?!?
Ich denke der MS Compiler nutzt nicht mal den neuesten Standard!
Was bringen Standards wenn aber nicht jeder Compiler sie nutzt?!?
BEi PAScal ist Delphi Fakto!! der Standard, den Schalter wirst Du also 
sowohl bei Delphi als auch bei PAscal7 als auch Free Pascal und Mikroe 
Pascal finden finden

Somit ist es ein Standard!! Nur eben nicht von irgeneinem Gremium das 
niemand braucht wenn es Usus ist

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Max S. schrieb:

> Ich denke der MS Compiler nutzt nicht mal den neuesten Standard!

Ja, dann benutzt er aber zumindest den vorhergehenden.

Wie oben gezeigt, boolean shortcut evaluation war schon vor mehr
als 40 Jahren definiert, da gab's noch gar keinen offiziellen
Standard.

> Somit ist es ein Standard!

Nun gut, dann kann man sich einfach auf nichts verlassen, sondern
nur hoffen, dass es so ist.  Dann sollte man sich nur nicht wundern,
dass die Programmiersprache trotz netter Features ein vergleichsweises
Nischendasein fristet.  Und nein, daran sind nicht die anderen dann
schuld.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Max S. schrieb:
> Was bringen Standards wenn aber nicht jeder Compiler sie nutzt?!?

Umgekehrt:

Was nutzt ein Compiler, der keinem Standard folgt?

von (prx) A. K. (prx)


Lesenswert?

Johann L. schrieb:
> Was nutzt ein Compiler, der keinem Standard folgt?

Er setzt einen neuen de-facto Standard, mindestens für seinen Autor. ;-)

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Max S. schrieb:
> Ich denke der MS Compiler nutzt nicht mal den neuesten Standard!

Microsoft hat eigene Interessen, was die Verwendung von Sprachen angeht. 
C und C++ sind da nicht im Fkus.

> BEi PAScal ist Delphi Fakto!! der Standard,

Bin grad mal quer durch die Sprachref von Free Pascal. Es scheint bei 
den Borland-Pascals und deren Derivaten Dialekte zu geben, Abweichungen 
im Verhalten gleicher Sprachelemente.

Ein Problem von de-facto Standards ist die oft fehlende Klarheit, welche 
Sprachaspekte eine geforderte Eigenschaft sind, und wo Unterschiede in 
der Implementierung zulässig sind. Das erschwert sowohl in der 
Implementierung der Sprache als auch in der Nutzung die klare 
Erkenntnis, was man machen darf und was nicht.

Wenn dann in neuen Versionen bereits bestehende Sprachelemente sich 
abweichend verhalten, dann kann das etwas überraschend kommen, weil sich 
erst zu diesem Zeitpunkt herauskristallisiert, was der Implementor als 
gemeinsamen Sprachteil versteht, und was als Implementierungsfreiheit. 
Formal standardisierte Sprachen versuchen in einer neuen Version des 
Standards so weit wie möglich Kompatibilität zum Vorgänger zu wahren.

: Bearbeitet durch User
von Potzblitz (Gast)


Lesenswert?

A. K. schrieb:
> Max S. schrieb:
>> Ich denke der MS Compiler nutzt nicht mal den neuesten Standard!
>
> Microsoft hat eigene Interessen, was die Verwendung von Sprachen angeht.
> C und C++ sind da nicht im Fkus.

C nicht, das stimmt, aber wie kommst du auf C++? Da hat sich in den 
letzten ~2 Jahren bei MS sehr viel getan. Herb Sutter, Stephan Lavavej 
usw. sind ja nicht gerade die Schlechtesten.

von (prx) A. K. (prx)


Lesenswert?

Potzblitz schrieb:
> C nicht, das stimmt, aber wie kommst du auf C++? Da hat sich in den
> letzten ~2 Jahren bei MS sehr viel getan.

Ok, ich bin da nicht ganz up to date.

von Ich (Gast)


Lesenswert?

Mir stellt sich beim Lesen der Beiträge gerade nur eine Frage:
Ist eine gute Programmiersprache nicht die, die das gerade aktuelle 
Problem einfach zu lösen vermag?
Klar hat jede Sprache vor- und nachteile, aber wenn damit das Problem 
gelöst werden kann, ...?

von Kaj (Gast)


Lesenswert?

A. K. schrieb:
> Potzblitz schrieb:
>> C nicht, das stimmt, aber wie kommst du auf C++? Da hat sich in den
>> letzten ~2 Jahren bei MS sehr viel getan.
>
> Ok, ich bin da nicht ganz up to date.
Na dann :)

Hier: 
https://www.heise.de/developer/meldung/Visual-Studio-15-Fuenfte-Preview-bringt-vor-allem-Neuerungen-fuer-C-3341903.html

von (prx) A. K. (prx)


Lesenswert?

Ich schrieb:
> Ist eine gute Programmiersprache nicht die, die das gerade aktuelle
> Problem einfach zu lösen vermag?

Aber was, wenn das morgige Problem damit nicht mehr einfach zu lösen 
ist? Ist sie dann immer noch gut, oder ist morgen eine andere Sprache 
auch gut, die es heute noch nicht war? Und nach einem Jahr hast du 
365,25 irgendwann einmal gute Sprachen auf der Platte?

: Bearbeitet durch User
von Arc N. (arc)


Lesenswert?

Jörg W. schrieb:
> Jeder ordentliche Compiler implementiert den Standard, und man kann
> fast alles (außer dem OS selbst oder einem Scheduler oder andere
> Spezialfälle) in der Tat als strictly conforming program verfassen.
> Das wiederum muss sich unter allen Compilern gleich verhalten.

Darüber könnte man (am besten in einem anderen Thread) trefflich 
streiten...
Bspw. die Ausnahme, die es für die SPEC-Benchmarks gibt "The GCC 
maintainers subsequently disabled this optimization for the case 
occuring in SPEC, demonstrating that, inofficially, GCC supports C 
bench, not “C”"
http://www.complang.tuwien.ac.at/kps2015/proceedings/KPS_2015_submission_29.pdf

> Das heißt natürlich, dass ein solches Programm auf solche Gimmicks
> wie dein $B+ nicht bauen kann (-f<something> bei GCC, irgendwelche
> #pragmas bei anderen Compilern).
>
> Arc N. schrieb:
>> and_then/or_else
>
> Spät genug hat offenbar jemand eingesehen, dass shortcut evaluation
> ein sinnvolles Feature ist.

Der Standard ist von 1990. Wann gab's nochmal den ersten C-Standard? 
Ansi C89/ISO C90 bzw. kann ich mangels griffbereitem uralt K&R-Buch 
nicht sagen, ob die das vor der Standardisierung auch so gesehen haben.
Zudem gilt das ganze für C++ nicht mehr sobald dort ein Typ mit 
entsprechend überladenen Operatoren auftaucht, dann wird alles 
ausgewertet...

von (prx) A. K. (prx)


Lesenswert?

Arc N. schrieb:
> Der Standard ist von 1990. Wann gab's nochmal den ersten C-Standard?
> Ansi C89/ISO C90 bzw. kann ich mangels griffbereitem uralt K&R-Buch
> nicht sagen, ob die das vor der Standardisierung auch so gesehen haben.

Das ältere K&R-C war auch eine Art Standard, in Form ebendieses Buches, 
wenngleich kein von einem Gremium wie ISO abgesegneter. Aber ein 
schwacher, weil darin zu wenig festgelegt wurde. Das war aber schon ein 
deutlich weiter entwickeltes C und unterschied sich erheblich von der 
ursprünglichen Version.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Arc N. schrieb:

> Darüber könnte man (am besten in einem anderen Thread) trefflich
> streiten...

Du meinst, inwiefern dieser Benchmark "strictly conforming" ist?

Aber lassen wir das, ich weiß, dass du mit den GCC-Entwicklern
bezüglich der Aliasing-Regeln nicht konform gehst.  Denk aber dran,
dass im C-Standard solche Dinge nicht deshalb "implementation
defined" sind, weil es irgendwer besonders toll fand, sondern weil
es zum Zeitpunkt der Entscheidung bereits verschiedene Varianten
gab, irgendwas zu implementieren, und man keine davon für ungültig
erklären wollte.

> Der Standard ist von 1990. Wann gab's nochmal den ersten C-Standard?

1989.

Allerdings habe ich weiter oben eine C-Referenz von Dennis Ritchie
von 1974 zitiert, in der dieser Aspekt bereits genauso klipp und
klar festgeschrieben war.

von Zeno (Gast)


Lesenswert?

S. R. schrieb:
> Nein. Für solche Sachen gibt es in deinem Turbo-Pascal Compilerschalter.
> Ob es die bei jedem Compiler gibt, und ob die bei jedem Compiler gleich
> heißen und auch das im Detail das gleiche tun, weißt du nicht.

Ich habe doch ausreichend Pascalimplementierungen genannt und bei den 
genannten ist es definitiv so.

von Zeno (Gast)


Lesenswert?

Nase schrieb:
> Beispiel: Du bindest eine Pascal-Unit ein. Jetzt müsste entweder der
> Autor diese Unit in selbiger die Schalter bedienen oder du müsstest
> nachsehen, welche Schalter der Autor erwartet. Wenn du immer mit B+
> arbeitest und das in den Projekteinstellungen festlegst, kracht es in
> der Unit, wenn deren Autor B- benutzt hat.

Nein muß der Autor eben nicht. Er könnte es in der Unit, um mal bei dem 
von mir zitierten Beispiel zu bleiben, auch mit zwei if Blöcken 
erledigen. Wie der Autor in seiner Unit mögliche Fehler abfängt bleibt 
ihm überlassen. Ob er dies mit Compilerschaltern, Try Blöcken oder auf 
irgendeine andere Art und Weise fehlerhafte Programmzustände abfängt ist 
ihm überlassen. Meine Projekteinstellungen bleiben davon unberührt. Das 
ist halt der Vorteil des Unitkonzepts von Pascal. Ja und und natürlich 
wird mein Programm crashen, wenn es in der eingebundenen Unit zum Fehler 
kommt.


Zeno

von sven (Gast)


Lesenswert?

Die einfachste Programiersprache ist die die man selber am besten 
versteht, und wenn Mann / Frau die logik versteht, dann ist das doch 
einfach.

Meine kenntnisse:
6500 8080 Maschienensprache, ist aber schon 30 Jahre her, wo ich das 
gemacht hatte.
68000 Assembler
AVR-GCC
Object-C , Swift
Basic, verschiedene varianten.
HTML
Also nicht jammern warum es keine gescheite Sprache gibt.

von mh (Gast)


Lesenswert?

Arc N. schrieb:
> Zudem gilt das ganze für C++ nicht mehr sobald dort ein Typ mit
> entsprechend überladenen Operatoren auftaucht, dann wird alles
> ausgewertet...

Das ist tatsächlich eine gemeine Falle. Und es ist meiner Meinung nach 
ein guter Grund, warum man das Überladen von operator&& und || nicht 
hätte erlauben dürfen. Es zwingt einen aber auch niemand dazu sie zu 
überladen. Fällt dir ein Beispiel ein wann man einen der beiden 
Operatoren überladen möchte?

von S. R. (svenska)


Lesenswert?

Zeno schrieb:
> S. R. schrieb:
>> Nein. Für solche Sachen gibt es in deinem Turbo-Pascal Compilerschalter.
>> Ob es die bei jedem Compiler gibt, und ob die bei jedem Compiler gleich
>> heißen und auch das im Detail das gleiche tun, weißt du nicht.
>
> Ich habe doch ausreichend Pascalimplementierungen genannt und bei den
> genannten ist es definitiv so.

Die Frage ist nicht, ob es für deine drei bevorzugten Implementierungen 
gilt, sondern ob es für alle gilt und ob du denen das ansehen kannst, 
ohne vorher deren Dokumentation vollständig zu lesen. Wenn an einem 
C-Compiler "ANSI-C" dransteht, dann kann der mindestens C89, und zwar - 
Ausnahmen ausgenommen - vollständig.

Ein Compiler, an dem "Pascal" dransteht, kann ein beliebig schwammiges, 
möglicherweise imkompatibles Subset von dem, was der Delphi-Compiler 
kann. Und wenn da "Delphi" dransteht, gibt es zwei relevante 
Möglichkeiten: Es ist der Delphi-Compiler, oder es ist gelogen. Und 
wie sieht es mit GNU- oder ACK-Pascal aus?

: Bearbeitet durch User
von Nase (Gast)


Lesenswert?

Zeno schrieb:
> Nein muß der Autor eben nicht. Er könnte es in der Unit, um mal bei dem
> von mir zitierten Beispiel zu bleiben, auch mit zwei if Blöcken
> erledigen.
Aha. Hast du uns nicht gerade noch erklärt, dass es genau dafür 
Compilerschalter gibt?

> Meine Projekteinstellungen bleiben davon unberührt.
Seine aber auch.

Wie gehst du denn vor, wenn du Quelltext eines Kollegen einbindest? 
Fragst du ihn vorher, ob du B+ oder B- einstellen musst? Oder liest du 
dir den ganzen Quelltext durch und schaust nach, ob er es immer brav mit 
zwei if-Blöcken ausprogrammiert hat bzw. mit {B+} markiert hat?

von Nase (Gast)


Lesenswert?

Max S. schrieb:
> der Standard, den Schalter wirst Du also
> sowohl bei Delphi als auch bei PAscal7 als auch Free Pascal und Mikroe
> Pascal finden finden
Bei AVRco-Pascal aber nicht.

von Top-Entwickler (Gast)


Lesenswert?

Flitzpiep schrieb:
> Jein; kommt auf den Kontext an.
>
> string s = null;
>
> if (s?.Length == 3)
> {
>   ...
>
> entspricht
>
> if (s != null && s.Length == 3)
> {
>   ...

Ja, C# ist schon toll. Die armen Embedded-Ing-Fuzzies, die sich noch mit 
C oder C++ rumschlagen müssen, tun mir leid. Aber die denken noch, sie 
wären die Elite, weil sie Steinzeit programmieren.

von Tommi (Gast)


Lesenswert?

A. K. schrieb:
> Ein Problem von de-facto Standards ist die oft fehlende Klarheit, welche
> Sprachaspekte eine geforderte Eigenschaft sind, und wo Unterschiede in
> der Implementierung zulässig sind. Das erschwert sowohl in der
> Implementierung der Sprache als auch in der Nutzung die klare
> Erkenntnis, was man machen darf und was nicht.
Wobei das Problem von undefinierten Eigenschaften in Nicht-C-Sprachen 
ein deutlich kleineres bis vernachlässigbares ist. In dem Beispiel hier 
der Shortcut-Auswertung ist das ja eine gewünschte Eigenschaft. D.h. 
wenn sich ein Pascaldialekt von einem anderen unterscheidet, dann ist 
das bewusst so gemacht worden (d.h. bewusst 
nicht-Defacto-Standard-konform) und nicht auf eine fehlende Definition 
zurückzuführen.

In der Pascalphilosophie hat eine implizite Short-Cut-Auswertung m.E. 
sowieso keinen Platz, der Fallstrick, dass eine Funktion mit 
Nebenwirkung nicht gerufen wird, ist zu groß. Dagegen halte ich eine 
explizite Short-Cut-Auswertung mit or else für sehr elegant.
Wenn man auf die Shortcut-Auswertung (durch Kompilerswitch) verzichtet, 
dann läuft man eigentlich keine Gefahr einen bestehenden Code zu 
sprengen.

Dass es Sprachdialekte gibt ist sicherlich der Verbreitung nicht gerade 
dienlich. Insbesondere wenn man mit einer 100% abwärtskompatiblen 
Sprache konkurriert, die gerade noch gut genug ist um auf 
Embedded-Platformen produktiv zu sein. Dialekte ermöglichen aber auch 
Fortschritt, welcher durch Standardisierung und Abwärtskompatibilität 
stark ausgebremst wird.

C ist auch so konzipiert wie Windows, es hat eine intrinsische 
Selbserhaltung und ein Monopolisierungsdrang. Eine automatische 
Übersetzung von C in eine andere Sprache ist doch kaum möglich.

von Zeno (Gast)


Lesenswert?

Nase schrieb:
> Zeno schrieb:
>> Nein muß der Autor eben nicht. Er könnte es in der Unit, um mal bei dem
>> von mir zitierten Beispiel zu bleiben, auch mit zwei if Blöcken
>> erledigen.
> Aha. Hast du uns nicht gerade noch erklärt, dass es genau dafür
> Compilerschalter gibt?

Lesen kannst Du schon? Dort steht "könnte", d.h. er kann es so machen, 
er könnte ebenso den erwähnten Compilerschalter benutzen oder er kann 
auch von Anfang an dafür Sorge tragen, daß der Zeiger im Beispiel 
garantiert zum Abfragezeitpunkt zugewiesen ist, dann brauche ich den 
Zeiger nämlich gar nicht zu prüfen.

Nase schrieb:
> Wie gehst du denn vor, wenn du Quelltext eines Kollegen einbindest?
> Fragst du ihn vorher, ob du B+ oder B- einstellen musst? Oder liest du
> dir den ganzen Quelltext durch und schaust nach, ob er es immer brav mit
> zwei if-Blöcken ausprogrammiert hat bzw. mit {B+} markiert hat?

Ja das ist halt der kleine aber feine Unterschied von Pascal zu C: Ich 
brauche nicht unbedingt den Quelltext um fremden Code in mein Projekt 
einzubinden, da die kompilierte Unit völlig ausreichend ist, wenn sie 
mit der gleichen Hauptversion des Compiler gebaut wurde, den auch mein 
Projekt benutzt. Das ist aber meist kein Problem da Pascalprogrammierer 
in aller Regel angeben mit welchem Compiler die weiter gegebene Unit 
erstellt wurde.
Ich muß von der fremden Unit nur wissen welche Prozeduren und Funktionen 
im Interfaceteil deklariert sind (Name) und die dazugehörigen 
Übergabeparameter kennen. Wie der Autor der Unit die Aufgabe intern 
gelöst hat, wie er die Fehlerbehandlung löst ist für die Benutzung der 
Unit uninteressant. Das Durchforsten des Quelltextes entfällt also an 
dieser Stelle.
Informiere Dich einfach mal über das Unitkonzept von Pascal bzw. das 
Packagekonzept von Delphi/Lazarus.

Nase schrieb:
> Max S. schrieb:
>> der Standard, den Schalter wirst Du also
>> sowohl bei Delphi als auch bei PAscal7 als auch Free Pascal und Mikroe
>> Pascal finden finden
> Bei AVRco-Pascal aber nicht.

Dann ist das eben so. Dieser Pascaldialekt ist aber eher ein 
Nischenprodukt und wenn ich damit arbeite, dann lese ich das Handbuch 
dazu, wo so etwas drin steht.


Im Übrigen ging es mir nur darum, zu zeigen das die von nop aufgestellte 
Behauptung, das so etwas wie
1
 if ((Prt != null) && (*Ptr == ...) ...
 in Pascal nicht möglich wäre, so nicht ganz richtig ist. Es gibt halt 
in der überwiegenden Mehrheit der für den PC benutzten Pascaldialekte 
diesen speziellen Schalter. Das von Max genannte AVRco-Pascal ist da 
eine Ausnahme.

Zeno

von Zeno (Gast)


Lesenswert?

Top-Entwickler schrieb:
> Ja, C# ist schon toll.

Naja so toll ist C# nun auch wieder nicht obwohl es schon einige nette 
Features hat, z.B. nullable Variable. Leider hat man es mal wieder nicht 
konsequent gemacht, indem alle Typen generell nullable sind (man muß ja 
die nullable Eigenschaft nicht nutzen), sondern ein spezielles Konstrukt 
bei der Deklaration geschaffen. Bei Structs funktioniert dieses Konzept 
gar nicht.

Richtig interessant wird es dann aber mit WPF. Da kann fast alles 
verbrechen im wahrsten Sinne des Wortes, aber es ist dennoch Krampf.

Zeno

von Kaj (Gast)


Lesenswert?

Tommi schrieb:
> Eine automatische
> Übersetzung von C in eine andere Sprache ist doch kaum möglich.
Da faellt mir spontan Emscripten ein: C/C++ -> JavaScript
Abgesehen davon ist das bei anderen Sprach auch nicht besser.

von Bernd K. (prof7bit)


Lesenswert?

Nase schrieb:
> Daher, dass Pascal in der Wildnis praktisch keine Relevanz hat...

Das ist sicher der Grund dafür daß jeder Programmiersprachenthread 
spätestens ab Seite 2 sich unweigerlich in einer C vs. Pascal 
Endlosschleife aufhängt.

Nicht C vs. D, nicht C++ vs. Go, nicht C++ vs. Objective-C, nicht 
<irgendwas> vs. <sonstwas> sondern immer zielsicher C/C++ vs. Pascal 
oder alle vs. Pascal.

Für etwas das angeblich keine Relevanz hat scheint da doch ein ganz 
schöner Rechtfertigungszwang auf der gegnerischen Seite zu herrschen, da 
scheut man auch nicht davor zurück unfairer Weise heutiges C++ mit 30 
Jahre altem Universitäts-Pascal zu vergleichen weil einem gegen aktuell 
eingesetztes Industrie-Pascal (FPC, Delphi) schnell die sachlichen 
Argumente ausgehen würden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bernd K. schrieb:
> Für etwas das angeblich keine Relevanz hat scheint da doch ein ganz
> schöner Rechtfertigungszwang auf der gegnerischen Seite zu herrschen

Wozu rechtfertigen?

Schau dir doch einfach die realen Verhältnisse an.  Die paar größeren
Projekte, die in Pascal-ähnlichen Sprachen geschrieben sind und
nennenswerte Verbreitung gefunden haben, kannst du schon fast an den
Fingern zweier Hände abzählen.  Von all denen, die mir in letzter
Zeit übern Weg gelaufen sind, fällt mir gerade nur cqrlog ein (ein
Logbuchprogramm für den Amateurfunk).

Industrie?  Kann ja sein, dass da auch zuweilen Pascal-Dialekte da
sind, aber ich programmiere nun seit 26 Jahren in der Industrie, bisher
hat noch kein einziger Kunde auch nur danach gefragt.  (Nein, ich habe
auch nicht nur Mikrocontroller programmiert in meinem Leben, daran
allein liegt's also auch nicht).

Ich fand Pascal damals wirklich gut, auf CP/M war es die Erlösung,
um nicht alles aufwändig in Assembler hacken zu müssen.  Aber die
derzeitige Realität ist eine andere, und die kann ich mir nicht
aussuchen, wenn ich damit meine Brötchen verdienen muss.  Dafür muss
ich halt (vor allem) C, C++ und Python können.

von Nase (Gast)


Lesenswert?

Bernd K. schrieb:
> Das ist sicher der Grund dafür daß jeder Programmiersprachenthread
> spätestens ab Seite 2 sich unweigerlich in einer C vs. Pascal
> Endlosschleife aufhängt.
Nein, aber es ist ziemlich einfach, auf ein typisches und häufiges 
Problem von C (Pufferüberlauf) einzudreschen und im gleichen Atemzug so 
sagen, dass es mit Sprache XYZ viel seltener passiert, wobei Sprache XYZ 
dann aber im Vergleich einen lächerlichen Marktanteil hat.

Bernd K. schrieb:
> Für etwas das angeblich keine Relevanz hat scheint da doch ein ganz
> schöner Rechtfertigungszwang auf der gegnerischen Seite zu herrschen,
Wo liegt denn Pascal im Moment z.B. im TIOBE-Index? 1,5%? 1,9%?
Tschuldigung, aber so realistisch muss man auch mal sein.

> da
> scheut man auch nicht davor zurück unfairer Weise heutiges C++ mit 30
> Jahre altem Universitäts-Pascal zu vergleichen weil einem gegen aktuell
> eingesetztes Industrie-Pascal (FPC, Delphi) schnell die sachlichen
> Argumente ausgehen würden.
Mangelnde Einsicht ist aber augenscheinlich auch ein Kernfeature bei 
Pascal-Anhängern. Du bist jetzt übrigens der erste, der ein unfaires 
Totschlag-Argument mit C++ konstruiert.

von S. B. (Gast)


Lesenswert?

>Aber die derzeitige Realität ist eine andere, und die kann ich mir nicht
>aussuchen, wenn ich damit meine Brötchen verdienen muss.  Dafür muss
>ich halt (vor allem) C, C++ und Python können.
... und Java wegen dem Handyboom.
Es hängt alles von den Endgeräten und deren Betriebssystem ab.
Es geht nicht mehr darum, ob eine Programmiersprache gut oder schlecht 
ist - das war früher wo Speicherbedarf noch ein Thema war anders.
Nächste Tendenz werden dann wahrscheinlich Satzbaukasten 
Programmiersprachen sein ): sieht man ja jetzt schon im Bereich 
Homepage.
Einzig und allein der Verbreitungsgrad und die Marktführerschaft ist 
maßgebend - da hat sich damals C gegenüber Pascal, Fortran und Forth 
durchgesetzt und heute ist es eben Java wegen des Handybooms und ggf. 
noch Objective C wegen iphone oder Visual C++ wenn es um Windows geht. 
Je nach Anwendungsbereich gibt es noch eine Programmiersprache, die im 
Bereich x marktführend ist.
Damit mußt Du Dich als Programmierer abfinden, privat kannst Du gerne 
andere Sprachen nutzen, z.B. Ada, Fortran, Basic, Assembler, usw. - aber 
das interessiert sonst niemanden mehr.
Das Mittelmaß setzt sich immer irgendwie durch ):

von Ralf D. (doeblitz)


Lesenswert?

A. K. schrieb:
> Ich schrieb:
>> Ist eine gute Programmiersprache nicht die, die das gerade aktuelle
>> Problem einfach zu lösen vermag?
>
> Aber was, wenn das morgige Problem damit nicht mehr einfach zu lösen
> ist? Ist sie dann immer noch gut, oder ist morgen eine andere Sprache
> auch gut, die es heute noch nicht war? Und nach einem Jahr hast du
> 365,25 irgendwann einmal gute Sprachen auf der Platte?

Ja, natürlich, wenn du jeden Tag ein Problem aus einer anderen Domain zu 
lösen hast, dann könnte das passieren. Ist ja auch nichts schlimmes.

Eine der wichtigsten Sachen, die man im Informatik-Studium lernt, ist 
doch, daß man
1. das Problem analysiert
2. eine Lösungsmöglichkeit findet
3. diese Lösung in einer dafür passenden Sprache implementiert.

In der Industrie wird gerne die Reheinfolge umgestellt und ide 
Sprachauswahl aus Schritt 0 vorgegeben. Und dann wundert man sich bei 
manchen Projekten, warum die Umsetzung so lange dauert und so 
fehlerträchtig ist. BTST.

Für manche Probleme ist eben C gut geeignet, bei anderen nimmt man 
besser C++ oder Perl oder J oder Icon oder Erlang oder ... - die wurden 
ja nicht zum Spaß erfunden, sondern weil da jemand verstanden hatte, daß 
eine passende Sprache langfristig günstiger ist als mit einer nicht 
wirklich passenden "Universalsprache" (die es eben in der Realität nicht 
gibt) alles lösen zu wollen.

von Zeno (Gast)


Lesenswert?

Jörg W. schrieb:
> bisher
> hat noch kein einziger Kunde auch nur danach gefragt.

Also bei uns läuft das anders. Der Kunde stellt eine Anforderung was er 
haben möchte, was im allgemeinen über ein Lastenheft läuft. Wie wir das 
Ganze dann umsetzen, supporten etc. ist unsere Sache.
Bisher hat uns noch kein Kunde vorgeschrieben in welcher 
Programmiersprache wir das zu tun hätten. Die einzigen die uns derzeit 
in eine Richtung drängen sind unsere Chefs, denn die möchten das wir 
alles in .net und C# machen, weil sie meinen das sei die neue 
Wunderwaffe. Die kommen aber allesamt nicht vom Fach weder hard- noch 
softwareseitig, sondern sind Betriebswirte.

Zeno

von Zeno (Gast)


Lesenswert?

Ralf D. schrieb:
> In der Industrie wird gerne die Reheinfolge umgestellt und ide
> Sprachauswahl aus Schritt 0 vorgegeben. Und dann wundert man sich bei
> manchen Projekten, warum die Umsetzung so lange dauert und so
> fehlerträchtig ist. BTST.

Da hast Du den Kern getroffen. Bei uns ist es genau so (s. meinen 
vorherigen Post).

Zeno

von bert3 (Gast)


Lesenswert?

>Naja so toll ist C# nun auch wieder nicht obwohl es schon einige nette
>Features hat, z.B. nullable Variable. Leider hat man es mal wieder nicht
>konsequent gemacht, indem alle Typen generell nullable sind (man muß ja
>die nullable Eigenschaft nicht nutzen)

Es war falsch manche Typen implicit als Nullable zu haben - es sollte 
IMMER explicit angefordert werden

siehe auch:

https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare

http://twistedoakstudios.com/blog/Post330_non-nullable-types-vs-c-fixing-the-billion-dollar-mistake

sogar der der Chef-Entwickler von .Net/C# sagt das wäre der größte von 
allen Fehler gewesen

von Zeno (Gast)


Lesenswert?

bert3 schrieb:
> Es war falsch manche Typen implicit als Nullable zu haben - es sollte
> IMMER explicit angefordert werden

Kann man so und so sehen. Wenn ih heraus finden möchte ob überhaupt 
Werte/Daten zugewiesen wurden ist das schon ganz praktisch. Derzeit löst 
man so etwas indem man die Variable auf einen Wert setzt der 
normalerweise nicht vorkommt, aber das ist eigentlich eine Krücke. Man 
könnte es auch über ein Struct (C) oder einen Record (Pascal) lösen, was 
aber meist keiner macht.


Zeno

von Bert3 (Gast)


Lesenswert?

@Zeno

Das geht trotzdem nur eben ungleichmaessig

String,  Struktur und class Instanzen sind IMMER implizit nullable
PODs sind nur explizit nullable

int x; // non-nullable
int? x; // nullable - wie std::optional in C++17

Keine immer valide Referenz wie in C++ und das führt zu schlechterem 
Code
siehe Billion Dollar bug

von Arc N. (arc)


Lesenswert?

Bert3 schrieb:
> Keine immer valide Referenz wie in C++ und das führt zu schlechterem
> Code
> siehe Billion Dollar bug

Da könnten sich einige Sprachen Eiffel mal als Vorbild nehmen
Void Safety bzw. die Sprachmittel attached/detachable/stable
https://www.eiffel.org/doc/eiffel/Void-safety%3A%20Background,%20definition,%20and%20tools

Jörg W. schrieb:
> Aber lassen wir das, ich weiß, dass du mit den GCC-Entwicklern
> bezüglich der Aliasing-Regeln nicht konform gehst.  Denk aber dran,
> dass im C-Standard solche Dinge nicht deshalb "implementation
> defined" sind, weil es irgendwer besonders toll fand, sondern weil
> es zum Zeitpunkt der Entscheidung bereits verschiedene Varianten
> gab, irgendwas zu implementieren, und man keine davon für ungültig
> erklären wollte.

Schon klar. An solchen Stellen wäre mir ein Machtwort, von welcher Seite 
auch immer, lieber gewesen als ein "Kompromiss", der, wie in diesem 
Fall, nicht für alle gilt.
Btw.: Das ist auch eines der Probleme von Microsoft (gewesen). 
Kompatibilität mit allen noch so kaputten Anwendungen zu wahren, anstatt 
klar zu sagen: Ihr nutzt hier undefiniertes Verhalten.

> Allerdings habe ich weiter oben eine C-Referenz von Dennis Ritchie
> von 1974 zitiert, in der dieser Aspekt bereits genauso klipp und
> klar festgeschrieben war.

1974 war ich noch ein klein wenig zu jung für C ;)
Ich hatte (keine Ahnung wo die hin ist) nur die C-Bibel (die Second 
Edition), kann allerdings nicht sagen ob das da auch drin steht 
(vermutlich schon, wenn es in der 1974er Referenz steht)

mh schrieb:
> Arc N. schrieb:
>> Zudem gilt das ganze für C++ nicht mehr sobald dort ein Typ mit
>> entsprechend überladenen Operatoren auftaucht, dann wird alles
>> ausgewertet...
>
> Das ist tatsächlich eine gemeine Falle. Und es ist meiner Meinung nach
> ein guter Grund, warum man das Überladen von operator&& und || nicht
> hätte erlauben dürfen.

Man hätte genauso gut einfach definieren können: Überladene Operatoren 
verhalten sich wie nicht überladene.
Schöne Erklärungen zu C++ und wie es in C# anders gemacht wurde:
http://stackoverflow.com/questions/25913237/is-there-actually-a-reason-why-overloaded-and-dont-short-circuit

> Es zwingt einen aber auch niemand dazu sie zu
> überladen. Fällt dir ein Beispiel ein wann man einen der beiden
> Operatoren überladen möchte?

Dazu schreibe ich zu wenig "abgefahrenes" C++. Stichwort wäre, wenn ich 
mich recht erinnere, Expression Template.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Arc N. schrieb:

> Schon klar. An solchen Stellen wäre mir ein Machtwort, von welcher Seite
> auch immer, lieber gewesen als ein "Kompromiss", der, wie in diesem
> Fall, nicht für alle gilt.

Der Kompromiss gilt schon für alle.  Der Benchmark ist eben nur kein
portables C (wie ich dich verstehe), er ist also nicht strictly
conforming.

Solche Kompromisse braucht es halt in einem Normengremium, denn keiner
will sich von so einem Gremium seine bisherige (in aller Regel mit
Bedacht gewählte) Implementierung plötzlich für ungültig erklären
lassen.

Wurde ja schon mal genannt, das Einzige, was in C im Laufe der Jahre
in der Tat entfernt worden ist, ist gets().  Diese Funktion hätte
es (in der Form) nie geben sollen.

> 1974 war ich noch ein klein wenig zu jung für C ;)

Ich habe da auch gerade erst den Umgang mit dem Rechenschieber
gelernt (oder noch nicht einmal ganz). ;-)

> Ich hatte (keine Ahnung wo die hin ist) nur die C-Bibel (die Second
> Edition), kann allerdings nicht sagen ob das da auch drin steht
> (vermutlich schon, wenn es in der 1974er Referenz steht)

Ja, im ANSI-Standard war es auf jeden Fall schon drin.

Da ich damals von Pascal (was ich vorher viel hobbymäßig genutzt habe)
auf C umgestiegen bin, war mir das als eins der angenehmen Dinge
aufgefallen, auf das man offensichtlich bei der Definition der Sprache
geachtet hatte.  Im Gegensatz zu den vielen Turbo-Pascal-Fans hier
hatte nämlich das GRW-Pascal, was ich zuvor benutzt hatte, keine solche
Option, man musste daher immer die geschachtelten "if" schreiben.

Das zweite, was mir angenehm auffiel damals war, dass man Vergleiche
einfach verknüpfen kann, weil die Priorität sinnvoll sortiert ist:
1
  if (a < b && a > c) { // … 
2
  }

Kann mich dran erinnern, dass man das in Pascal aus unverständlichen
Gründen immer klammern musste.  Scheint übrigens so zu sein, dass
man dies beim Übergang von B auf C erkannt hat, und damals die
Operatoren && und || zusätzlich zu den bereits existierenden & und |
eingeführt hat, um eben diese beiden Dinge auf die Reihe zu bekommen.

: Bearbeitet durch Moderator
von Pandur S. (jetztnicht)


Lesenswert?

>Wieso gibt es keine gute Programmiersprache?

Kommt aus einem Frust heraus. Was wird denn vermisst ?
-Lesbarkeit ?
-Konzepte ?
-Interne Eigenschaften ?
-spezielle Libraries ?
-bessere IDE zum Entwickeln ?

Meine Anforderungen an die Sprache:
- einfache Lesbarkeit auch nach 10 Jahren noch.
- Portierbarkeit ist nicht benoetigt.

Anforderungen an die IDE :
- Debuggen muss ein zentrales Konzept sein.

: Bearbeitet durch User
von Paul B. (paul_baumann)


Lesenswert?

Oh D. schrieb:
> Meine Anforderungen an die Sprache:
> - einfache Lesbarkeit auch nach 10 Jahren noch.
> - Portierbarkeit ist nicht benoetigt.

Dann nimm Purebasic für den Rechner und Bascom für AVR-Kontroller.

MfG Paul

von Pandur S. (jetztnicht)


Lesenswert?

Danke, ich weiss was ich habe und bin zufrieden,. Es war weniger eine 
spezifische Frage, als eher die Diskussion von der andeeen Seite zu 
beginnen. Weswegen koennte man unzufrieden sein.

von Nop (Gast)


Lesenswert?

Oh D. schrieb:
> Meine Anforderungen an die Sprache:
> - einfache Lesbarkeit auch nach 10 Jahren noch.

C, die Sprache wird auch in 10 Jahren noch so sein. Schlicht und 
schnörkelos.

> - Portierbarkeit ist nicht benoetigt.

Bietet C trotzdem.

> Anforderungen an die IDE :
> - Debuggen muss ein zentrales Konzept sein.

C mit GDB, am besten in der Kommandozeile (habe ich tatsächlich schon 
erfolgreich genutzt, ist gar nicht so schwer). Oder x-beliebige 
graphische Aufsätze dafür.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

mh schrieb:
> Arc N. schrieb:
>> Zudem gilt das ganze für C++ nicht mehr sobald dort ein Typ mit
>> entsprechend überladenen Operatoren auftaucht, dann wird alles
>> ausgewertet...
>
> Das ist tatsächlich eine gemeine Falle.

Aber nur, wenn man davon ausgeht, dass das überladene && ähnliche 
Semantik hat wie das native, nämlich dass es ein "Logisch And" 
darstellt.  Diese Implikation ist aber von WG21 offenbar nicht gewollt, 
was auch durchaus plausibel ist:  warum sollte das überladene && ein 
"Logisch And" sein müssen?

> Und es ist meiner Meinung nach ein guter Grund, warum man das Überladen
> von operator&& und || nicht hätte erlauben dürfen.

Das wäre aber ein seltsames Verbot...  Wenn z.B. % überladen wird, muss 
das ja nicht ein "modulo" sein, sondern kann z.B. auch ein Kreuzprodukt 
von Vektoren sein (weil * bereits durch Skalaprodukt belegt ist).

> Es zwingt einen aber auch niemand dazu sie zu überladen. Fällt dir ein
> Beispiel ein wann man einen der beiden Operatoren überladen möchte?

Kommt darauf an, was man && machen lassen will :-)

Wenn es tatsächlich sowas wie "Logisch Und" sein soll, dann zieht man 
sich besser auf das && für bool zurück falls möglich und überlädt z.B. 
den Cast-Operator für bool, der dann true liefert falls das Objekt 
"nicht-leer" ist (z.B. bei Arithmetik auf Mengen oder Intervallen), oder 
falls es nicht der Null-Vector etc ist.

von Ich (Gast)


Lesenswert?


von Oliver S. (oliverso)


Lesenswert?

Johann L. schrieb:
> Aber nur, wenn man davon ausgeht, dass das überladene && ähnliche
> Semantik hat wie das native, nämlich dass es ein "Logisch And"
> darstellt.  Diese Implikation ist aber von WG21 offenbar nicht gewollt,

Vermutlich auf Rücksicht auf einen zukünftigen obfuscated C++ contest...

Oliver

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

S. R. schrieb:
> Die Frage ist nicht, ob es für deine drei bevorzugten Implementierungen
> gilt, sondern ob es für alle gilt und ob du denen das ansehen kannst,
> ohne vorher deren Dokumentation vollständig zu lesen. Wenn an einem
> C-Compiler "ANSI-C" dransteht, dann kann der mindestens C89, und zwar -
> Ausnahmen ausgenommen - vollständig.

Nana, immer vollständig?
Das stimmt so natürlich nicht. Die echte Hauptsache an ANSI war ja doch 
das Richtigstellen der zuvor extrem verquaasten K&R-Syntax bei 
Funktionsköpfen.

Aber da du von "vollständig" redest, fällt mir gerade der AVR-GCC ein, 
du weißt schon, der ohne double. Ich sag's mal so: Es macht für einige 
Architekturen keinen wirklichen Sinn, unter größten Mühen irgend einen 
Standard hinkriegen zu wollen. Stattdessen ist es m.E. durchaus 
sinnvoll, für sowas eben eine vom Üblichen abweichende Implementierung 
zu haben. Sonst gehen nämlich Features der Hardware flöten und die 
Verwendung der betreffenden Programmiersprache wäre kontraproduktiv.

Siehst du, wir landen vom Klagen über den Mangel an guten 
Programmersprachen über die Kontroverse C <-->Pascal schlußendlich bei 
Vorstellungen über die Zukunft:

Ist es denkbar und auch wünschenswert, in Zukunft eine Weiterentwicklung 
der derzeitigen µC-Szene zu haben, mit neuen Features, die in 
derzeitigen programmiersprachen noch gar nicht berücksichtigt sein 
können? Wo es also entweder ein Umkrempeln bisheriger 
Programmiersprachen oder ein Brachliegen selbiger Features geben MUSS?


Jörg W. schrieb:
> Wozu rechtfertigen?
> Schau dir doch einfach die realen Verhältnisse an.

Das ist Leben von der Hand in den Mund. jaja, es machen die meisten von 
uns (mich eingeschlossen) dies eben genau so: Man benutzt, was grad da 
ist, denn man will ja in endlicher Zeit fertig werden.

Und so generiert sich der Teufelskreis immer wieder von Neuem:

Was da ist wird benutzt, die Hersteller produzieren vor allem das, was 
am meisten geht, anderes verschwindet aus dem Angebot, also benutzt man 
das, was da ist,.... Kreis geschlossen.

Es ist eben für den Augenblick das Ökonomischste, auf den Mainstream 
aufzuspringen - aber es ist auf lange Sicht durchaus nicht klug. Das ist 
der Punkt.

Du sprichst von Rechtfertigungen, die überflüssig sind, weil es ja 
angeblich nicht relevant ist. Also "C ist besser, weil mehr davon da 
ist"?

Ist Masse besser als Klasse?

Nein, das ist Tonnenideologie. Ich könnte jetzt stänkern, indem ich 
deine Worte mal auf die Verbreitung von Linux (oder FreeBSD) auf dem PC 
in exakt gleicher Weise gebrauche.

Kurzum, wir werden in Zukunft was anderes benötigen als C, wir sollten 
auch auf Vielfalt achten und etwas gegen den Weg in die Monokultur tun. 
Und da wäre zumindest mehr Verwendung von FreePascal auf dem PC und 
nicht das dümmliche Ablehnen angeraten. Denn: Was man nicht praktiziert, 
das verkümmert und wo keine Nachfrage, dort kein Produzent. Aber wir 
brauchen die Vielfalt - und zwar überall. Ist ne Grundfeste unserer 
Gesellschaft.

W.S.

von S. R. (svenska)


Lesenswert?

Ich weise dich mal dezent darauf hin, den von dir zitierten Text 
nochmals zu lesen. Danke.

von Andreas H. (ahz)


Lesenswert?

Jörg W. schrieb:
>> Mhh. Ich bin mir da nicht sicher, ob die das nicht schon eingesehen
>> hatten als in Ansi-C die Auswertungsreihenfolge solcher Ausdrücke noch
>> "depents on the implementation" war. Und DAS war damals unter UNIX auch
>> immer ein beliebter Fehler, das bekannte (*p && p->x++)  ;-)
>
> Wo hast du das denn her?

Ich hatte so einen Fehler mal auf einer SUN-3 (?).
Da ging es genau so in die Hose, wenn NULL==p war.

Seitdem halte ich mich da (bis heute) immer zurück.

>
> Selbst lange vor ANSI-C war das schon eindeutig festgelegt.
>
> Hier beispielsweise in der Doku von 1974:
>
> https://www.bell-labs.com/usr/dmr/www/cman74.pdf

Oh, das kannte ich noch gar nicht. Von D. Richie noch selbst verfasst. 
Cool :-D

/regards

von Andreas H. (ahz)


Lesenswert?

Nase schrieb:
> Wo liegt denn Pascal im Moment z.B. im TIOBE-Index? 1,5%? 1,9%?
> Tschuldigung, aber so realistisch muss man auch mal sein.

Und wie aussagekräftig ist der TIOBE index?

/regards

von edgar S. (hbl333)


Lesenswert?

>> Und es ist meiner Meinung nach ein guter Grund, warum man das Überladen
>> von operator&& und || nicht hätte erlauben dürfen.

Jaja, was überladen ist bricht auch irgendwann zusammen...

von Nop (Gast)


Lesenswert?

W.S. schrieb:

> Ist es denkbar und auch wünschenswert, in Zukunft eine Weiterentwicklung
> der derzeitigen µC-Szene zu haben, mit neuen Features, die in
> derzeitigen programmiersprachen noch gar nicht berücksichtigt sein
> können?

Erstens deutet nichts darauf hin, und zweitens abstrahiert C ohnehin die 
Hardware zu einer logischen Maschine hin. Außerdem werden heute CPUs 
compilergerecht entfworfen.

> Wo es also entweder ein Umkrempeln bisheriger
> Programmiersprachen oder ein Brachliegen selbiger Features geben MUSS?

Fehlschluß - neue Anwendungen lassen sich in Software machen, denn das 
ist genau der Witz an programmierbaren Computern. Für komplexere Sachen 
gibt's Frameworks. For komplexe Sachen in Hardware gibt's Libraries, 
Intrinsics und Inline-Assembler.

> Kurzum, wir werden in Zukunft was anderes benötigen als C

Das mag sein, aber eine weitere prozedurale Sprache bietet da bei weitem 
nicht genug Vorteile, weil es immer noch genau dasselbe Paradigma ist. 
Der Zug für Pascal ist in der Praxis einfach abgefahren, und ich finde 
es auch nicht weiter schade.

> Aber wir brauchen die Vielfalt

Beweis durch Wiederholung der Behauptung nennt sich Zirkelschluß. Nein, 
wir brauchen nicht dasselbe Rad in nochmal. Das ist eher hinderlich, 
weil die Sourcen dann nicht interoperabel sind und man in jeder Sprache 
alles nochmal implementieren muß, ohne daß dabei ein Nutzen herauskommt.

Stichwort "Opportunitätskosten", will sagen haufenweise vollkommen 
sinnlos verballerte Arbeit und Kreativität, nur weil man einen Zoo haben 
will.

Nein, Vielfalt um der Vielfalt willen ist NICHT per se gut, sondern es 
ist im Einzelfall deren Nutzen nachzuweisen.

Du beschwerst Dich ja auch nicht, daß hier jede Steckdose 230V/50Hz hat 
und nicht bunte Vielfalt von 115V/400Hz bis zu 580V/15Hz aus der 
Steckdose kommt. Og du klager ikke heller om at jeg ikke tilføyer noe 
manfolg her ved bruk av andre språk, ikke sant?

Ach ja, was Pascal das Genick gebrochen hat, war insbesondere die 
"Vielfalt" - nämlich die aus lauter brauchbaren, aber zu nichts 
kompatiblen Inselpascals in Verbindung mit einem gemeinsamen, aber 
unbrauchbaren (ud praktisch deswegen irrelevanten) Standard.

Außerdem hat man nach jeder Vielfaltsexplosion in der Technikgeschichte 
auch eine Konsolidierungsphase, in der sich das Bewährte eben 
herauskristallisiert.

von W.S. (Gast)


Lesenswert?

Nop schrieb:
> Erstens deutet nichts darauf hin, und zweitens abstrahiert C ohnehin die
> Hardware zu einer logischen Maschine hin. Außerdem werden heute CPUs
> compilergerecht entfworfen.

Es deutet nichts darauf hin?
Nun, ich habe soviele Anwendungen in plain C für WinCE geschrieben, daß 
ich inzwischen davon die Nase voll habe. Es deutet durchaus sehr viel 
darauf hin, daß C bereits heute als Programmiersprache auf dem PC nicht 
mehr ausreichend ist. Also schreib nicht, daß nichts drauf hindeuten 
würde. Nur so als Beispiel. Ein zweites Beispiel sind die alljährlichen 
Versuche, mit all solchen Programmiersprachen wie der TO sie beklagt 
hat, von plain C wegzukommen. Mach also die Augen auf und sieh, was die 
Leute zuRecht bedrückt. Das Alberne daran ist, daß selbst diejenigen, 
die den Versuch wagen, nicht mehr von ihrer C-Denke loskommen können 
(ähem.. es ist weniger albern, sondern eher bedenklich).

Und was soll das mit den heutigen CPU's? Ich schrieb von 
übermorgigen, weil mit zumindest klar ist, daß jetzige Erfahrungen 
lediglich den Wissensstand der Vergangenheit als Basis haben können. 
Anstatt zu tröten "Ich seh gemäß heutigem Stand keinerlei Künftiges", 
solltest du bedenken, daß vor vierzig Jahren auch noch keiner ans 
Intenet gedacht hat oder an Smartphones (wenn man mal von 
Spock&Konsorten absieht) oder Google oder die NSA oder Chips mit 17 nm 
Strukturbreiten.

Und jetzt komm ich dazu, nochmal aufzuwärmen, daß es C bis heute nicht 
geschafft hat, zu verläßlichen saubeen Integer-Datentypen zu kommen - 
vom Aufräumen in anderen Dingen mal ganz abgesehen. Von Konferenz zu 
Konferenz kreißt der Berg immer heftiger - und er gebiert immer kleinere 
Mäuse. So sieht Zukunftsfähigkeit NICHT aus.

W.S.

von S. R. (svenska)


Lesenswert?

W.S. schrieb:
> Und jetzt komm ich dazu, nochmal aufzuwärmen, daß es C bis heute nicht
> geschafft hat, zu verläßlichen saubeen Integer-Datentypen zu kommen.

Was hättest du denn gerne?
- Es gibt garantierte Bitbreiten (intXX_t, uintXX_t).
- Es gibt garantierte Mindestbitbreiten (int_leastXX_t, uint_leastXX_t).
- Es gibt garantierte Mindestbitbreiten mit Performancevorteilen
  (int_fastXX_t, uint_fastXX_t).

Die sind alle seit C99 fest im Standard verankert.

C ist auf dem PC vollkommen ausreichend, aber - und da stimme ich dir 
vollkommen zu - bei weitem nicht angenehm. Es gibt deutlich bessere 
Alternativen.

Es gibt für jeden Anwendungsbereich bessere Sprachen als C. Aber es gibt 
keine Sprache, die in allen Anwendungsbereichen mindestens gleich gut 
geeignet ist wie C.

Eine Programmiersprache, die C vom Thron stoßen könnte, muss:
- prozedural sein (sonst ist sie keine Alternative)
- vollständig ohne dynamischen Speicher und ohne MMU klarkommen
- aber von einer MMU und viel RAM profitieren können
- hinreichend standardisiert sein und über alle Architekturen hinweg
  Compilersupport (inkl. Zertifizierung) anbieten
- eine gute Codebasis haben

Und da wird es plötzlich sehr dünn.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andreas H. schrieb:
> Jörg W. schrieb:
>>> Mhh. Ich bin mir da nicht sicher, ob die das nicht schon eingesehen
>>> hatten als in Ansi-C die Auswertungsreihenfolge solcher Ausdrücke noch
>>> "depents on the implementation" war. Und DAS war damals unter UNIX auch
>>> immer ein beliebter Fehler, das bekannte (*p && p->x++)  ;-)
>>
>> Wo hast du das denn her?
>
> Ich hatte so einen Fehler mal auf einer SUN-3 (?).
> Da ging es genau so in die Hose, wenn NULL==p war.

Dürfte dann ein arger Compilerbug gewesen sein.

> Seitdem halte ich mich da (bis heute) immer zurück.

Grundlos.

> Oh, das kannte ich noch gar nicht. Von D. Richie noch selbst verfasst.
> Cool :-D

Yep, ich finde das auch nett, dass die Bell Labs seine Webseite
aufrecht erhalten, einschließlich eben der historischen Dinge, die
er da gesammelt hat.

Wenn man sich das ansieht, dann waren offenbar die Shortcuts sowie
die sinnvolle Vorrangfolge zwischen Vergleich und logischer
Verknüpfung (sodass man beim Verknüpfen von Vergleichen nicht klammern
muss) eben genau eine der Änderungen von „B“ nach „C“, indem man
eigens dafür die Operatoren && und || eingeführt hat.

von Nop (Gast)


Lesenswert?

W.S. schrieb:

> Es deutet durchaus sehr viel
> darauf hin, daß C bereits heute als Programmiersprache auf dem PC nicht
> mehr ausreichend ist.

Auf dem PC ja. U.a. weil man in C nicht nur Ressourcenmanagement manuell 
machen muß, sondern bei Multicores auch noch deren Verwaltung. Es 
existiert keine Sprachunterstützung für parallele Verarbeitung. Noch 
viel schlimmer wird es, wenn man nicht nur auf einem Rechner parallel 
rechnen will, sondern eine Anwendung für ganze Cluster haben will.

Ist Pascal da eine Abhilfe? NEIN, denn das ist in derselben Lage. Es 
bietet dasselbe wie C, nur in ein bißchen anders. Wo man mit C nicht 
hinkommt, braucht man mit Pascal auch gar nicht erst anzufangen. 
Vielfalt ist da allenfalls nervig, aber nicht produktiv.

"Hauptsache anders", um Fortschritt zu suggerieren, wo schlichtweg 
keiner drin ist, das fällt zumindest bei mir knallhart durch. Wegen 
"brauch ich nicht, da kein Mehrwert".

> Und was soll das mit den heutigen CPU's? Ich schrieb von
> übermorgigen, weil mit zumindest klar ist, daß jetzige Erfahrungen
> lediglich den Wissensstand der Vergangenheit als Basis haben können.

Auch die werden einen C-Compiler haben. Sie werden schlichtweg keine 
totalen Kracherfeatures haben, die man mit C inkl. Libs nicht nutzen 
kann, aber mit Pascal schon, das ist Blödsinn.

Es ist schlichtweg wurscht, ob man diese CPUs jetzt mobil einsetzt, oder 
in welchem Prozeß sie gefertigt werden.

> Und jetzt komm ich dazu, nochmal aufzuwärmen, daß es C bis heute nicht
> geschafft hat, zu verläßlichen saubeen Integer-Datentypen zu kommen

Das erzählst Du seit geraumer Zeit, und es ist immer noch Unsinn. Seit 
C99 gibt's das plattformübergreifend standardisiert, und das nutze ich 
auch sehr gerne. C99ist jetzt schon 18 Jahre her, was als Programmierer 
wirklich genug Zeit war, sich damit zu befassen, um nicht solchen Unsinn 
zu erzählen.

> Von Konferenz zu Konferenz kreißt der Berg immer heftiger

Tut er bei C schlichtweg nicht. Muß er auch nicht, sonst kommt nämlich 
sowas wie C++ am Ende heraus. :-P

von Thomas M. (langhaarrocker)


Lesenswert?

Habe schon oft gelesen C sei gut für hardwarenahes Programmieren, gerade 
auch für Mikrocontroller. Aber die paar wenigen Mikrocontroller, die ich 
bisher in die Finger bekommen hatte, waren allesamt Havard 
Architekturen. Und für mehrere Addressräume auf verschiedenen 
Bussystemen hat C nun mal nichts in der Trickkiste. Da wird dann der 
Linker vergewaltigt die Havard Architektur zu einer verkrüppelten 
Pseudo-Van-Neumann-Maschine zu prügeln. Schon bei eigentlich trivialen 
Datenjonglierereien um ein paar structs zwischen Ram, Progmem und EEmem 
zu verlinken verdreht's mir da ratzfatz die Hirnwindungen. C ist für 
sowas einfach nicht gemacht.

Aber gibt es überhaupt Programmiersprachen, die für Havard Architekturen 
geeignet sind? Außer in Assembler habe ich das in keiner der Sprachen, 
die ich bisher kennengelernt habe, gesehen. (C, C++, C#, Java, 
Ecmascript, Lua, Pascal, Basic, PHP, ...)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.