Forum: Offtopic Warum eigentlich C? (bitte ohne geflame und zynische Kommentare)


von Jens P. (Gast)


Lesenswert?

Hey Leute,

ich bin zwar keinb prof. Programmierer, aber habe schon das ein oder 
andere "zusammengeschnipselt" was im Geschäft gebraucht wird (ein 
Digitales Sprachlabor bestehend aus mehreren Programmen). Dazu benutze 
ich VB2005.

Bei meinen µC-Projekten mache ich mich noch unbeliebter. Erstens benutze 
ich PICs, zweitens benutze ich dort ebenfalls Basic.

Auf der Technikerschule kommen jetzt AVR und C auf mich zu. Gut, seh ich 
mal was anderes.

Was mich jetzt interessieren würde: Warum wird C als Programmiersprache 
so vehement als das non plus ultra hochgehalten?

"Früher" konnte man das ja verstehen. Basic war eher ein augebohrter 
Script-Interpreter, während C "echte" Programme, bzw eben einfach 
Maschinencode der nicht mehr zur Laufzeit interpretiert werden musste.

Aber wie sieht es heute aus?
Ok, lassen wir mal mangels Basic- unterstützung und interesse das 
Linux-Lager ausnahmsweise explizit aussen vor.

Wenn ich einen µC programmiere, dann wird ja auf dem nicht Basic 
interpretiert, sondern der wandelt meine Basic-Befehle genau wie die 
C-Befehle in Maschinencode um.

Was ist hieran schlechter?

Wenn ich einen PC (unter Windows) programmiere, und vb in einer der 
.NET-Versionen benutze, dann werden ALLE sprachen in die CLR übersetzt 
und interpretiert. Warum sollte C# hier einen Vorteil ggenüber VB haben?

Ich möchte hier nicht C schlecht reden. Mir persönlich gefällt nur die 
Syntax von Basic wesentlich besser, da sich einfach mehr an "Sprache" 
statt an Kryptische Zeichen gehalten wird.

Wo liegt denn aber in der Zeit nach MS-DOS der große unterschied 
zwischen Basic und C, ausser der Syntax?

Ich möchte hier keinen Zigtausendsten Thread C vs Basic lostreten oder 
igrendetwas diskreditieren, sondern einfach in Erfahrung bringen ob es 
(ausser dem größeren Supportangebot dank größerer Verbreitung) 
eigentlich einen wirklichen Vorteil von C gibt (Portierbarkeit 
Windows-Linux-Unix mal aussenvor gelassen).

Freue mich auf jede ernst gemeinte, nicht blind zynische Antwort.

greets, Jens

von Phil J. (sunflower_seed)


Lesenswert?

Also ich bin auch damals mit VB angefangen.
Und fand alles schön einfach...

Irgendwann bin ich dann ins Webdesign gekommen und bei php gelandet. - 
Wenn du es nicht weißt: PHP hat in seinen Grundzügen zunächst einmal 
viel Ähnlichkeit mit C.
Dort zeigen sich die Vorteile:
Wenn man einmal das System verstanden hat, ist der Syntax viel einfacher 
und strukturierter als bei Basic.
Und wegen der Objektorientierten Ausrichtung kann wirklich auf 
unkomplizierte Weise Probleme lösen.
Das merke ich aktuell, weil ich  mich zwangsweise mit Delphi 
beschäftige, da wechseln die Regeln ständig, Fehlermeldungen sind 
vorprogrammiert, naja...

Außerdem musst alles als globales System betrachten:
Der PC setzt alles im Assembler um und das wiederum alles in Nullen und 
Einsen, das ist zunächst einmal eine erstaunliche Leistung. (Finde ich)
Dieses Übersetzen in Assebmler geht eigentlich am besten mit C, Basic 
ist da er unproduktiv, weil mehr Begriff umgesetzt werden, bei C reicht 
da die Symbolik für einige begins und ends.
Außerdem ist das Umfeld von C viel grösser, schau dir mal dein 
PC-Programm an, das läuft, wenn du glück hast auf deinem PC oder auf 
einem oder zwei anderen.
Dem ist mit C nicht so. C hat sich als Standard eingebürgert.

Das heisst nicht, dass ich nicht auch an C verzweifele, auch das 
passiert mir gerade, hat zwar mehr mit nem bekloppten Compiler zu tun, 
aber das gehört nicht hierher.

von andy (Gast)


Lesenswert?

C ist einfach der defacto standard. daraus resultiert dass es eine 
riesige codebase in C gibt, desweiteren sind für (fast) alle plattformen 
sehr performante compiler zu haben. es hat sich im lauf der jahrzehnte 
gut entwickelt, bewährt und ist quasi "frei".
daraus folgt dass sehr viele leute C "können" - ich kann zb kein basic. 
darum solltest du dich lieber fragen warum kein C ;)

von Gabriel W. (gagosoft)


Lesenswert?

Ich hab mit Pascal angefangen, zu Zeiten als Basic eine rein 
interpretierte Sprache war. Meine ersten µC Programme hab ich auch mit 
pascal für den 8051er gemacht.... Anfangs hatte ich auch Probleme, die 
"Sprache Pascal" gegen "C Code" einzutauschen, ist aber gewöhnungssache. 
Ärgern muss man sich mit Compiler mal...
Für jede Anwendung gibts die richtigen Sprachen, warum für Controller 
gerade C?
C hat sich etabliert, zu so gut wie jedem Prozessor gibt's einen C 
Compiler. Womöglich haben einfach viele Entwickler alles andere auch in 
C gecoded, dann halt auch den µC. C hat sehr wenige "echte" Befehle, 
diese sind in ANSI C festgelegt, da ändert sich quasi nichts mehr. Viel 
Funktionalität (zB printf...) ist in Libraries gepackt. C hat keine 
"Dialekte", die's ja in manchen anderen Sprachen gibt (Pascal, Basic 
fallen mir spontan ein). Bei anderen Sprachen steht man abseits des 
Standard PC oftmals an. Viele Hersteller haben auch in den Datasheets C 
und ASM Beispiele angeführt, die man dann in seine eigene Sprache 
portieren müsste. Viele Bibliotheken für Controller sind in C 
geschrieben. Zu guter letzt bin ich immer wieder beeindruckt, wieviele 
Architekturen GCC unterstützt.
Auch wenn Code, den man für Controller schreibt nicht ohne Änderung auf 
eine andere Plattform portiert werden kann, so kann man doch sicher sein 
einen C Compiler für Contoller XY zu bekommen. Also kann ich mit C 
(fast) jede Architektur programmieren, zu der ich einen Compiler 
bekommen kann.

Meines Erachtens hat sich der Aufwand C zu lernen für mich gelohnt.
...ich muss ja nicht alles in C Coden    ;)

von daniel (Gast)


Lesenswert?

Warum C? Das erkennst du wenn du es kannst.
Warum eine dynamische Sprache {Python,Ruby,Perl}?
Nachdem man statisch verseucht ist, erkennt man es auch
erst wenn man es kann.
Warum eine funktionale Sprache {CLisp,Haskell}?
... Auch das versteht man erst wenn man es kann ...

Lange Rede kurzer Sinn, du musst es dir neutral
und unvoreingenommen anschauen .. und später
darüber Reflektieren, was dir die neue Sprache
an neuen Konzepten gebracht hat.

grüsse. daniel

von yalu (Gast)


Lesenswert?

> Was mich jetzt interessieren würde: Warum wird C als
> Programmiersprache so vehement als das non plus ultra hochgehalten?

