D vs. C++
-
Was haben Spezialanwendungen aus Luft- und Raumfahrt jetzt eigentlich genau mit der Frage zu tun was eine Systemprogrammiersprache ist und was nicht
-
Weisst du überhaupt noch, wofür du eigentlich argumentierst? Du meintest, dass es eine strikte Trennung für Systemprogrammiersprachen gibt und darüber diskutieren wir. Keiner von uns will die Steuereinheit in den ICEs mit PHP programmiert sehen.
Deine Argumente:
- Laut Definition keine VM oder APIs => Ist aber deine eigene Definition
- Man muss den AVX-Befehlssatz einbetten können => Da gibt C/C++/D auch nichts vor
- Vollständig bewiesene Fehlerfreiheit muss möglich sein => Kann man für alle "deterministischen" Sprachen oder für keine
- Harte Echtzeitfähigkeit => Wenn für C möglich, dann auch für C, das in einer VM, die in C geschrieben ist, läuft
- 35 Jahre Laufzeitgarantie lassen sich mit Assembler aber nicht mit VM garantieren => Wenn du die VM in selber Qualität in Assembler programmierst und die Anwendungslogik in irgendeiner Skriptsprache mit selbiger Codequalität, nimmt sich das nichts
Dann diskutierst du manchmal von einem versuchten wissenschaftlichen Standpunkt und manchmal ziehst du de facto-Beispiele heran. Und dass du dich hier von Braunstein bestätigt fühlst, zeigt nur wie wenig du überhaupt unsere Posts verstanden hast.
-
Und was das "Beweisen der Fehlerfreiheit" angeht ist C/C++ unbrauchbar. Das war zumindest die Take Home Message unserer Echtzeitsysteme Vorlesung...aber das nur am Rande, hat ja auch nichts mit dem Thema zu tun...
-
Hi,
selbst wenn man die Fehlerfreiheit von C beweisen kann, so ists doch noch was anderes auch die Fehlerfreiheit des Compilers zu beweisen, und der ist immer bei jeder Übersetzung (selbst bei Assembler) mit im Boot.
Alternativ kann man aber das ganze in C (oder sonst einer Sprache) schreiben und nicht automatisch übersetzen, sondern ein Mensch mit ausreichender Erfahrung und Sorgfalt setzt sich hin und spielt selbst Compiler.
Gruß Mümmel
-
Bewiesen fehlerfreies Programm? Soll das heißen, daß es tut, was die Spezifikation verlangt? Dann muß ja die Spezifikation bereits in einer exakten Sprache niedergeschrieben werden. Und wer sagt uns dann, daß die so niedergeschriebene Spezifikation das ist, was wir eigentlich haben wollen? Irgendwo bleibt da immer eine Lücke, die bisher nur denkende Menschen ausfüllen können.
-
volkard schrieb:
Bewiesen fehlerfreies Programm? Soll das heißen, daß es tut, was die Spezifikation verlangt? Dann muß ja die Spezifikation bereits in einer exakten Sprache niedergeschrieben werden. Und wer sagt uns dann, daß die so niedergeschriebene Spezifikation das ist, was wir eigentlich haben wollen? Irgendwo bleibt da immer eine Lücke, die bisher nur denkende Menschen ausfüllen können.
Wenn man ein Programm in eine formale Sprache überführen könnte, könnte man dann nicht auch formal beweisen, dass das Programm das tut, was es tuhen soll?
(Ja, die Spezifikation muss natürlich weiterhin von einem Menschen geschrieben werden. Aber der muss sich dann nicht mit technisches Details auseinandersetzen.)
-
thread-leser schrieb:
Weisst du überhaupt noch, wofür du eigentlich argumentierst? Du meintest, dass es eine strikte Trennung für Systemprogrammiersprachen gibt und darüber diskutieren wir. Keiner von uns will die Steuereinheit in den ICEs mit PHP programmiert sehen.
Exakt, deswegen brauchst du keine neuen Sprachen mit völlig neuen VM erfinden, denn das ist nicht das Thema.
Es hieß, geht Java, Javascript oder C# und was kann man nehmen, von dem bestehenden was der Markt bietet.Und zum Thema PHP, Javascript wurde ja von euch schon ins Feld geführt.
Deine Argumente:
[list][*] Laut Definition keine VM oder APIs => Ist aber deine eigene DefinitionIch habe APIs nicht generell ausgeschlossen, auch C hat eine Standard API.
Sondern ich sagte damit, daß bestehende APIs für so kleine HW fettes Zeugs sind deren Kontrolle oft in Dritter Hand liegt und man es deswegen besser nicht nutzt.Und bei der VM muß man sich gänzlich auf die VM verlassen, die ebenfalls aus Dritter Hand ist. Die JVM von Sun ist für AKWs darüberhinaus nicht zugelassen, auch das habe ich bereits gesagt und trotzdem wollt ihr Raumsonden mit Java und einer JVM von Sun ausstatten und das ist eben ein Griff ins Klo, aber auch das sagte ich bereits.
[*] Man muss den AVX-Befehlssatz einbetten können => Da gibt C/C++/D auch nichts vor
Wie ich bereits schrieb, von C/C++/D kannst du sehr einfach auf bestehenden Objektcode zugreifen.
Java dagegen kennt nur Bytecode und braucht wieder das JNI und die Stütze von C/C++/D um auszubrechen.
[*] Vollständig bewiesene Fehlerfreiheit muss möglich sein => Kann man für alle "deterministischen" Sprachen oder für keine
Alles Theorie, Fakt ist, daß du es für die JVM von Sun nicht machst.
Ja du machst es auch nicht für den Javascript Interpreter von Firefox oder die .Net RE von MS.C++ und D kann ich bereits schon JETZT für die HW nutzen.
[*] Harte Echtzeitfähigkeit => Wenn für C möglich, dann auch für C, das in einer VM, die in C geschrieben ist, läuft
Eine VM die speziell darauf angepaßt ist, ja vielleicht, aber das ist doch gar nicht das Theme, denn du behauptest doch, daß die JVM von Sun oder das .Net RE bereits genügt.
[*] 35 Jahre Laufzeitgarantie lassen sich mit Assembler aber nicht mit VM garantieren => Wenn du die VM in selber Qualität in Assembler programmierst und die Anwendungslogik in irgendeiner Skriptsprache mit selbiger Codequalität, nimmt sich das nichts
Noch einmal.
Ihr habt gesagt, daß man Java mit der JVM von Sun nehmen kann.
Ich habe gesagt, das ist nicht der Fall und jetzt kommst du mit einer aus der Luft gegriffenen neuen Sprache und VM.Daher schließe ich nun aus deiner Antwort, daß du hiermit zu gibst, das man Java und C# nicht nehmen kann.
Es hat lange gebraucht, bis du mir endlich zustimmst.
-
dot schrieb:
Was haben Spezialanwendungen aus Luft- und Raumfahrt jetzt eigentlich genau mit der Frage zu tun was eine Systemprogrammiersprache ist und was nicht
Ganz einfach.
Die Programme die für Raum- und Marssonden geschrieben werden, gehören zum Bereich der Systemprogrammierung.Das hat nichts mit Spezialanwendung zu tun.
Sondern es einer der Teile, der in der Systemprogrammierung entwickelt wird, neben AKW Steuersoftware, CNC Steuerungen, Software für ABS + ESP, Software für Flugzeugsteuerungen usw.ALL das IST und gehört zur Systemprogrmamierung.
-
@Apfelbirne
Du brauchst unbedingt Medezin, ich denke sowas hilft dir:
http://coe.uncc.edu/~jmconrad/ECGR6185-2008-01/notes/Real Time Virtual Machine.pdf
-
Apfelbirne schrieb:
hr habt gesagt, daß man Java mit der JVM von Sun nehmen kann.
[...]
Es hieß, geht Java, Javascript oder C# und was kann man nehmen, von dem bestehenden was der Markt bietet.
[...]
Eine VM die speziell darauf angepaßt ist, ja vielleicht, aber das ist doch gar nicht das Theme, denn du behauptest doch, daß die JVM von Sun oder das .Net RE bereits genügt.Ad I) Nein, falsch, zeig her.
Ad II) Wir meinten, dass man aus den Definitionen dieser Sprachen (und damit ihren Eigenschaften) nicht eine Unmöglichkeit der Systemprogrammierung mit denselben ableiten kann.
Ad III) Nein, falsch, zeig her.
Insgesamt: Wenn du unsere Posts tatsächlich so verstanden hast (wie auch immer das passiert sein mag), ist deine Gegenwehr ja verständlich
Auch wenn hin und wieder großer Unsinn in deinen Posts stand
-
Zerstört bitte nicht sein Weltbild. Sonst kommt er ernsthaft auf die Idee Java zu lernen.
-
Eine Raumsonde kann auch mit Brainfuck oder Whitespace programmiert werden, wenn ein entsprechender Compiler dazu existiert. Das hat doch mit der Sprache an sich nichts zu tun.
-
Wie ist das bei D eigentlich, wenn ich eine Klasse A hab, die instanzen der Klasse B und C beinhaltet. B und C sollen beide irgendwelche ressourcen verwalten (datenbank, socket, datei, ...).
Wie ist dann die vorgeschlagene Vorgehensweise bzgl. Destruktor/Dispose?Ich weiß, dass es das Scope Attribut gibt und das es Destruktoren gibt.
Aber die Behandlung im Destruktor hat den Nachteil, dass man dabei keine methoden von B und C aufrufen darf, weil diese bereits zerstört sein könnten.
Das das Scope-Attribut gibt es auch auf Klassenebene, nur habe ich noch nicht rausgefunden, wie das dann funktioniert.
Alternativ könnte man eine Dispose methode oder ähnliches anbieten, aber das birgt immer die Gefahr, dass sie nicht aufgerufen wird.Bei c++ wird das aufräumen einfach vom destruktor gemacht und gut ist.
Wie wird das bei D am besten gehandhabt?
-
Q schrieb:
Bei c++ wird das aufräumen einfach vom destruktor gemacht und gut ist.
Wie wird das bei D am besten gehandhabt?D hat nen abschaltbaren Garbage Collector, am einfachsten ist es also wohl den zu benutzen. Ob's die beste Lösung ist, hängt aber sicher vom Anwendungsfall ab, bequem ist es allerdings definitiv, so wie bei Java auch.
-
cooky451 schrieb:
Wenn man ein Programm in eine formale Sprache überführen könnte, könnte man dann nicht auch formal beweisen, dass das Programm das tut, was es tuhen soll?
Nicht zwangsläufig. Es gibt viele interessante Eigenschaften von Programmen, die nicht entscheidbar sind. Das Halteproblem dürfte wohl das prominenteste sein. Trotzdem hat sich in der Verifikation viel getan, mal sehen wo das hinführt.
Übrigens ist ein Programm selbst schon in einer formalen Sprache ausgedrückt.cooky451 schrieb:
(Ja, die Spezifikation muss natürlich weiterhin von einem Menschen geschrieben werden. Aber der muss sich dann nicht mit technisches Details auseinandersetzen.)
Hier machst Du einen kleinen Denkfehler: Die Spezifikationssprache muss formal mathematisch sein und ist saumäßig kompliziert. Oft viel schwieriger zu verstehen als eine Programmiersprache. Woher weiß man also, dass die Spezifikation korrekt ist?
-
Apfelbirne schrieb:
Steffo schrieb:
Apfelbirne schrieb:
Aber Java werde ich dafür niemals verwenden, bei Java ist es sogar nichtmal erlaubt, dies für ein AKW zu nutzen.
Weshalb nicht? Selbst die NASA setzt das für einen Marsroboter ein!
Für welchen Marsroboter?
Quelle?Mir ist kein Marsroboter bekannt, für den Java benutzt wird.
Macht auch wenig sinn, da Weltraumgeräte gegen Strahlung robust sein müssen und man daher auch bevorzugt neben hardend CPUs auch lahme CPUs in großer Fertigungstechnik verwendet, womit kein Platz für viel Leistung oder viel Speicherplatz da ist, was ein Java Programm aber mitsam VM benötigen würde.Ich würde sagen, deine Behauptung ist eine Urban Legend.
Und eventuell verwechselst du das mit normalen Desktopanwendungen die die NASA durchaus für diverse Weltraumprojekte verwendet, aber diese Anwendungen laufen auf normalen Computern und nicht auf Weltraumgerät.Es tut nicht weh zu googlen:
http://www.linuxjournal.com/article/7570
http://java.sys-con.com/node/39220
-
Selbst Lisp war schon im Weltraum: http://www.flownet.com/gat/jpl-lisp.html