Alternative zu C,C++



  • 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


Anmelden zum Antworten