Ich würde C nicht als das Non-Plus-Ultra, sondern eher als den besten
Kompromiss für viele Anwendungsfälle betrachten und glaube, dass die
meisten C-Programmierer ebenso denken.

> "Früher" konnte man das ja verstehen. Basic war eher ein augebohrter
> Script-Interpreter, während C "echte" Programme, bzw eben einfach
> Maschinencode der nicht mehr zur Laufzeit interpretiert werden
> musste.

Und genau in dieser Zeit sind viele Programmierer, die mit Basic
aufgewachsen sind, auf die damals neue und sehr coole Sprache C
umgestiegen.

> Aber wie sieht es heute aus?

Die Programmierer, die damals Basic den Rücken gekehrt oder gar nie
mit Basic angefangen haben, sind gößtenteils heute noch aktiv.

> Ok, lassen wir mal mangels Basic- unterstützung und interesse das
> Linux-Lager ausnahmsweise explizit aussen vor.

Basic unter Linux gibt es, sogar mehrere Systeme. Ich würde aber
behaupten, dass für jeden Rechner, für den es Basic gibt, auch ein
C-Compiler verfügbar ist, aber nicht umgekehrt. Insbesondere bei neuen
Prozessoren wird anfangs meist nur die Programmierung in C oder
Assembler angeboten. In C kann praktisch jeder Rechner programmiert
werden, angefangen vom 1€-Mikrocontroller bis hin zum hunderte
Millionen Euro teuren Supercomputer.

C ist unter den Programmiersprachen in etwa das, was Englisch unter
den natürlichen Sprachen ist. Auch wenn Englisch sicher nicht die
schönste Sprache ist, tut man gut daran, sie zu lernen.

> Wenn ich einen µC programmiere, dann wird ja auf dem nicht Basic
> interpretiert, sondern der wandelt meine Basic-Befehle genau wie die
> C-Befehle in Maschinencode um.

Die Basic-Compiler sind im Laufe der Zeit besser geworden. Aber die
C-Compiler waren eben auch früher schon gut. Wer zuerst kommt, mahlt
zuerst.

> Mir persönlich gefällt nur die Syntax von Basic wesentlich besser,
> da sich einfach mehr an "Sprache" statt an Kryptische Zeichen
> gehalten wird.

Warum programmierst du dann nicht in Cobol? Die Basic-Programmzeile
1
LET RESULT = FACTOR1 * FACTOR2

ist doch für einen Außenstehenden ziemlich kryptisch. Was soll bspw.
dieser Stern in der Mitte? Geht es hier etwa um astronomische
Berechnungen? In Cobol würde man statt dessen schreiben
1
MULTYPLY FACTOR1 BY FACTOR2 GIVING RESULT.

So sieht ein ordentlicher Satz aus, den auch ein Nichtprogrammierer
versteht. Sogar der Punkt am Satzende fehlt nicht. Für einen
Cobol-Programmierer sind deswegen deine Basic-Programme genauso
kryptisch wie für dich die C-Programme. Cobol hat sich trotzdem nicht
durchgesetzt. Warum sollte es Basic anders ergehen?

Auch mathematische Formeln mögen kryptisch aussehen. Würde ein
Mathematiker deswegen auf die Idee kommen, komplexe Zusammenhänge
komplett in Prosa zu beschreiben?

> Ich möchte ... einfach in Erfahrung bringen ob es ... eigentlich
> einen wirklichen Vorteil von C gibt (Portierbarkeit
> Windows-Linux-Unix mal aussenvor gelassen).

Die Portierbarkeit ist aber gerade ein wesentlicher Punkt. Reiner
C-Code, der keine Spezialbibliotheken nutzt, ist dank des
ISO-Sprachstandards, den die Compilerhersteller im Wesentlichen auch
umsetzen, auf unterschiedlichen Systemen ohne große Änderungen
komilierbar. Für Basic gibt es zwar ebenfalls einen ISO-Standard. Den
haben aber sicher die meisten Hersteller noch nie zu Gesicht bekommen.
Das Ergebnis: Hunderte verschiedener Basic-Dialekte:

  http://de.wikipedia.org/wiki/Liste_der_BASIC-Dialekte

Außerdem: C ist nun einmal - aus welchen Gründen auch immer - weiter
verbreitet als Basic. Selbst wenn Basic gegenüber C keinen einzigen
technischen Nachteil hätte: Um die Masse der C-Programmierer dazu zu
bewegen, auch Basic umzusteigen, müsste es nicht nur gleich gut sein,
sondern gegenüber C massive Vorteile aufweisen können. Aber was sind
diese Vorteile, außer der (aber auch nur für manche) etwas netteren
Syntax?

Es gibt mittlerweile tatsächlich einige neuere Programmiersprachen,
die mit C in einigen Anwendungsfeldern konkurrieren können. Dazu
zählen bspw. die so genannten VHLLs (Very High Level Languages) wie
Python oder Ruby, deren Ziel es ist, die Softwareentwicklungszeit auf
Kosten des Rechenzeit- und Speicherverbrauchs zu reduzieren. Da aber
bei mikrocontrollerbasierten Großserienprodukten die Entwicklungszeit
meist weniger schwer wiegt als der Ressourcenverbrauch im fertigen
System, werden C und Assembler noch lange die Sprachen der Wahl für
solche Systeme bleiben.

Aber Daniel hat schon recht: Lern C, Python, Lisp und Haskell und mach
dir anschließend selbst ein Bild. Zum Glück sind Programmiersprachen
im Vergleich zu natürlichen Sprachen relativ schnell gelernt.

von chilipower (Gast)


Lesenswert?

Die Syntax und die Funktionsvielfalt sind in c einfach besser. Man kann 
das z.b. sehr schön an der Parametrierung der "for" Schleifen oder bei 
den cast- Operatoren (hat basic jetzt bestimmt auch) sehen. Die 
Konstrukte sind ausgereifter/kompakter und flexibler einsetzbar.

von gnom (Gast)


Lesenswert?

wenn ich mal doof fragen darf (ich mein das jetzt Ernst!) woher rührt 
eigentlich der Name dieser Programmiersprache? ich meine "visual Basic" 
ergibt ja noch einen Sinn wenn man darüber nachdenkt was man damit 
macht, aber wie ist man auf "C" gekommen? hat das eine Bedeutung oder 
war der dritte Buchstaben im Alphabet einfach noch frei?


Lustig find ich ja auch Java, Laut Java Lehrbuch (Handbuch der Java 
programmierung / Guido Krüger) entstand der Name bei einer Kafferunde - 
wär hätte es gedacht ;)

von Gast (Gast)


Lesenswert?


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


Lesenswert?

yalu wrote:

> Ich würde C nicht als das Non-Plus-Ultra, sondern eher als den besten
> Kompromiss für viele Anwendungsfälle betrachten und glaube, dass die
> meisten C-Programmierer ebenso denken.

Ja, das war auch mein erster Gedanke, als ich die ersten Zeilen des
Ursprungsartikels gelesen habe.

BASIC war auch nie eine wirklich schöne Sprache.  Pascal war und ist
eine recht schön aufgebaute Sprache, bestens geeignet für ihren
ursprünglichen Zweck: das Erlernen der Programmierung.  Für mehr als
das war sie in der Ursprungsform nicht unbedingt zu gebrauchen, aber
wer damit programmieren gelernt hat, hat kein Problem, sich danach
in einer anderen (prozeduralen) Sprache auszudrücken.

