Alternative zu C,C++
-
PCTT
ist ne tolle Programmiersprache. Ich meine mich zu erinnern, dass das für "Please close this thread" steht.
-
u-ser_l schrieb:
'Portabel' + 'hardwarenah' sind zwei einander widerstrebende Ziele und schließen sich daher gegenseitig aus.
nee, das stimmt nicht. wenn ich z.b. in C auf irgendwelche register eines chips zugreifen will (über memory mapped I/O):
#define BASE 0x1000 uint8_t *reg1 = (uint8_t*)BASE + 0; uint8_t *reg2 = (uint8_t*)BASE + 1; uint8_t *reg3 = (uint8_t*)BASE + 2;
^^dann passt es immer, egal wo. ich muss nur BASE einmal pro host-system anpassen und sämtlicher anderer code, der mit dieser hardware arbeitet (z.b. ein sehr komplexer treiber), muss nicht verändert werden.
-
Basher schrieb:
u-ser_l schrieb:
'Portabel' + 'hardwarenah' sind zwei einander widerstrebende Ziele und schließen sich daher gegenseitig aus.
nee, das stimmt nicht. wenn ich z.b. in C auf irgendwelche register eines chips zugreifen will (über memory mapped I/O):
#define BASE 0x1000 uint8_t *reg1 = (uint8_t*)BASE + 0; uint8_t *reg2 = (uint8_t*)BASE + 1; uint8_t *reg3 = (uint8_t*)BASE + 2;
^^dann passt es immer, egal wo. ich muss nur BASE einmal pro host-system anpassen und sämtlicher anderer code, der mit dieser hardware arbeitet (z.b. ein sehr komplexer treiber), muss nicht verändert werden.
Falsch, auf Systemen ohne MMIO fällst du damit dick auf die Fresse. Portabel wäre es den Zugriff zu abstrahieren.
-
C-Hacker schrieb:
Falsch, auf Systemen ohne MMIO fällst du damit dick auf die Fresse. Portabel wäre es den Zugriff zu abstrahieren.
natürlich geht's 'noch portabler', ich wollte u_ser-l nur mal mit einem einfachen beispiel zeigen, wie er sich täuscht.
-
welche sprache ist eigentlich geeignet für system-programmierung ausser c / c++
halt speicher auslesen und ähnliche sachen sollten auch möglich sein, hardware-zugriffe usw...
-
Konkretisiere system-programmierung!
-
ich habe gesagt, man kann in C portabel programmieren. Das heißt weder, daß jedes C-Programm portabel ist, noch daß jedes C-Programm nicht portabel ist.
Jedenfalls: eine Sprache/ein System ist so portabel, daß es 15000 Zeilen Skriptcode bedarf, um Sourcen an die diversen Zielplattformen anzupassen ...
Mit 15000 Zeilen Code könnte man wohl fast dafür sorgen, daß C64-Basic-Programme anstandslos auf einer PS2 compilieren.
-
froch mich net schrieb:
welche sprache ist eigentlich geeignet für system-programmierung ausser c / c++
das kann man z.B. daran sehen, in welchen Sprachen Systeme implementiert wurden und/oder werden:
ada
algol
bcpl
forth
objective c und andere C-Varianten und -Erweiterungen
lisp
mesa
pascal
pl/|
smalltalk (slang)...
was APL angeht - die "formal description" von Systems/360 gab es in APL, zählt das auch ?
-
bitC
bliss
modula-2
oberon
preScheme
...
-
pl/m
...
-
KISS
(vor rund 50 Jahren auf IBM 650, heute wohl nicht mehr ganz so populär)
-
Ich nehme an, bei diesen 17 Systemimplemetierungssprechen werden doch die meisten Fehler in C gemacht.
-
volkard schrieb:
Ich nehme an, bei diesen 17 Systemimplemetierungssprechen werden doch die meisten Fehler in C gemacht.
Absolut oder relativ gesehen?
-
knivil schrieb:
volkard schrieb:
Ich nehme an, bei diesen 17 Systemimplemetierungssprechen werden doch die meisten Fehler in C gemacht.
Absolut oder relativ gesehen?
Absolut natürlich.
-
volkard schrieb:
Absolut natürlich.
Was ist absolut natürlich? Ach du meinst oder so also warte...
-
Wobei dann die Aussage "werden doch die meisten Fehler in C gemacht" eher wertlos ist. Z.B. werden die meisten Zwischenfaelle mit Hunden durch Schaeferhunde verursacht. Macht das den Schaeferhund zu einem sehr aggressiven Hund? Nein, er ist nur der haeufigste Haushund.
PS: jeha mein 11elfter Post!
-
#define BASE 0x1000 uint8_t *reg1 = (uint8_t*)BASE + 0; uint8_t *reg2 = (uint8_t*)BASE + 1; uint8_t *reg3 = (uint8_t*)BASE + 2;
Mal abgesehen von der Portabilität, müsste da noch nicht ein volatile rein, damit der nachfolgende Code (der auf die Register zugreifen möchte) bei allen Compiler Optimierungsstufen arbeitet?
-
abc.w schrieb:
#define BASE 0x1000 uint8_t *reg1 = (uint8_t*)BASE + 0; uint8_t *reg2 = (uint8_t*)BASE + 1; uint8_t *reg3 = (uint8_t*)BASE + 2;
Mal abgesehen von der Portabilität, müsste da noch nicht ein volatile rein, damit der nachfolgende Code (der auf die Register zugreifen möchte) bei allen Compiler Optimierungsstufen arbeitet?
Volatile ist dafür nicht geeignet, man benötigt dafür einerseits "compiler barriers" (die verhindert, dass der Compiler umordnet) und andererseits "memory barriers" (welche Schreib-/Lese-Zugriffe, oder beides, sortieren, so dass alle vor der Barrier vor denen hinter der Barrier abgearbeitet werden).
-
abc.w schrieb:
#define BASE 0x1000 uint8_t *reg1 = (uint8_t*)BASE + 0; uint8_t *reg2 = (uint8_t*)BASE + 1; uint8_t *reg3 = (uint8_t*)BASE + 2;
Mal abgesehen von der Portabilität, müsste da noch nicht ein volatile rein, damit der nachfolgende Code (der auf die Register zugreifen möchte) bei allen Compiler Optimierungsstufen arbeitet?
ja, aber hey, ich hätte auch was aus irgendeiner "sfr.h" kopieren können. das sollte wirklich nur ein *sehr simples* und keinesfalls vollständiges beispiel sein.
Tippgeber schrieb:
Volatile ist dafür nicht geeignet, man benötigt dafür einerseits "compiler barriers" (die verhindert, dass der Compiler umordnet) und andererseits "memory barriers" (welche Schreib-/Lese-Zugriffe, oder beides, sortieren, so dass alle vor der Barrier vor denen hinter der Barrier abgearbeitet werden).
wenn sowas benötigt wird, dann isses im keyword 'volatile' mit inbegriffen. volatile bedeutet: 'mach den zugriff auf jeden fall und zwar genau jetzt'. wenn dazu cache-flushes oder so benötigt werden, dann werden diese auch gemacht. 'volatile' gibt's nämlich genau aus dem grund, damit zugriffe auf memory-mapped i/o-register sofort und genau in der reihenfolge passieren, wie's der programmierer hingeschrieben hat.
-
gary1195 schrieb:
Hallo,
kennt jemand eine gute alternative zu c c++.Wie hier im Thread schon bemerkt wurde,
kommt das stark darauf an -- *wofür*?Letzlich ist die Wahl des geeigneten Werkzeugs
(Programmiersprache) auch ein wichtiger Teil
der Professionalität eines Programmierers.Jede Sprache hat eben bestimmte Stärken und
Schwächen und setzt eine je andere Kenntnis
ihrer Umgebung (in die die Sprache eingebettet
ist) voraus.Für C/C++ gibt es streng genommen *keine*
Alternative - es sei denn, man verwendet
C/C++ zu einer ungeeigneten Aufgabenstellung.Allerdings ist gerade C++ schon einigermaßen
komplex, es braucht schon 10 Jahre Erfahrung,
bis man vorwiegend Nutzen und keinen Schaden
mehr durch die Programmiererei damit anrichtet.Viel Spaß bei der Wahl
∩