Allgemeine Frage

06/26/2012 20:05 Steady-State#1
Hallo,
ich interessiere mich nicht fürs Coding....will jedoch aus Interesse wissen, ob jede Programiersprache "1:1" übesetzbar in eine andere ist?
Danke für die Antwort(en)!
06/26/2012 20:17 nkkk#2
nein ist es nicht. Auch wenn sie im allgemeinen sehr ähnlich sind gibt es features Die eineige sprachen unterstützen und andere nicht, sodas man für dinge sie in einer sprache sehr einfach sind in einer andren sprache viele zeilen code brucht um das zu machen.

ausserdem gibt es noch sachen die man in einigen sprachen garnicht machen kannst z.B. kannst du in AutoIt keine hardware treiber schreiben.
06/26/2012 20:30 $ilex#3
^this

der syntax ist bei jeder sprache unterschiedlich...
06/27/2012 15:15 Coding Lounge#4
Grundsätzlich nein.

Als eine der wenigen ausnahmen gelten C# und VB.NET (teils auch generell .NET Sprachen) durch diverse Konverter, die aber meistens immer Fehler beim Compilen bringen.


Klar könntest du jetzt einen C++, C,... Code in C#, Java,... umschreiben. Die Arbeit musst aber trotzdem du erledigen, die kann dir keine Maschine abnehmen.
06/30/2012 20:01 MrSm!th#5
Natürlich geht das, gerade weil die Syntax sogar ziemlich ähnlich und die Features nahezu gleich sind.

Aber es geht nicht von jeder in jede.

Du wirst ohne Umwege von einer OOP Sprache nicht in C konvertieren können und inline ASM wirst du auch nicht in Autoit Code bekommen.
06/30/2012 21:53 Dr. Coxxy#6
Quote:
Originally Posted by MrSm!th View Post
Natürlich geht das, gerade weil die Syntax sogar ziemlich ähnlich und die Features nahezu gleich sind.

Aber es geht nicht von jeder in jede.

Du wirst ohne Umwege von einer OOP Sprache nicht in C konvertieren können und inline ASM wirst du auch nicht in Autoit Code bekommen.
überleg grade, müsste es nicht möglich sein die oo von C++ durch einen automaten in C zu übertragen?

eigentlich lassen sich ja alle klassen auch als strukturen darstellen, virtuelle funktionen und vererbung kriegt man über funktionspointer hin (so wie es c++ compiler auch tun), memberfunktionen müsste man über entsprechende namenskonventionen regeln, aber eigtl. sollte sich doch alles automatisieren lassen, oder überseh ich irgendetwas?

EDIT:
gibt wohl sogar ein paar halbwegs funktionierende laut google:
[Only registered and activated users can see links. Click Here To Register...]
07/01/2012 12:19 tnd0#7
Quote:
berleg grade, müsste es nicht möglich sein die oo von C++ durch einen automaten in C zu übertragen?
Ja ist es. Gute c++ compiler kamen erst Jahre nach standardization von C++ raus, vorher waren die meisten C++ Compiler im Prinzip nur Programme die C++ in C übersetzt haben und dann den C-compiler angeworfen haben.




Ob man jede Sprache in jede andere Sprache konvertieren kann, kommt darauf an was man als Programmiersprache sieht und um welche Platformen es geht, und was eine 1:1 übersetzung ist.

Eine 1:1 übersetzung im Sinne 1:1 gleicher Executable-Dateien wohl kaum, es sei denn man schreibt seinen eigenen compiler. 1:1 in der funktionalität ist bedingt möglich, bei unterschiedlicher performance und resourcenverbrauch.

Wenn man versucht AutoIt & co mit C gleichzustellen, dann hat man spätestens bei fork() bzw. CreateThread() ein Problem, die allerwenigsten Scriptsprachen besitzen die Fähigkeit zum kontrollierten Multithreading. Und das ist bei weitem nicht die einzige Einschränkung.

Man kann jedes C++ wohl irgendwie in Delphi oder andere Hochsprachen 'umschreiben', aber das bringt einem nicht viel wenn der C++ Source für einen Compiler gedacht ist, der Code für irgendwelche exotischen Geräte erstellt. Es sei denn, man schreibt gleich noch seinen eigenen Compiler dazu.

C# und .Net hätten bei unterschiedlichen Platformen garkeine chance, denn da compiled man seine Programme ja nichtmal zum release, sondern es wird zur Laufzeit kompiliert. Also müsste man da erstmal das .Net FrameWork oder den java JIT compiler auf die Zielplatform konvertieren, falls das FrameWork dort existiert gehts, wenn nicht, tja, dann nicht.


Wenn man sich nur auf Windows beschränkt, kann man zwischen Java, c#, c++, delphi und vielen weiteren hochsprachen durchaus funktional-identische Programme erstellen wenn man keine Systemnahen Funktionen braucht. Einen Treiber kann man mit Java nicht erstellen, bei .Net bin ich mir nicht ganz sicher.
07/01/2012 20:32 MrSm!th#8
Klar, ich sagte es geht nicht ohne Umwege. Ich sagte nicht, es sei unmöglich.

Unter 1:1 Übersetzen verstehe ich nämlich, dass ich ein Feature einer Sprache genau so auch in einer anderen nutzen kann. C unterstützt kein OOP, du musst es dir über Umwege nachbauen und das ist für mich kein 1:1.
Du baust im Grunde das OOP mit Mitteln nach, die du so in C++ zb. auch hättest nutzen können (du kannst ja auch auf die Features scheißen und dir dein OOP mit Funktionspointern, Arrays als VTables und Strukturen selbst machen :P), dann wäre es sogar eine 1:1 Übersetzung von einem C++, in dem du halt kein richtiges OOP mehr nutzt.

Btw. war es nicht so, dass die ersten Ansi C Versionen nichtmal Strukturen unterstützten?
07/01/2012 22:23 Steady-State#9
Mit 1:1 meinte ich nicht ohne Umwege, sondern das "alle" Eigenschaften usw. erhalten werden.
07/01/2012 22:43 Dr. Coxxy#10
streng genommen bleibt ja alles erhalten, codest ganz normal in C++, jagst das ganze durch einen C++ to C automaten und dann durch nen C-Compiler.

Leistungsabfall, wenn er überhaupt entsteht, sollte ziemlich gering sein.
07/01/2012 22:52 MrSm!th#11
Funktional ja, kommt halt wie gesagt drauf an von welcher Sprache zu welcher.
Allerdings bleibt es im Source nicht ganz erhalten.