Ein wesentlicher Vorteil von C ist die insgesamt recht gute
Standardisierung.  Man muss nicht unbedingt eine neue Sprache lernen,
wenn man vom Compiler des Herstellers A auf den des Herstellers B
umsteigen muss.

Man kann übrigens in jeder Programmiersprache unleserlichen
Kauderwelsch verfassen (“Real programmers can write FORTRAN programs
in any language.” :-).  Manche Sprachen wie C oder Perl machen einem
dies zugegebenermaßen einfacher als andere wie Pascal, aber man kann
auch in C lesbare Programme schreiben, wenn man das will -- um so mehr
mit heutigen Compilern, bei denen man nicht gedanklich ,,voroptimieren''
muss, da deren Optimierer gut genug sind, auch etwas ausführlicher
aufgeschriebenen Code in identischen Maschinencode im Vergleich zu
irgendeinem kryptischen Buchstabensalat zu compilieren.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Hallo,

ich möchte hier mal eine Lanze für Basic brechen. Ich verdiene meinen 
Lebensunterhalt mit Programmentwicklung für die Druckindustrie 
(Betriebsdatenerfassung, Prozessanalyse, Datenbank- und 
Warenwirtschaftssysteme, Bildarchive, Bildverarbeitung ...)

Ich bin vor Jahren auf RealBasic (www.realbasic.com) gestossen und 
seitdem dabei geblieben. RealBasic ist eine objektorientierte 
Basic-Version, die es für Windows, Mac OSX und Linux in jeweils 
identischen Versionen gibt. Die IDE enthält einen Cross-Compiler, der es 
gestattet, unter jedem genannten OS auch für die jeweils anderen OS zu 
compilieren. Es entstehen "einteilige" EXE- bzw. APP-Dateien, man 
benötigt keine zusätzliche RuntimeLib oder externe DLLs. Die erstellten 
Programme müssen nicht "installiert" werden, kopieren genügt, laufen 
auch von CD oder USB-Stick. Man kann Programme mit GUI oder auch 
Konsolenprogramme erstellen, auch Dienste und Bildschirmschoner ...

Das klingt jetzt nach Werbung - ist aber ohne Hintergedanken, ich habe 
mit dem Hersteller sonst nix zu schaffen. Es gab bisher keine 
Aufgabenstellung, die daran gescheitert wäre, weil ich Basic verwende. 
Bis hin zu Multimedia-, Netzwerk- oder Datenbank-Themen - es geht flink 
und komfortabel.

Mein bisher größtes Projekt war eine komplette Online-BDE (Personal-, 
Maschinendaten-, Zeit- und Leistungserfassung) für eine Großbuchbinderei 
mit Oracle-Anbindung und zahlreichen Management- und Analysetools. Dabei 
sind ca. 40 Touchscreen-Terminals mit Barcodereader an den 
Arbeitsplätzen in 2 Werkhallen aufgestellt, an denen ca. 250 Angestellte 
Tag für Tag ihre Arbeitsleistung erfassen. Die Daten werden gesammelt, 
sortiert und an ein Warenwirtschaftssystem übergeben. Zusätzlich werden 
6 Netzwerkdrucker bedient, an denen die Mitarbeiter bei Schichtende 
einen Beleg/Tageszettel erhalten. Alles mit RealBasic gemacht ...

Ich glaube, es kommt heute vor allem auf eine vernünftige 
Programmstruktur, auf das funktionierende Grundkonzept an, kaum noch 
darauf, mit welchem Werkzeug man das dann umsetzt.

Frank

von Peter (Gast)


Lesenswert?

Also C kann man ja nicht mit c# vergleichen. Für C gibt es keine 
umsetzung auf CLR.

Ob man nun in C# oder VB.NET programmiert ist egal, der ergebniss ist 
wirklich gleich. Es gibt sogar programme die Versuchen aus C# VB.NET 
code zu machen, was für den eigentlichen Code auch jetzt gut geht aber 
bei schlüsselwörtern versagt.

Zu C. Bei C muss man wissen was man macht. Man kann ich C bei einem 
array mit 10 Elementen auf das 20. zugreiffen und da geht meist auch. 
(ausser das BS hat was dagegen). Andere sprachen pürfen vorher den 
Zugriff und werfen eine exception, aber die Prüfung kostet zeit - darum 
ist die C geschwindigkeit höher.

Bei C/C++ kann man mit einer sprache sich überlegen ob ein Programm sehr 
optimiert sein soll oder gut erweiterbar/flexibel. (z.b. Exceptions oder 
RTTI weglassen)

Leider muss ich auch sagen das die Optimierung der Compiler schlechter 
ist als viele meinen. Ich kann jetzt nur von 6er und 7er MS-compieler 
sprechen dort ist die optimierung schlechter geworden. Wenn es wirklich 
optimiert sein soll hilft nur ein blick auf dei erzeugten ASM code. Die 
compieler schaffen zwar das gesamte programm gleichmässig zu optimieren 
aber ebend nicht aus einer speziellen funktion das optimum rauszuhohlen.

von Sebastian (Gast)


Lesenswert?

Ja, irgendwie gibt es eben kein optimales Werkzeug für alles, sondern 
ein der Aufgabe angemessenes Werkzeug. Das kann dann durchaus auch ein 
guter Basic-Compiler sein - obwohl ich persönlich Basic nicht wirklich 
beherrsche.

Die Cross-Platform-Lösung ist schon ein wichtiges Argument, ebenso das 
mit den einteiligen EXE-Dateien. In den Zeiten heutiger Ressourcen ist 
statisches Linken eine Tugend, denke ich. In dieser Hinsicht hat mich 
auch Profilab (eine graphische Entwicklungsumgebung, für 
Meßtechnikanwendungen unter Windows) beindruckt: Der Compiler erstellt 
EXE-Dateien, in die die ggf. nötigen I/O-Port-Treiber mit eingelinkt 
sind. Diese werden dann je nach Windows-Version beim Programmstart 
geladen und ggf. auch automatisch wieder entladen. Alles ohne Neustart.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Hi Leutz,

C is nach Assembler die effektivste Sprache, um eine Idee zu Papier - 
auf den Prozessor zu bringen.
C erfüllt die denke ich wichtigsten Anforderungen:
- es ist (relativ) leicht lesbar (gegenüber assembler)
- es kann sehr effektiv in assembler umgesetzt werden

Jede Programmiersprache genügt bestimmten Anforderungen. So ist z.B. 
BASIC eine Sprache für "jedermann", da man sie schreiben und lesen kann, 
als würde man eine Arbeitsanweisung für jmd. schreiben. Sie ist sehr 
einfach, wird aber nur interpretiert, d.h. der Interpreter schaut sich 
live alles an und schaut, was er machen muss.

Java ist dazu entwickelt, möglichst überall mit geringer 
Fehleranfälligkeit zu laufen. Das wird durch die VirtualMachine 
sichergestellt, und Mechanismen wie GarbageCatcher etc. Ich finde, es 
wird leider zu viel in Java auf dem PC gemacht, weils grotten-lahm ist 
(im Vergleich zu C, aber schneller als BASIC).

C ist sehr gut compilier- und optimierbar, und der Programmierer kann im 
gewissen Rahmen selbst entscheiden, wie hardwarenah er programmiert.
Anmerkung: Der Thumb(2) - Befehlssatz (ARM) wurde extra dafür 
entwickelt, aus  compilern heraus erstellt zu werden. Und der ARM 
compiler macht echt verdammt guten asm-code, wenn man das mal 
vergleicht, da kann man selber fast nicht besser programmieren :-)

