Exceptions in C



  • Wenn man Exceptions in reinem Standard C implementieren wollte, welche Möglichkeiten hat man da? Das erste was mir einfällt ist was auf Basis von setjmp/longjmp zu bauen. Gibts noch mehr?


  • Mod

    Du kannst das theoretisch auch als eine riesige if-Orgie mit State-Variablen ausschreiben (oder von einem Codegenerator machen lassen), um den gleichen Logikfluss zu erreichen. Aber das ist bloß setjmp/longjmp in einem anderen Gewand, bloß zu dem Selbstzweck, nicht setjmp/longjmp zu benutzen. Wenn du bei klarem Verstand bleiben willst, dann nimm diese.

    Die übliche Implementierung von Exceptions in anderen Sprachen passiert aber nicht umsonst auf Compiler-/Interpreterebene. Denn so richtig schön wird das erst, wenn man Information über den Aufbau des übersetzten Programms und den Ausführungsstatus hast. Auf Ebene des Quellcodes wirst du solche Information nie haben, daher wird es nie viel besser als mit setjmp/longjmp werden, egal wie viele Tricks und Erweiterungen benutzt.



  • Das hab ich befürchtet. Klar der Compiler kann Table Based EH machen o.ä, es soll in dem Fall aber von einem (nicht modifizierbaren) C Compiler geschluckt werden.


  • Mod

    Du scheinst hier irgendetwas sehr konkretes vor zu haben. Kannst du das erläutern? dann kann man dir besser helfen, als bei allgemeinen Fragen, was so prinzipiell alles möglich sein könnte.



  • Naja, es soll ein C++ nach C Compiler (auf Basis von LLVM) werden. Damit soll quasi auf Umwegen C++ auf Platformen, die nur einen C Compiler haben ermöglicht werden. Und ein Feature von C++ ist eben EH.





  • Und nu? Was willst du mir damit sagen? Dem halte ich mal entgegen, dass es bereits Exception Implementationen auf setjmp/longjmp Basis für Embedded Anwendungen in C gibt. Grundsätzlich geht's also. Nur hat setjmp/longjmp eben Auswirkungen auf die Laufzeit. Daher meine Frage.


  • Mod

    @Tyrdal sagte in Exceptions in C:

    Und nu? Was willst du mir damit sagen?

    Das heißt, der Autor von C++ mit einem ganzen Team von Fachleuten und Unterstützung großer Unternehmen hat das Vorhaben, einen konformen, vollständigen C++-zu-C-Compiler aufgegeben, und stattdessen auf einen direkten C++-zu-Maschinensprache-Compiler umgeschwenkt. Weil ihnen Exceptions zu schwer waren. Das sagt halt etwas über deine Erfolgsaussichten aus.

    Wenn du sowieso LLVM dazwischen nutzt, dann ist doch sowieso die Sache schon fast gegessen. Dann brauchst du doch "nur" ein Backend für LLVM schreiben, so dass du von dort zu konkretem Code für deine Zielplattform kommst. Was eine ganze Ecke einfacher sein sollte, als der Umweg über C. Und du bekommst alle anderen Sprachen mit LLVM-Frontend noch gratis dazu!



  • Ich hab mir das nicht selbst ausgedacht. Klär könnte man direkt für die Zielplattform kompilieren, wenn da nicht noch andere Tools zwischendurch auf dem C Code operieren würden. Tun sie aber. Das das nicht leicht wird ist klar. Unmöglich ist es aber nicht. Comeau hatte vor Jahren sowas, mit Exceptions.


  • Mod

    Die sind halt auch mit der Manpower einer ganzen Firma über Jahre hinweg daran gewesen. Sagt ja auch keiner, dass es prinzipiell unmöglich wäre. Bloß nur mit fast annähernder Sicherheit viel aufwendiger, als den gleichen Zweck mit anderen Mitteln zu erreichen.

    Oder du lässt Exceptions fallen, denn alles außer Exceptions sollte eigentlich relativ einfach sein, nun da es kein extern template mehr gibt.



  • Oh, ich werde nicht allein dran arbeiten. Da ist auch eine ganze Firma im Spiel 🙂 Ich kann jetzt nicht alles erklären. Aber es wird bereits auch anderen Sprachen bereits nach C übersetzt und dann was mit dem C Code angestellt. Warum nach C und nicht nach LLVM IM Code kann ich gar nicht sagen, aber daher gibt's bereits ne Toolchain für C und die soll weiter genutzt werden.

    Fallen lassen kann iman Exceptions leider nicht. Und ja ich seh den Rest auch einfacher. Nur seit wann soll es deiner Meinung nach extern template nicht mehr geben? Verwechselst du das mit export?

    Aber zum eigentlichen Punkt: Ihr habt also auch keine bessere Idee. Ist ja auch schone Erkenntnis.


  • Mod

    @Tyrdal sagte in Exceptions in C:

    Fallen lassen kann iman Exceptions leider nicht. Und ja ich seh den Rest auch einfacher. Nur seit wann soll es deiner Meinung nach extern template nicht mehr geben? Verwechselst du das mit export?

    Ja 🙂


Anmelden zum Antworten