Entwickler-Ecke
Sonstiges (Delphi) - Compiler, Linker
adler - So 10.10.04 13:36
Titel: Compiler, Linker
Servus.
Micht würde es nur mal interessieren, wo man infos zum Thema "Compiler" herbekommt.
Auch zum Thema "Linker" wäre es nicht schlecht.
Aber zum Anfang möchte ich nur mal ein Compiler für PHP schreiben.
Also Die Syntax checken usw.
ThX!
Erwünschte Antworten:
Tutorials
FAQs
Ander Infos
usw.
*gg* ;)
Mfg Adler
raziel - So 10.10.04 14:56
Du könntest Dir mal die Docs zum
Freepascal Compiler [
http://freepascal.org] anschauen. Es gibt auch ein Tutorial von einem gewissen Crenshaw, der einen Basic-Compiler für den 68k mit Turbo Pascal codet. Für den Einstieg bestimmt nicht schlecht, wenn auch das Endprodukt Richtung unbrauchbar sein wird, weil du wahrscheinlich keinen 68k Prozessor hast ;)
Anonymous - So 10.10.04 15:14
Titel: Re: Compiler, Linker
adler hat folgendes geschrieben: |
Micht würde es nur mal interessieren, wo man infos zum Thema "Compiler" herbekommt.
Auch zum Thema "Linker" wäre es nicht schlecht.
Aber zum Anfang möchte ich nur mal ein Compiler für PHP schreiben.
Also Die Syntax checken usw. |
Um die Syntax zu checken brauchst du sowas wie
http://www.devincook.com/goldparser/ aber sicher nicht gleich einen Compiler ;)
Die ganzen GNU-Compiler wandeln übrigens erst die Hochsprache in ASM und jagen den Rest durch den Assembler (zB FreePascal).
tommie-lie - So 10.10.04 15:32
Titel: Re: Compiler, Linker
Assarbad hat folgendes geschrieben: |
Die ganzen GNU-Compiler wandeln übrigens erst die Hochsprache in ASM und jagen den Rest durch den Assembler (zB FreePascal). |
Tun das nicht mittlerweile alle Compiler? :gruebel:
Anonymous - So 10.10.04 16:33
Nein, manche lassen den Zwischenschritt weg - quasi eingebauter "Assembler".
Anonymous - So 10.10.04 18:12
Zum PE-Format kannst du dir mal den quelltext von perdr ansehen, so hab ichs gemacht:
http://perdr.sf.net/
Ansonsten hab ich eigentlich nur die Ausgabe vom Delphi-Compiler und das hier benutzt:
http://nasm.sourceforge.net/doc/html/nasmdocb.html
Assarbad hat folgendes geschrieben: |
Nein, manche lassen den Zwischenschritt weg - quasi eingebauter "Assembler". |
Was ich auch sinnvoller finde. Es nicht so zu machen ist zwar weniger Arbeit aber da dafür auch zweimal geparsed werden muss langsamer.
Anonymous - So 10.10.04 19:20
obbschtkuche hat folgendes geschrieben: |
Zum PE-Format kannst du dir mal den quelltext von perdr ansehen, so hab ichs gemacht:
http://perdr.sf.net/ |
Daumen hoch!!! :beer: geiles Projekt. Schau ich mir morgen gleich mal genauer an.
MrSaint - Do 14.10.04 11:04
Titel: Re: Compiler, Linker
adler hat folgendes geschrieben: |
Aber zum Anfang möchte ich nur mal ein Compiler für PHP schreiben. |
Hi!
Nur mal ne kleine Definitionssache: PHP braucht keinen Compiler, sondern einen Interpreter! Ein Compiler (z.B. der Delphi-Compiler) ist ein Tool, welches Quellcode in ausführbaren Binärcode übersetzt. Wenn man das Programm dann weitergeben will, gibt man den Binärcode (also bei Delphi EXEs, DLLs etc.) weiter. Bei einem Interpreter ist das anders: Ein Interpreter liest den Quellcode und führt ihn gleich aus. Um das Programm (oder im PHP-Fall Script) weiterzugeben, gibt man den kompletten Sourcecode weiter.
Nur so nebenbei :D
MrSaint
Anonymous - Do 14.10.04 11:24
Titel: Re: Compiler, Linker
MrSaint hat folgendes geschrieben: |
Nur mal ne kleine Definitionssache: PHP braucht keinen Compiler, sondern einen Interpreter! Ein Compiler (z.B. der Delphi-Compiler) ist ein Tool, welches Quellcode in ausführbaren Binärcode übersetzt. Wenn man das Programm dann weitergeben will, gibt man den Binärcode (also bei Delphi EXEs, DLLs etc.) weiter. Bei einem Interpreter ist das anders: Ein Interpreter liest den Quellcode und führt ihn gleich aus. Um das Programm (oder im PHP-Fall Script) weiterzugeben, gibt man den kompletten Sourcecode weiter. |
In welche Schublade steckst du denn dann Perl und Java? Nur mal so nebenbei :mrgreen:
Ich finde nur deine Aussage etwas zu allgemein
MrSaint - Do 14.10.04 11:33
Titel: Re: Compiler, Linker
Assarbad hat folgendes geschrieben: |
In welche Schublade steckst du denn dann Perl und Java? Nur mal so nebenbei :mrgreen:
Ich finde nur deine Aussage etwas zu allgemein |
Perl is für mich n Interpreter, hatte aber noch net so viel damit zu tun... Wie das nu bei Java aussieht, weiß ich net genau, hab mit Java _noch_ nichts am Hut gehabt, wird aber bald kommen (Studium). Aber soweit ich weiß braucht Java auch nen Interpreter, wobei ich net glaub, dass die da den reinen Java-Source mitliefern bei nem Programm :roll: Also bei dem "normalen" Java weiß ich's net genau. Ich hab nu aber auch von nem Java-Compiler gehört, mit dem es möglich is, n Betriebssystem zu schreiben (wurde an meiner Uni anscheined so umgesetzt:
Plurix [
http://www.plurix.de/], wobei die den Compiler hier wohl selbst geschrieben haben). Also normalerweise würd ich sagen so n Zwitterding, lass mich da aber gern belehren, weil ich's wirklich net sicher weiß :D
Bei PHP is es auf jeden Fall n Interpreter :) Wobeio, man könnte bestimmt auch nen Compiler draus basteln *g* Hat aber gleub noch niemand umgesetzt ;)
MrSaint
raziel - Do 14.10.04 11:50
Ich würd sagen, es ist unabhängig von der Sprache, obs interpretiert oder compiliert wird, es kommt auf das Programm an, das die jeweiligen Skripten interpretiert und ggf. noch compiliert. :gruebel:
MrSaint - Do 14.10.04 11:56
raziel hat folgendes geschrieben: |
Ich würd sagen, es ist unabhängig von der Sprache, obs interpretiert oder compiliert wird, es kommt auf das Programm an, das die jeweiligen Skripten interpretiert und ggf. noch compiliert. :gruebel: |
gut, also ich bin nu halt bei PHP und Perl von den "Standardanwendungen" ausgegangen... Ich hab noch nie n compilierten PHP-SOurce oder compilierten Perl-Source gesehn...
MrSaint
Alni - Do 14.10.04 12:01
Java ist ne Mischung. Zuerst wird der sogenannte Bytecode erzeugt (compiliert) und dieser dann auf verschiedenen Systemem interpretiert (Edit: bzw auf der Java Virtual Machine ausgeführt).
Anonymous - Do 14.10.04 12:43
Alni hat folgendes geschrieben: |
Java ist ne Mischung. Zuerst wird der sogenannte Bytecode erzeugt (compiliert) und dieser dann auf verschiedenen Systemem interpretiert (Edit: bzw auf der Java Virtual Machine ausgeführt). |
Perlscipte werden (bis auf EVALs) auch vorher kompiliert! Daher meine Frage. Ich glaube man kann heute nicht mehr zwischen Compiler- und Interpretersprachen unterscheiden, sondern nur zwischen "Programmiersprachen" (echte Binaries) und Skriptsprachen. Wobei das vielleicht auch zu kurz gefaßt ist.
BenBE - Do 14.10.04 13:40
Ich glaube, mann sollte die Programmiersprachen eher einteilen, nach der Laufzeit-Umgebung, womit diese Einteilung eigentlich relativ gut hin haut:
Compiler-Sprachen (ASM, Delphi, C++)
JIT-Sprachen (JAVA, PHP, Perl, VB)
Scriptsprachen (JavaScript, VBScript [WSH :D], das schöne alte QBasic, ...)
Markup Sprachen (HMTL, XML, SGML, ...)
Zumutungen: .NET :mrgreen:
adler - Do 14.10.04 16:50
Passt mal auf, ich habe das so erklärt bekommen, und der hat Ahnung:
Copiliert wird jede Sprache.
Denn Compilieren ist einfach nur der Syntax-Check der Sprache.
Dann wird ge-Linkt oder Interpretiert.
Also Maschinencode erzeugen = Linken.
;-)
Und weil VB interpretiert wird, bin ich umgestiegen ;)
Spieler1 - Do 14.10.04 16:56
adler hat folgendes geschrieben: |
Passt mal auf, ich habe das so erklärt bekommen, und der hat Ahnung:
Copiliert wird jede Sprache.
Denn Compilieren ist einfach nur der Syntax-Check der Sprache. |
Parsen ist AFAIK der "Syntax-Check". Warum hat derjenige Ahnung?
adler hat folgendes geschrieben: |
Und weil VB interpretiert wird, bin ich umgestiegen ;) |
War es dir zu langsam, oder hast du gründsätzlich was gegen Interpreter-Sprachen?
Anonymous - Do 14.10.04 16:58
adler hat folgendes geschrieben: |
Und weil VB interpretiert wird, bin ich umgestiegen ;) |
Da gibt's 2 Modi. P-Code und Native. Der erste ist glaub ich die interpretierte Variante.
Aber alles in allem gilt der Spruch:
It is practically impossible to teach good programming style to students that have had prior exposure
to BASIC; as potential programmers they are mentally mutilated beyond hope of regeneration.
Der heute wie damals nicht witzig sondern ernst gemeint ist.
adler - Do 14.10.04 17:09
War ganz einfach zu langsam für 3D :)
Spieler1 - Do 14.10.04 17:56
Assarbad hat folgendes geschrieben: |
Aber alles in allem gilt der Spruch:
It is practically impossible to teach good programming style to students that have had prior exposure
to BASIC; as potential programmers they are mentally mutilated beyond hope of regeneration.
Der heute wie damals nicht witzig sondern ernst gemeint ist. |
adler hat folgendes geschrieben: |
War ganz einfach zu langsam für 3D :) |
Und was sagst du zu dem Spruch?
Ich hab (zum Glück? ;) ) nicht mit Basic angefangen und auch nie richtig Basic programmiert, desewegen kann ich das nicht beurteilen. (Ach ja, und ich bin auch kein Professor ;) ).
Alni - Do 14.10.04 18:08
Also
In der Regel gibt es für fast jede Sprache einen Compiler und einen Interpreter.
@adler
Compilieren hat nix mit Syntax-check zu tun. Wie Spieler1 schon geschrieben hat macht das der Parser. Der Linker verknüpft compilierte Objektdateien (*.o in c oder *.dcu in delphi) zu einer ausführbaren Datei
@BenBe
PHP wird in der Regel (so wie es auf Webseiten verwendung findet) interpretiert. Ja es gibt PHP Compiler, aber wie gesagt wir wollen ja vom Normalfall ausgehen, weil wir sonst keine Sprache zuordnen könnten.
Bei Java wird der Bytecode, wie ich oben erwähnt habe, auf einer virtuellen Maschine ausgeführt. Das hat aber nichts mit JIT(Just-in-Time)-Compilieren zu tun, auch wenn es diese für Java gibt. Werden aber kaum verwendet.
Ein gutes Beispiel für JIT wäre .NET mit seinen Sprachen
Insgesamt hat wohl Assarbard recht, da man im Endeffekt die Sprachen fast nach belieben entweder interpretieren oder compilieren kann. Wenn diese Unterscheidung dennoch getroffen werden soll, dann danach wie die Sprache ursprünglich von den Entwicklern angelegt wurde.
Anonymous - Do 14.10.04 18:24
Spieler1 hat folgendes geschrieben: |
Ich hab (zum Glück? ;) ) nicht mit Basic angefangen und auch nie richtig Basic programmiert, desewegen kann ich das nicht beurteilen. (Ach ja, und ich bin auch kein Professor ;) ). |
Sei froh. Ich mußte es, nachdem ich bereits Delphi/OPascal und C sowie teilweise ASM gemeistert hatte und es war eine Qual :-/
Anonymous - Do 14.10.04 18:34
Ich muss es jetzt zwangsweise wg Schule. Alleine schon dass es verschiedene "end"s für if, for und sonstige Schleifen gibt... *schauder*
Insbesondere in Kombination mit einem Lehrer der davon redet dass "Der PC abstürzt wenn man versucht die Wurzel aus einer negativen Zahl zu ziehen" und "Randomize eine Tabelle mit Zufallszahlen anlegt" ist das ganze sehr lehrreich.
Spieler1 - Do 14.10.04 19:53
obbschtkuche hat folgendes geschrieben: |
Ich muss es jetzt zwangsweise wg Schule. Alleine schon dass es verschiedene "end"s für if, for und sonstige Schleifen gibt... *schauder*
Insbesondere in Kombination mit einem Lehrer der davon redet dass "Der PC abstürzt wenn man versucht die Wurzel aus einer negativen Zahl zu ziehen" und "Randomize eine Tabelle mit Zufallszahlen anlegt" ist das ganze sehr lehrreich. |
Bis vor kurzem wurde bei uns an der Schule Turbo Pascal unterrichtet, was ich eigentlich ganz ok finde, da es ja doch ziemlich ähnlich mit Delphi ist. Jetzt machen wir Java, das hat halt den Vorteil der OO Programmierung. :D
BenBE - Do 14.10.04 20:39
Ich hab mal mit dem Vorläufer von VB gearbeitet (QB für die Insider unter uns) und hab damit eigentlich wirklich angefangen zu programmieren. Vom Grundaufbau gut, vom Speed (siehe oben) und von der Flexibilität zum in die Tonne treten, aber naja: Es fängt halt jeder klein an :D
Danach kam Delphi und ich musste mich erst reinarbeiten, hab zwischenzeitlich QB nur noch als Zeitvertreib, und progge inzwischen hauptsächlich mit Delphi. VB habsch nebenbei mal angeguckt aber nach paar Wochen sofort wieder weggelassen, da das auch in die Kahegorie von .NET mit reingehört (:oops: hattsch mich vorhin bei VB vertan).
Und wenn dann zu einer Schrott-Programmiersprache noch ein genausoguter Lehrer dazukommt, dann ist aller Tage abend ...
Aber im Allgemeinen kann man immernoch finden, dass es zwei Arten gibt: Ausführung durch Programm selber und Ausführung durch Fremdprogramme. (Ich hoff, damit geht jeder mit?)
JIT gehört dabei in die zweite Kategorie, da eine Fremdanwendung für die Ausführung notwendig ist. Und da JIT langsamer ist als Precompiled, sollte man für High-Performance-Dinge JIT meiden.
Oder wollt ihr ein Spiel erst einmal in beschissenem Unter-Durchschnitt-Speed ruckelnd spielen, damit es im Assembly-Cache des JIT-Compilers liegt?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!