---
Ich hab von QBASIC zu C gewechselt (vor 10 Jahren?), da mit BASIC zu 
langsam wurde. Und das war das beste, was ich gemacht habe!


VG,
/r.

von Willi W. (williwacker)


Lesenswert?

Meiner Meinung nach ist C keine Programmiersprache, sondern eher so eine 
Art "Überassembler", und das ist Vorteil und Fluch.

Aber genau das macht ihn für Mikrocontroller so geeignet, mal schnell 
ein Assembler-Schnipselchen eingefügt und man spart viel Code.

Ein interessantes Feature bei C sind auch die Makros und Defines, hier 
wird Code nicht nur nicht angesprungen sondern auch wirklich nicht 
erzeugt.

Codesparen ist auf dem uC immer noch ein Thema, hier geht es um viel 
Geld (man beachte Faktoren wie 100'000 für die Industrie, hier wird 
pingelig auf den Cent oder noch kleiner geschaut).

Entwicklungskosten fallen nur einmal an, kosten für mehr Speicher bei 
jeder hergestellten Baugruppe.

Ein anderes Thema sind Laufzeiten, die unter C nicht nur besser sind, 
sondern die man da auch leichter abschätzen kann. Jedoch war dieser 
Vorteil früher mal größer.

Ciao an alle C-Gequälten

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Hallo,

> Jede Programmiersprache genügt bestimmten Anforderungen. So ist z.B.
> BASIC eine Sprache für "jedermann", da man sie schreiben und lesen kann,
> als würde man eine Arbeitsanweisung für jmd. schreiben. Sie ist sehr
> einfach, wird aber nur interpretiert, d.h. der Interpreter schaut sich
> live alles an und schaut, was er machen muss.


Das stimmt heute so nicht mehr, z.B. RealBasic:

- ist ein Compiler
- ist objektorientiert (Module, Klassen, Methoden, Events)
- man kann div. Laufzeit-Prüfungen abschalten
- bedingtes Compilieren (z.B. abhängig vom Zielsystem)

Ich stimme dir zu, was die große Verbreitung von C betrifft. 
Wahrscheinlich gibt es für jeden Chip der auch nur 0 und 1 
zusammenzählen kann, einen C-Compiler ...

Frank

von Klugscheißer (Gast)


Lesenswert?

C kommt halt direkt nach ASM und erlaubt nicht so viele Fehler, wobei 
man da auch einiges Falsch machen kann z.B: if (a = 0x01) etc.

C ist immer noch sehr Hardwarenah und wird um einiges besser assembliert 
als andere Sprachen.

C ist verbreitet.

C ist gut lesbar (außer man will es nicht ;) )

Über C findet man viel mehr Literatur

C hat die meisten Free-Compiler

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


Lesenswert?

Frank Esselbach wrote:

> - ist ein Compiler
> - ist objektorientiert (Module, Klassen, Methoden, Events)
> - man kann div. Laufzeit-Prüfungen abschalten
> - bedingtes Compilieren (z.B. abhängig vom Zielsystem)

Fragt sich nur, was das Ganze dann noch mit BASIC zu tun hat?  Wie
viel deines Wissens kannst du mitnehmen, wenn du z. B. morgen statt
irgendwelcher PC-Applikationen plötzlich einen Controller mit
Bascom programmieren willst?

von Klugscheißer (Gast)


Lesenswert?

PS: und wenn du so einen Scheiß like:
if (!error) STATUS  |=((reg_2 & (STAT1 (B_LOC << 3)) ?STAT1 :0) | 
(mr_isr2 & E_LOK) ?STAT2 :0));

siehst, lass dich nicht abschrecken, man kann auch anders in C 
programmieren.

von Gabriel W. (gagosoft)


Lesenswert?

KOnz wrote:
> C ist doch auch scheiße Assembler! Assembler Meine Herrschaften, wo ist
> denn das Tempo und die Präzision bei C geblieben!
Assembler hat seine Vorteile, wenn's um zeitkritische Anwendungen geht. 
Es ist jedoch sehr Plattformorientiert und kann (fast) nur für eine 
Architektur bzw einen Prozessortyp optimal implementiert werden. Eine 
Hochsprache hingegen kann einen Algorithmus effizient implementieren, 
der dann auf vielen Architekturen gut läuft.
Das Tempo und die "Präzision" was immer Du damit meinst sind bei C auch 
sehr gut.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

>> - ist ein Compiler
>> - ist objektorientiert (Module, Klassen, Methoden, Events)
>> - man kann div. Laufzeit-Prüfungen abschalten
>> - bedingtes Compilieren (z.B. abhängig vom Zielsystem)
>
> Fragt sich nur, was das Ganze dann noch mit BASIC zu tun hat?  Wie
> viel deines Wissens kannst du mitnehmen, wenn du z. B. morgen statt
> irgendwelcher PC-Applikationen plötzlich einen Controller mit
> Bascom programmieren willst?

Das ist wohl wie mit allen modernen Gebrauchsgegenständen: durch die 
permanente Optimierung werden die einander immer ähnlicher. Warum sehen 
fast alle Kleinwagen gleich aus? Weil sie im Windkanal optimiert werden.

So ähnlich ist es sicher auch mit Programmiersprachen. Im Laufe der Zeit 
zeigen sich eben die Stärken und Schwächen jeder Variante und kluge 
Entwickler schauen auch mal über den Gartenzaun. Und ob ich nun einen 
bedingt auszuführenden Codeblock mit if_then-end_if oder mit 
geschweiften Klammern einfasse, ist sowas von egal ...

Mit Bascom bin ich übrigens sehr schnell zurechtgekommen. Ist halt ein 
wenig, als würde man vom Dragster auf ein Cart umsteigen.  Aber hat auch 
Räder, Lenkung, Motor ... :-)

Frank

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

C ist urspruenglich entwickelt worden, um Assembler bei der systemnahen 
Programmierung abloesen zu koennen. Das funktioniert in C auch 
wunderbar, da man grossen Einfluss auf das tatsaechliche Geschehen hat. 
Alleine deswegen kann BASIC keine Alternative zu C darstellen. 
Genausowenig aber z.B. Java, das zwar von der Syntax sehr aehnlich zu 
C++ ist, aber nicht dessen Moeglichkeiten bietet und sich daher 
vornehmlich zur High-Level-Entwicklung anbietet. Frueher war es so, dass 
es neben BASIC eigentlich Assembler gab. Wollte man tiefer in das 
Geschehen eingreifen, hat man einfach Assembler-Code (oder gleich 
Maschinencode!) in den Speicher geschrieben und dann ausgefuehrt. Das 
traegt aber zu einer strukturellen Programmierung und zur Wartbarkeit 
wenig bei.

C eignet sich gerade wegen seiner Speicherverwaltung gut fuer 
Mikrocontroller als Alternative fuer Assembler (wofuer es immer gedacht 
war). C eignet sich z.B. eher schlecht wenn Du High-Level programmierst 
oder eine richtig umfangreiche Standard-Bibliothek brauchst, da waere 
dann Java die bessere Wahl. Standard-Algorithmen und Datenstrukturen wie 
Baeume oder sogar nur eine Liste findet man in einer libc nicht.

Ich will es jetzt nicht als Flame verstanden wissen, aber BASIC ist 
unter Profis in jeglicher Hinsicht indiskutabel. Aber BASIC war ja nie 
wirklich als professionelle Sprache geplant, das deutet ja schon das 
"Beginner..." am Anfang an. Ich selber habe meine ersten Gehversuche 
auch in BASIC gemacht, damals noch mit Zeilennummern und dem klassischen 
Spaghetti-Code.

C kann man uebrigens bis zur Unleserlichkeit obfuscaten, siehe hier:
http://www.de.ioccc.org/main.html

Das ist aber alles nur eine Frage des Stils. Ich glaube mein C-Code 
sieht recht sauber aus, man darf sich halt nicht zu sehr in Versuchung 
fuehren lassen, was aber leicht geschieht, wenn man die Sprache erst 
richtig beherrscht, da man beliebige Ausdruecke in einer Zuweisung 
verwenden kann usw.

Ich muss mich auch dem Tonus anschliessen: Eine Sprache fuer alles gibt 
es nicht, C dominiert halt bei systemnaher Programmierung (OS, Treiber, 
System- und shell), andere Sprachen haben andere Vorzuege. Du hast 
eingehend gesagt, die BASIC-Syntax gefaellt Dir besser als jene von C. 
Es gibt halt auch keine einheitliche Syntax, da sich keiner an die Norm 
haelt. Ich finde die Syntax von BASIC absolut grauenhaft, das hat sich 
wieder gezeigt, als ich in die Verlegenheit gekommen bin eine C-Control 
damit zu programmieren zu muessen...

Naja Du wirst ja C nun lernen ich denk dann kannste das alles auch 
selber nachvollziehen.

Greets,
Michael

von Klugscheißer (Gast)


Lesenswert?


von lach (Gast)


Lesenswert?

"C" ist die Abkürzung für "cryptic" :-)

von Andreas K. (a-k)


Lesenswert?

Dann hast du wohl noch nie APL gesehen. Dagegen ist C direkt 
geschwätzig.

Ich habe mit APL angefangen: 
http://en.wikipedia.org/wiki/APL_(programming_language)#Examples

von Karl H. (kbuchegg)


Lesenswert?

Andreas Kaiser wrote:
> Dann hast du wohl noch nie APL gesehen. Dagegen ist C direkt
> geschwätzig.

Ha, APL.

Ich hab noch mein APL 'Manual' aus meiner Studienzeit.
Das 'Manual' ist eine Plastikkarte in der Größe einer
Scheckkarte, beidseitig bedruckt.

von Unbekannter (Gast)


Lesenswert?

C, C++, Java, C#, VB usw. ist alles der gleiche Mist. Ob man nun {} 
schreibt oder begin/end etc. macht keinen Unterschied.

Die etablierten Sprachen sind allesamt schlechtes Mittelmaß. Nichts 
besonderes, voll mit katastrophalen Design-Entscheidungen und Altlasten; 
jeder fühlt sich berufen in diesen Sprachen irgendwie, irgendwelche 
Programme zusammen zu schustern.

von Andreas K. (a-k)


Lesenswert?

Recht hast du ja. Aber was zu was rätst du statt dessen?

von Jens P. (Gast)


Lesenswert?

Hi Leute, danke für die vielen Antworten.

APL ist ja mal echt Grausam. Aber genau solche Konstrukte wie
if (!error) STATUS  |=((reg_2 & (STAT1 (B_LOC << 3)) ?STAT1 :0) |
(mr_isr2 & E_LOK) ?STAT2 :0));

sind echt Grausam.

Den Vorteil werd ich ja dann ab September in meinem Kino selbst merken.

Ich habe mich Hauptsächlich gefragt ob es HEUTE denn noch diesen 
TECHNISCHEN Totschläger-Punkt gibt. Anscheinend ist aber die 
Portierbarkeit der Hauptgrund, bzw einfach die Verbreitung.

Man hat uns mal in der  Berufsschule versucht C++ in der Konsole 
beizubringen.
Wir (Elektroniker) konnten damit grad mal garnix anfangen. 
Konsole=Langweilig, nix Praxisnahes gemacht, und in 2 Jahren bis zum 
Array gekommen. Da war mir die Lust am Programmieren dann erstmal 
vergangen. Bin dann eben quasi über VB.Net wieder zum Programmieren 
gekommen, bzw habe vorher schon etwas PIC in Assembler rumgespielt (mehr 
nicht). Da ja für die 12-18F mittlerweile der wirklich schicke Compiler 
von MikroElektronika vorhanden ist, habe ich mich halt für den 
entschieden. Wirklich hübsche und funktionelle IDE inbegriffen.

Ich muss aber auch sagen dass ich selbst immernoch Noob genug bin 
wirklich alles auszuprobieren und nicht zu Simulieren oder ICD-Debuggen.

Danke auf jeden Fall für eure Mühe!

Grüßle, Jens

von Andreas K. (a-k)


Lesenswert?

Jens Plappert wrote:

> APL ist ja mal echt Grausam.

Für jemanden, der mit mathematischer Ausdrucksweise und insbesondere 
linearer Algebra vertraut ist, nicht unbedingt. Den stört dann eher die 
unstrukturierte Programmierung mit Neigung zu Spaghetticode.

von Karl H. (kbuchegg)


Lesenswert?

Andreas Kaiser wrote:
> Recht hast du ja. Aber was zu was rätst du statt dessen?

<nicht ernst gemeint>

Wie wärs mit Prolog?
Ist auch mal was ganz anderes als der übliche Algol-Ableger Kram.

von Karl H. (kbuchegg)


Lesenswert?

Jens Plappert wrote:

> Ich habe mich Hauptsächlich gefragt ob es HEUTE denn noch diesen
> TECHNISCHEN Totschläger-Punkt gibt.

Genau das ist der springende Punkt.
Alle dies Sprachen gehören im Grunde derselben Sprachfamilie
an und unterscheiden sich nur in Details.
Allerdings sind alle Programmiersprachen immer Turing-komplett.
Sind sie es nicht, dann sind sie im Grunde uninteressant.
Turing-komplett bedeutet: Wenn es überhaupt möglich ist, für
ein Problem ein Programm zu schreiben, dann kann man das mit
dieser Sprachen.

Den Totschlag Punkt gab es nie und wird es auch nie geben.

Die Diskussion über Programmiersprachen ist so sinnvoll, wie
die Fragestellung ob das Rad nun rot oder grün angemalt werden
soll. Für die übliche Funktion, nämlich zu rollen, spielt dieses
Kriterium so gut wie keine Rolle.

Letztendlich ist eine Programmiersprache nur ein Werkzeug. Die
beste Programmiersprache ist immer noch die, die man beherrscht.

von Andreas K. (a-k)


Lesenswert?

Karl heinz Buchegger wrote:

> Wie wärs mit Prolog?
> Ist auch mal was ganz anderes als der übliche Algol-Ableger Kram.

Jo. Das ist ein besonderer Spass. Eine Programmiersprache, die so tut 
als ob es dabei keine Abfolge von Abläufen gäbe. Aber wenn man als 
Ergebnis mehr haben will als "ja" oder "nein", dann muss man mit einer 
Programmiersprache, die keine Abläufe kennt, dann doch wieder 
sequentielle Abläufe programmieren. Man muss also wissen, wie das 
Programm zur Laufzeit vom Interpreter tatsächlich abgearbeitet wird, um 
auf dieser Basis dann den Ablauf zu kontrollieren. Insofern ist die 
Sprache Prolog eigentlich ihre eigene Widerlegung und sollte eher 
Prounlog heissen.

von Geniesser (Gast)


Lesenswert?

>Die etablierten Sprachen sind allesamt schlechtes Mittelmaß. Nichts
>besonderes, voll mit katastrophalen Design-Entscheidungen und Altlasten;
>jeder fühlt sich berufen in diesen Sprachen irgendwie, irgendwelche
>Programme zusammen zu schustern.

So schlecht können sie nicht sein. Man ist mit ihnen zum Mond (und 
zurück) geflogen, schießt Satelliten in den Orbit, bewältigt die 
Globalisierung, unterhält mehrere Millarden Menschen, führt Kriege 
(schluck!) und hofft sogar das Überleben der Menschheit auf Dauer zu 
gewährleisten.

von Andreas K. (a-k)


Lesenswert?

Geniesser wrote:

> So schlecht können sie nicht sein.

Ja, und es gibt sehr viel mehr Fliegen auf der Erde als Menschen. Aber 
das ist für mich kein Grund, deren offensichtlich überaus erfolgreiche 
Auswahl an Nahrungsquellen zu teilen.

von Geniesser (Gast)


Lesenswert?

>Ja, und es gibt sehr viel mehr Fliegen auf der Erde als Menschen. Aber
>das ist für mich kein Grund, deren offensichtlich überaus erfolgreiche
>Auswahl an Nahrungsquellen zu teilen.

Dann mach dich mal auf und schreibe deine all umfassende fehlerfreie 
perfekt designte Super-Programming-Language

bin gespannt was bei raus kommt :)

von Gast (Gast)


Lesenswert?

Ada?

von Geniesser (Gast)


Lesenswert?

Ob Linux Distributionen in Ada besser werden?

Ob Vista in Ada die Welt revolutioniert?

.NET in Ada?

von Geniesser (Gast)


Lesenswert?

Ist ein Ada Compiler eigentlich in Ada geschrieben?

Gibt es überhaupt fehlerfreie Compiler? Kann es jemals fehlerfreie 
Software geben?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Geniesser wrote:
> Ob Linux Distributionen in Ada besser werden?

Ich könnte es mir zumindest sparen einmal in der Woche das System auf 
meinem Server zu aktualisieren, weil irgend ein Buffer Overflow oder ein 
Integer Underflow in libpng oder libtiff o.ä. die Sicherheit gefährdet. 
Schau mal in irgend eine beliebige Security-Mailingliste rein, >90% der 
Bugs sind C-typisch. Und komm mir jetzt nicht mit "ein guter 
Programmierer kann solche Bugs vermeiden". Nur ein perfekter 
Programmierer könnte das, und den gibt es nicht.

von Geniesser (Gast)


Lesenswert?

>Ich könnte es mir zumindest sparen einmal in der Woche das System auf
>meinem Server zu aktualisieren, ..

ich fürchte nur niemand wird jemals ein Ada-Linux kreieren

>Und komm mir jetzt nicht ..

mach ich schon nich :)

vielleicht auf das von Rufus immer verächtlich genannte dot net Geraffel 
umsteigen (falls es da was für Server gibt)? "Managed Code" dürfte doch 
Speicherlegs den garaus machen, oder?

von Unbekannter (Gast)


Lesenswert?

> Letztendlich ist eine Programmiersprache nur ein Werkzeug. Die
> beste Programmiersprache ist immer noch die, die man beherrscht.

Ja und nein.

Das Hauptproblem: Die Sprache legt den eigenen "Denk-Horizont" fest. Hat 
man nur einen Hammer, ist alles ein Nagel.

Wenn man Leuten erzählt, die seit 10 Jahren in C oder ähnlichen Sprachen 
programmieren, es gibt Sprachen, da gibt es keine Variablen, keine 
Schleifen, und in diesen Sprachen ist man mit deutlich weniger 
Source-Code schneller am Ziel, dann verdrehen diese Leute die Augen und 
können sich das überhaupt nicht vorstellen.

von Sven P. (Gast)


Lesenswert?

Ich kommentiere das einfach mal ganz ungezwungen, ja?

Jens Plappert wrote:
> ich bin zwar keinb prof. Programmierer, aber habe schon das ein oder
> andere "zusammengeschnipselt" was im Geschäft gebraucht wird
Jubb, ich bin ebenfalls Hobbyist (18 Jahre alt), hab aber auch schon die 
ein oder andere Prüfroutine für Firmen geschrieben.

> (ein Digitales Sprachlabor bestehend aus mehreren Programmen).
Hui :-)

> Dazu benutze ich VB2005.
Hab dafür noch VB6 benutzt, das war damals noch das neueste.

> Bei meinen µC-Projekten mache ich mich noch unbeliebter. Erstens benutze
> ich PICs, zweitens benutze ich dort ebenfalls Basic.
Basic is doch in Ordnung, wenns dir schnell genuch ist und wenn du die 
Maschine (=PIC, AVR oder was auch immer) damit sicher im Griff hast.

> Auf der Technikerschule kommen jetzt AVR und C auf mich zu. Gut, seh ich
> mal was anderes.
Genau...

> Was mich jetzt interessieren würde: Warum wird C als Programmiersprache
> so vehement als das non plus ultra hochgehalten?
Ganz frei aus dem Gedächtnis: Naja, C ist irgendwo steinalt. Basic war 
zwar schon früher da, aber C hat meines Wissens nach zum ersten Mal so 
richtig den Sprung geschafft, unabhängig von einer Architektur zu sein. 
C wurde glaub ich geschaffen, um UNIX-Zeuchs damit zu programmieren, und 
UNIX war seinerzeit recht verbreitet auf Großrechnern (wie der 
"Nachfolger" Linux es heute ist; damals war Microsoft noch ganz 
klein...)

> "Früher" konnte man das ja verstehen. Basic war eher ein augebohrter
> Script-Interpreter, während C "echte" Programme, bzw eben einfach
> Maschinencode der nicht mehr zur Laufzeit interpretiert werden musste.
Jubb, aber Basic konnte man auch recht früh schon kompilieren. Nur 
musste für jeden Mist quasi die BASIC-Sprache umgebaut werden, weil 
vieles in Basic doch über Sprachkonstrukte realisiert wurde ("OPEN x FOR 
INPUT...") und nicht wirklich flexibel war. Man denke nur an diese 
Krämpfe für die RS232 (OPEN "COM1:BAUD:PARITY"... oder sowas).
C hatte da was abstraktes zur Hand, was ohne Veränderung der Sprache 
selbst leicht auf alles Mögliche ausgedehnt werden konnte.

> Aber wie sieht es heute aus?
Prinzipiell genauso, nur die Kisten wurden flotter :-)

> Ok, lassen wir mal mangels Basic- unterstützung und interesse das
> Linux-Lager ausnahmsweise explizit aussen vor.
Basic geht unter Linux problemlos, so isses net.

> Wenn ich einen µC programmiere, dann wird ja auf dem nicht Basic
> interpretiert, sondern der wandelt meine Basic-Befehle genau wie die
> C-Befehle in Maschinencode um.
I.d.R. ja. BASCOM (das COM steht für Compiler) macht genau das. Es gibt 
aber sehr wohl auch BASIC-Interpreter, die in den Prozessor geladen 
werden!
Mach dir nur klar: Jeder COMPILER macht prinzipiell nix andres, als aus 
einer Hochsprache Assemblercode zu erzeugen. Erst dieser wird dann vom 
ASSEMBLER in Maschinencode (11010001 oder so) übersetzt. Durch welchen 
Compiler der Assemblercode erzeugt wird, ist also wurscht.

> Was ist hieran schlechter?
Garnix. Was willste denn machen?

> Wenn ich einen PC (unter Windows) programmiere, und vb in einer der
> .NET-Versionen benutze, dann werden ALLE sprachen in die CLR übersetzt
> und interpretiert. Warum sollte C# hier einen Vorteil ggenüber VB haben?
Ganz einfach: Erstens: Gewohnheit. C# ist zwar schon Verhumbugtes C/C++, 
aber immer noch eher für C-Programmierer zu benutzen, als Basic.
Und dann, wie oben gesacht: C ist/war deutlich flexibler als Basic, 
allein von Seiten der Sprache her. Das VB.Net ist beim besten Willen 
kein "Basic" im klassischen Sinne mehr, das is morz-aufgebohrt.
Wirkliche "Vorteile" seh ich ganz persönlich in den Unterschieden von 
C#/VB und was .NET noch alles hat, nicht mehr.
Das .NET selbst aber hat letztlich irgendwo die meisten Vorteile 
(Unabhängigkeit von Architektur, Managed Code etc.) von JAVA 
geklaut...so scheint mir das jedenfalls.

> Ich möchte hier nicht C schlecht reden. Mir persönlich gefällt nur die
> Syntax von Basic wesentlich besser, da sich einfach mehr an "Sprache"
> statt an Kryptische Zeichen gehalten wird.
Jubb, genau deshalb hat man Basic erfunden: Beginner’s All-purpose 
Symbolic Instruction Code. Eine Sprache für Programmieranfänger!
Andrerseits: Schreib mal paar zehntausen Zeilen Code in Pascal/Delphi. 
Da ist mir ein schnelles "{ ... }" jedenfalls lieber als immer 
"begin...end" auszuformulieren. Ich will programmieren und keine Romane 
schreiben :-)
Das Kryptische übrigens verliert seinen Charakter ganz schnell, wenn man 
mal ein erstes C-Programm getippt hat. Letztlich ist C wesentlich 
"logischer" aufgebaut, als BASIC, im Sinne von "strikter" und mit 
klareren Regeln.

> Wo liegt denn aber in der Zeit nach MS-DOS der große unterschied
> zwischen Basic und C, ausser der Syntax?
Wie gesagt, Gewohnheit, Flexibilität, Übersichtlichkein (i.S.v. strikt 
und klar), Portabilität auf Quellcodeebene (C-Programme kann man, wenn 
man auf einige Sachen achtet, z.B. 1:1 auf Windoof und Linux 
compilieren, auch mit unterschiedlichen Compilern. Bei Basic ist das 
schwierig, da die Standards irgendwie...wässrig sind, jeder kocht da 
sein eigenes Süppchen.
Außerdem gibbet C-Compiler für (ich behaupte mal) sämtliche 
Architekturen.

> Ich möchte hier keinen Zigtausendsten Thread C vs Basic lostreten oder
> igrendetwas diskreditieren, sondern einfach in Erfahrung bringen ob es
> (ausser dem größeren Supportangebot dank größerer Verbreitung)
> eigentlich einen wirklichen Vorteil von C gibt (Portierbarkeit
> Windows-Linux-Unix mal aussenvor gelassen).
Wie gesagt :-)
Riesen-Support ist Gold wert, genauso wie riesen Verbreitung, damit kann 
man sich die Zukunft geben. Nenn mir doch mal gescheite Basic-Compiler 
mit kompatibler Syntax für Windows. Richtig - Microsoft VB.NET. Sonst 
noch was? -- Merkste was? Wenn MS sein Basic einstampft, kannste deine 
Programme in die Tonne kloppen.
Für C hingegen kannste Borland, Microsoft, GNU-Gcc (mit oder ohne 
Cygwin) und wie sie alle heißen, benutzen.

Hoffe, das hilft dir ein ganz klein bissken -- soweit "meine" Sicht der 
Dinge.

von daniel (Gast)


Lesenswert?

Um mal Prolog wieder aufzugreifen. Ich kann kein Prolog,
aber soweit ich die Idee verstanden habe, geht es darum
das Problem deklarativ zu beschreiben und die Engine/Kernel
verschiedene ableitbare Aussagen deduzieren lassen.
Eine einfache Art eines Expertensystem oder einer Modelsimulation.
Modelsimulation deswegen, weil es da auch deklarativ ein
Model nur beschrieben wird, ohne die Lösungsschritte explizit anzugeben.

Ich beschäftige mich gerade mit der Simulationsprache Modelica.
http://www.modelica.org/
Für mich war das interessante (und neue) am Konzept vom Modelica,
dass man anstatt der üblichen Zuweisungen, die Relationen
in Gleichungen ausdrückt. Eine so beschriebene Komponente,
kann je nach dem was als input vorliegt, die Gleichung
in eine Zuweisung überführen.

BTW Hat vielleicht jemand damit gearbeitet?

von Jens P. (Gast)


Lesenswert?

Danke Sven, für deinen wirklich umfangreichen Post.

Leute, ich muss mal echt loswerden dass es mich wundert wie zivil, ja 
geradezu mustergültig dieser Thread trotz "Grundsatzfrage" abläuft.

Ich habe an so etwas hier ehrlich gesagt kaum mehr geglaubt.

DANKE SEHR!

von Andreas K. (a-k)


Lesenswert?

Sven Pauli wrote:

> aber C hat meines Wissens nach zum ersten Mal so
> richtig den Sprung geschafft, unabhängig von einer Architektur zu sein.

Bereits die erste implementierte höhere Programmiersprache, Fortran, 
erfüllte diese Bedingung. Eher besser als C. Nur ist Fortran ungefähr 2 
Jahrzehnte älter als C. Andere ebenso architekturunabhängige ältere 
Sprachen sind beispielsweise das schon erwähnte ungemein geschwätzige 
COBOL, das konzeptionell stark abweichende Lisp und das die Grundlagen 
der strukturierten Programmierung schaffende Algol.

Das besondere an C war hauptsächlich, dass es im Unterschied zu den 
anderen Sprachen mitsamt für Minicomputer geeignetem Betriebssystem an 
Universitäten kostenfrei verfügbar war, anfangs mitsamt veröffentlichtem 
Quellcode. Und man in C besser Betriebssysteme schreiben konnte als in 
den anderen damaligen Sprachen.

Und was man im Studium kennenlernt, verwendet man gern auch später, wenn 
es einigermassen passt.

> C wurde glaub ich geschaffen, um UNIX-Zeuchs damit zu programmieren, und
> UNIX war seinerzeit recht verbreitet auf Großrechnern

Genauer gesagt auf Minicomputern. Das waren jene Dinger, die klein genug 
waren, dass man ohne grosse Mannschaft damit arbeiten konnte - und weil 
vergleichsweise günstig in Anschaffung und Betrieb auch durfte. Auf 
Grossrechnern war Unix schlicht nicht existent.

> "Nachfolger" Linux es heute ist; damals war Microsoft noch ganz
> klein...)

Microsoft hatte damals überhaupt noch nicht existiert.

von Andreas K. (a-k)


Lesenswert?

Warum man insbesondere bei Microcontrollern überall C verwendet: Es war 
zum richtigen Zeitpunkt da, und es war dafür geeignet.

Die ersten Generationen von Microcomputern wurden wesentlich in 
Assembler programmiert. Hochsprachen gab es auch schnell, inklusive dem 
erwähnten Fortran, COBOL und sogar einem eingedampften Ableger des 
IBM-Monsters PL/I. Bis auf Basic und Turbo Pascal waren die allerdings 
meist reichlich teuer, jenseits dessen was man sich leisten wollte oder 
konnte. Die wohl einzige Sprache, die Ende der Siebziger auf keinem 
einzigen Microcomputer gesichtet werden konnte, war C.

Microcontroller wiederum wurden noch lange Zeit fast ausschliesslich in 
Assembler programmiert. Oder in stark in vereinfachten Spezialsprachen, 
beispielsweise Intels PL/M.

Wer in den 80ern auf unterer Ebene an Rechnern herumprogrammierte, 
eigenen oder den erwähnten Minicomputern, der kam, wenn er Glück hatte, 
mit C in Kontakt. Und stellte fest, dass dies damit ganz gut geht. Denn 
dafür war es ja gebaut worden.

Als dann Microcontroller soweit waren, in einer höheren Sprache 
programmiert zu werden, war C da, die Leute kannten C, und es war dafür 
geeignet. Denn die Programmierung von Minicomputern, damaligen PCs und 
Betriebssystemen wie dem ursprüngliche Unix unterscheidet sich nicht 
stark von der Programmierung heutiger Microcontroller. Was die 
Anforderung an die Programmiersprache angeht. Und wie man auch an der 
Entwicklungsgeschichte von Linux sieht, waren das Projekte, die 
überwiegend von einer einzigen Person gestemmt werden konnten.

PCs wiederum haben sich davon längst wegentwickelt. Sowohl wie 
Programmiertechniken wie auch die Komplexität der Interfaces sind längst 
auf einem Niveau, auf dem man mit C mehr Unfug anrichtet als nötig. 
Soweit man heutige GUIs überhaupt noch darin programmieren kann.

In den 80ern hatte das amerikanische Verteidigungsministerium das 
Problem, dass deren diverse Softwareprojekte für Embedded Systems (also 
dem Zeug in Raketen, Flugzeugsteuerungen usw) in einem Zoo 
unterschiedlicher Programmiersprachen enstanden. Das sollte sich ändern 
und die Forderung nach Vereinheitlichung führte zur Entwicklung von Ada, 
gewürzt mit der Forderung, dass künftig alle Projekte darin zu 
realisieren seinen (keine Ahnung was von dieser Forderung noch übrig 
ist). Dabei entstand jedoch eine Sprache, deren anfängliche 
Implementierungen und nötigen formellen Zertifizierungen derart komplex 
und langsam abliefen, dass kaum jemand ausserhalb dieses Zirkusses das 
ernst nahm.

Von der Sache her ist Ada zweifellos besser für Embedded Systems 
geeignet als C. Aber der Zug ist längst abgefahren. Man verwendet was 
man kennt, was man kriegt, was gut unterstützt ist, kurz: was alle 
anderen verwenden. Die Qualität der Programmiersprache selbst ist dabei 
nur ein Kriterium unter vielen.

von df311 (Gast)


Lesenswert?

jede programmiersprache hat ihren zweck, sogar perl ;-)

ich habe auch mit basic angefangen zu programmieren - am c64, bin dann 
über turbo-basic, vb6 bei c(++), java, assembler, python, (vhdl - ich 
weiß, ist keine richtige programmiersprache), c#, ocaml,... gelandet.

was mir (nach c) aufgefallen ist:
kurze "quick and dirty" programme (z.b. 10000 spam-mails vom pop3-server 
löschen) oder programme, bei denen es nicht auf die geschwindigkeit 
ankommt schreibe ich am liebsten in java.
für meine avrs verwende ich hauptsächlich asm, c muss für systemnahes 
"herhalten" - egal ob kommunikation über die rs232, (rt-)kernel-module 
oder anderes.
c# und ocaml sind eher "exoten", die ich für die uni verwenden musste, 
wobei mir der gui-designer von c# aber nicht schlecht gefällt.

FAZIT:
siehe erste zeile, nur sind eben manche sprachen besser für ein 
bestimmtes problem geeignet als andere.
zur ersten frage im thread: ich glaube C konnte sich derartig weit 
verbreiten, weil es seit der entstehung quasi mit unix "verheiratet" war 
und sich darüber verbreiten konnte - mit allen vor- und nachteilen

von Unbekannter (Gast)


Lesenswert?

C und Konsorten ist Mittelmaß. Die Masse strebt immer zum Mittelmaß.

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


Lesenswert?

Und Unbekannte klopfen immer sinnlose Sprüche...  Verallgemeinerungen
sind sowieso immer richtig.  Oder immer falsch? ;-)

von df311 (Gast)


Lesenswert?

der unbekannte verwendet wahrscheinlich INTERCAL
http://de.wikipedia.org/wiki/INTERCAL
oder schreibt einfach 42 unter jede aufgabe, um sie zu lösen ;-)

von Andreas K. (a-k)


Lesenswert?

Unbekannter wrote:

> Die Masse strebt immer zum Mittelmaß.

Und du präsentierst hier nur eine Tautologie. Denn was die Masse 
verwendet ist geradezu per Definition das Mittelmass.

von Geniesser (Gast)


Lesenswert?

Unbekannter, rede doch nicht um den heißen Brei, sondern nenne mal deine 
ach so tolle Programmiersprache

wir wollen schließlich alle gern was dazulernen :)

von Jens P. (Gast)


Lesenswert?

Die hat er nur für sich selbst entwickelt. Oder er nimmt Parsic ;-)

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


Lesenswert?

df311 wrote:

> der unbekannte verwendet wahrscheinlich INTERCAL

Au ja! :-)

von Unbekannter (Gast)


Lesenswert?

> Unbekannter, rede doch nicht um den heißen Brei, sondern nenne mal
> deine ach so tolle Programmiersprache

Vor 5 Jahren Ocaml, seit 3 Jahren Haskell.

von yalu (Gast)


Lesenswert?

@Unbekannter:
Diese Funktionalsprachen sind schon etwas Feines.

Auf der anderen Seite wurde ja schon mehrfach als Argument für C
genannt, dass es fast für jede Rechnerarchitektur verfügbar ist. Einen
Haskell-Compiler für AVRs habe ich noch nicht gefunden, nicht einmal
einen mittelmäßigen ;-)

Nutzt du Haskell wirklich intensiv? Wieviele Zeilen Code hast du damit
schon realisiert? Wie gesagt, ich selber finde Haskell & Co sehr
interessant, aber über das "Ausprobierstadium" bin ich noch nicht
hinaus gekommen, da ich bisher weder einen Arbeitgeber noch einen
Kunden davon überzeugen konnte, dass er dadurch reicher wird, dass ich
in Haskell programmiere. Bei C muss ich kaum jemanden überzeugen.

Falls du professionell in Haskell entwickelst, würden mich ein paar
Details dazu interessieren: Welche Branche, welche Art von Software,
auf welchen Plattformen usw.?

von Geniesser (Gast)


Lesenswert?

>Vor 5 Jahren Ocaml, seit 3 Jahren Haskell.

Sehr interessant, aber welchen Stellenwert haben denn solche Sprachen 
auf längere Sicht? Occam war ein Begriff als damals die Transputer-Chips 
von Inmos gerade rauskamen. Was ist aus aus den Transputern geworden? 
Sie verschwanden von der Bildfläche .. Für Spezialanwendungen und im 
Hochschulbereich trifft man solche Dialekte vielleicht noch an, 
ansonsten sind sie doch kaum von Bedeutung.

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


Lesenswert?

ocaml (objective Caml) hat nichts mit Occam zu tun.

von Geniesser (Gast)


Lesenswert?

ahh hast recht, das hab ich falsch gelesen, man kommt schon ganz 
durcheinander bei den vielen Buchstaben

da weiß man doch was man am Universalisten von AT&T hat:

da heißt es einfach C

von yalu (Gast)


Lesenswert?

Aber nicht verwechseln mit B oder D ;-)

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.