Login
Newsletter

Thema: C-Programme interpretieren

28 Kommentar(e) || Alle anzeigen ||  RSS
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
mehr TCC
0
Von Boris Jakubith am Mi, 15. Juni 2005 um 00:28 #
"Es ist nicht ganz klar, ob der C-Code wirklich interpretiert oder zuerst compiliert wird."

Tcc ist ein echter Compiler, der jedoch auch dynamisches Binden und die direkte Ausführung des gerade übersetzten Codes beherrscht. Diese Eigenschaft verbindet die Vorteile beider Welten:

a) "Quasi"-Interpretation eines Programmes einfach dadurch, daß dieser Compiler extrem schnell übersetzt,

b) Übersetzung des auszuführenden Programmes in (x86-)Maschinencode, so daß eine sehr viel höhere Ausführungsgeschwindigkeit als bei interpretierten Programmen möglich ist.

Natürlich erzeugt Tcc weniger effizienten Code als der GCC, dafür ist er bei der Übersetzung um (schätzungsweise) den Faktor 5-10 schneller...

(Siehe auch TCC : Tiny C Compiler)

[
| Versenden | Drucken ]
  • 0
    Von Peter am Mi, 15. Juni 2005 um 09:22 #
    5-10x? Also wenn der Kernel in 10 sekunden auf nem 2.4 GHz PC uebersetzt wird von tcc, dann ist das wesentlich mehr als 10x.
    [
    | Versenden | Drucken ]
    0
    Von 2300 am Mi, 15. Juni 2005 um 11:37 #
    Die Geschwindigkeit spielt bei den heutigen PCs auch gar nicht mehr eine so grosse Rolle. Meiner Meinung nach aber genial ist, dass man C-Quelltext als Programm behandeln kann. Diese an sich simple Sache macht das Programmieren viel leichter.
    [
    | Versenden | Drucken ]
0
Von Agonizer am Mi, 15. Juni 2005 um 02:20 #
Hallo!

Auf der Suche nach einer Skriptsprache, welche leich in C 'einbaubar' sein sollte, bin ich auf Lua gestoßen. Lua-Programme werden vor dem ausführen in einen Bytecode übersetzt und dann interpretiert. Beides aber sehr schnell. Man kann eigene Funktionsbibliotheken bauen und Lua-Programmen dann diese zur Verfügung stellen. Ich habe damit in kurzer Zeit einem scriptlosen IRC-Bot (energymech) lua-Scripte 'beigebracht'. Die Syntax von lua ist einfach, Variablen sind typenlos (ein Variablenname kann einen String, eine Nummer, eine Tabelle oder auch eine Funktion referenzieren), und statt arrays gibt es halt Tabellen (tables), welche jeweils mit einem key-value-Paar arbeiten. Als Key kann einfach fast alles Herhalten, und der Value kann wiederum auf andere Tabellen verweisen. Mit dabei sind string, mathe, io, table und noch andere Bibliotheken

Sollte man sich mal anschauen falls man auf der Suche nach einer Skriptsprache ist.

Beispielcode:

Alter = { } -- leere Tabelle anlegen
Alter["paul"] = 34
Alter["gabi"] = "unbekannt"
Alter["fred"] = 47

dabei ist der Key in diesem Fall der Name. 'print Alter["gabi"]' würde z.B. "unbekannt" ausgeben. For-Schleifen können mit Tabellen arbeiten:

for key, value in pairs(Alter) do
print "Das Alter von "..key.." ist "..value.."!"
end

Ich bin jedenfalls begeistert.

Gruß,
Torsten

[
| Versenden | Drucken ]
  • 0
    Von NikN am Mi, 15. Juni 2005 um 02:48 #
    Toll... Trifft auch alles auf Perl zu. Es gibt auch Bytecode. Inline C. Umgekehrt Perl in C. Es hat auch nur schwache Typen. Bei anderen Skriptsprachen wie Python, php oder ruby dürfte das ebenfalls ähnlich sein.

    Was hebt LUA jetzt von anderen Skriptsprachen ab? Perl hat tolle Abkürzungen für alles. Mit PHP kann man ein bisschen einfacher dynamische HTML-Seiten schreiben. Ruby ist AFAIK sehr schön objektorientiert. Python schön lesbar und man kann auf Semikolone verzichten und muss dafür öfter Enter drücken.

    NikN

    [
    | Versenden | Drucken ]
    • 0
      Von Agonizer am Mi, 15. Juni 2005 um 08:31 #
      > Was hebt LUA jetzt von anderen Skriptsprachen ab?

    • die Syntax (lua ist lesbar)
    • Die Größe (lua-interpreter: ~128 kB, Perl > 1MB)
    • die Größe der libs:
      1. Lua:
      2. 61736 /usr/lib/liblualib.so.5.0
      3. 94692 /usr/lib/liblualib.a
        Perl:
      1. 1013664 /usr/lib/libperl.so.1.5.8
    • Ich kann kein Perl, bin zu doof dazu :)
    [
    | Versenden | Drucken ]
0
Von lua - der mond am Mi, 15. Juni 2005 um 09:18 #
- Lua ist für Embedding optimiert
- sehr einfach mit C/C++ tz verknüpfen
- kann sehr einfach um eigene in C/C++ geschriebene Funktionen erweitert werden
- kann auch als Dateiformat verwendet werden
- ist besser zu lesen als XML
- klein und schlank (Bibliotek die gelinkt werden muß: 150kByte)
- schneller als Python, Perl, Ruby
- ist sehr verbreitet bei den Game Entwicklern (Far Cry)
- auch nutzbar in kommerziellen Programmen (Mit Lizenz)
- einfach zu lernen
- gut dokumentiert / das einzige Lua Buch ist als html verfügbar
- in diversten Game Programming Büchern wird Lua vorgestellt
[
| Versenden | Drucken ]
  • 0
    Von Johann am Mi, 15. Juni 2005 um 10:02 #
    ...- auch nutzbar in kommerziellen Programmen (Mit Lizenz)...

    ich habe auf die Schnelle gefunden, dass die aktuelle Lizenz MIT ist. Ist man hiermit beim Einsatzt in kommerzielen Programmen irgendwie gebunden. MIT-Lizenz habe ich gelesen und nichts diesbezüglich gefunden?

    [
    | Versenden | Drucken ]
    0
    Von Timo Stöckigt am Mi, 15. Juni 2005 um 12:42 #
    - ist besser zu lesen als XML

    Geht es jetzt nur mir so oder sehen auch andere keine logische Verbindung zwischen den beiden Sprachen?

    Ciao
    Timo

    [
    | Versenden | Drucken ]
0
Von Olli am Mi, 15. Juni 2005 um 10:33 #
schau dir mal lua vom aussehen der syntax an und dann nochmal perl und dann nochmal lua - wenn du dann nicht siehst was lua von perl abhebt weiss ich auch nicht so recht ;)
olli
[
| Versenden | Drucken ]
  • 0
    Von NikN am Mi, 15. Juni 2005 um 19:12 #
    Hmmm... Also das wirkt mir zu Pascal-artig. Außerdem sind die Funktionsnamen so lang. Dadurch muss man ewig lang schreiben. Und Perl kann man da schlecht vergleichen. Da gibt es zuviele Möglichkeiten.

    Das mit der Geschwindigkeit sehe ich aber ein.

    NikN

    [
    | Versenden | Drucken ]
0
Von Peter W. am Mi, 15. Juni 2005 um 03:56 #
Lua ist Klasse. Der Unterschied zu anderen Sprachen ist die leichte Einbindbarkeit in C-Programme. Der Syntax wird häufig mit BASIC verglichen. Pascal finde ich passender.

Etwas anderes ist zum Beispiel Luban. Das ist eine Scriptsprache, die einen C-ähnlichen Syntax hat. Mich wundert, dass die noch kaum jemand kennt.

http://www.lubankit.org/

[
| Versenden | Drucken ]
0
Von LH am Mi, 15. Juni 2005 um 07:59 #
Wenn du dich stärker einarbeitest kannst du dich ja bei Blizzard bewerben, LUA ist afaik ein wichtiger Teil von World of Warcraft.
[
| Versenden | Drucken ]
0
Von TheOther am Mi, 15. Juni 2005 um 17:22 #
schon mal mit tcl gearbeitet - alles alter Hut .....

Mfg TheOther

[
| Versenden | Drucken ]
0
Von egal am Mi, 15. Juni 2005 um 07:21 #
Quote:

TCC can also be used to make C scripts, i.e. pieces of C source that you run as a Perl or Python script. Compilation is so fast that your script will be as fast as if it was an executable.

[
| Versenden | Drucken ]
0
Von anonymous am Mi, 15. Juni 2005 um 07:52 #
Seit wann ist denn bitte TCL C-ähnlich? Irre ich mich?
[
| Versenden | Drucken ]
0
Von myname am Mi, 15. Juni 2005 um 09:19 #
...ich habe ihn bereits sehr erfolgreich eingesetzt. Konkret ging es dabei um eine Hardware-Test-Simulation. Die einzelnen Testcases wurden in C++ geschrieben (gescriptet) und vom CInt interpretiert. Das ganz lief unter Windows. Die testcases konnte ich editieren, den Test durchlaufen lassen, nochmal editieren und so weiter - das alles während die Testsimulation gelaufen ist.
[
| Versenden | Drucken ]
0
Von marc am Mi, 15. Juni 2005 um 09:49 #
Eine weitere möglichkeit C Programme laufen zu lassen, allerdings mit vorheriger Compilierung in die .NET Zwischensprache ist das DotGNU Portable.NET, http://www.dotgnu.org/pnet.html und
http://www.southern-storm.com.au/docs/pnettools_3.html#SEC21
[
| Versenden | Drucken ]
  • 0
    Von myname am Mi, 15. Juni 2005 um 10:00 #
    Eine weitere möglichkeit C Programme laufen zu lassen, allerdings mit vorheriger Compilierung in Maschinensprache bietet jeder Compiler...
    Es ging hier um Interpretation...
    [
    | Versenden | Drucken ]
    • 0
      Von marc am Mi, 15. Juni 2005 um 11:13 #
      Ach, ne ! warum habe ich wohl
      "Eine weitere Möglichkeit" geschrieben ;)
      Und es ist nicht ganz das gleiche wie echtes C Kompilieren, da das erstellte Pseudobin dann auf allen .NET Umgebungen läuft.
      Und, na ja , das dies OT ist, war mir schon klar, aber immer noch besser als die typischen Trolls;)
      Außerdem scheint das (DotGNU+C Compiler) nicht sehr bekannt zu sein. (Ob es wirklich sinn macht ist natürlich eine andere Fragen :)
      [
      | Versenden | Drucken ]
0
Von chris am Mi, 15. Juni 2005 um 11:24 #
Ich habe cint ein paar Mal schon sehr erfolgreich benutzt. Allerdings nicht als standalone Programm, sondern als Teil der root Platform (root.cern.ch). root ist ein Framework, das am CERN entwickelt wird und das im Kern cint als C++-Interpreter benutzt. Cint soll ca. 95% der C++-Spezifikation unterstuetzen, es gibt also Sachen, die nicht funktionieren. Das root-Framework fuegt sehr viele Bibliotheken zur numerischen Auswertung von Messdaten, sowie plot und Graphikroutinen dazu. Seit einiger Zeit wird auch Qt als graphisches Interface unterstuetzt. Rechenaufwendige Routinen kann man compilieren (indem man die Funktionen/Klassen/... in einer eigenen Datei unterbringt, z.B. meineFunktionen.C und dann mittels .L meineFunktionen.C++ laedt. Das angehaengte ++ sorgt dafuer, dass der gcc die Datei kompiliert und in eine shared Library speichert. Diese Bibliothek kann man dann innerhalb des root-Frameworks laden und verwenden, der erzeugte Code ist ganz normal kompilierter Code, ist also genauso schnell). Unter root.cern.ch gibt's nicht nur das Framework, sondern auch eine Fuelle sehr guter Tutorials, Beispiele, Vortraege, etc. Ein weiteres Highlight ist, die Platformunabhaengigkeit, root gibt's naemlich fuer sehr viele Platformen. Eine Python Anbindung gibt's auch, habe ich bisher allerdings nur sehr rudimentaer ausprobiert. Alles in allem bin ich ziemlich begeistert von root und kann es jedem, der C/C++-Kenntnisse hat, an Datenanalyse interessiert ist und evtl. auch noch Platformunabhaengigkeit braucht, sehr empfehlen.

chris

[
| Versenden | Drucken ]
  • 0
    Von philip am Do, 16. Juni 2005 um 13:05 #
    > Cint soll ca. 95% der C++-Spezifikation unterstuetzen, es
    >gibt also Sachen, die nicht funktionieren
    Ja, das ist allerdings bei fast jedem C++-Compiler so. So weit ich weiß ist der Comeau C++ Compiler der einzige, der den kompletten Sprachumfang unterstützt.
    Naja abgesehen davon ist Cint (vielleicht liegts auch einfach an den ROOT-Bibliotheken) nicht besonders zuverlässig. Z.B. hatte ich letztens den Fall, dass ich eine Klasseninstanz (war allerdings ne Klasse von ROOT..) nur benutzen konnte, wenn ich sie als Pointer erstellt hab. Ich schätze mal, dass das Motto der Entwickler ("release early, release often") daran nicht ganz unschuldig ist. Sonst ists echt ne praktische Sache.
    [
    | Versenden | Drucken ]
    • 0
      Von Barross am Do, 16. Juni 2005 um 17:42 #
      interessant, das problem hatte ich auch und mit ROOT Libs aber ohne den Cint, also liegt es wohl eher an den Bibliotheken.

      Viele Grüße...

      [
      | Versenden | Drucken ]
      0
      Von chris am Fr, 17. Juni 2005 um 00:31 #
      Was ich meinte waren eigentlich Sachen, die funktionieren sollten (es gibt so ein paar Template Sachen, die nicht funktionieren; hab' ich festgestellt, als ich versucht habe, eine externe nicht root-Bibliothek unter root zu verwenden). Ansonsten gibt es natuerlich ab und zu ein paar "Haenger" (wahrscheinlich wegen des "release early, release often"). Insgesamt finde ich aber was die root-Bibos leisten super (und auch noch in C++, meiner Lieblingssprache). Glueckwunsch root-Team!
      [
      | Versenden | Drucken ]
      • 0
        Von philip am Sa, 18. Juni 2005 um 12:56 #
        Probier mal die template-Unterstützung vom g++ aus, kann ich nur empfehlen ;->> Da frag ich mich manchmal, warum Templates so flexibel sind, wenn man sie eh nirgendwo in ihrer vollen Mächtigkeit benutzen kann...
        [
        | Versenden | Drucken ]
0
Von Insomnia am Mi, 15. Juni 2005 um 21:32 #
http://de.wikipedia.org/wiki/LPC_%28Programmiersprache%29
[
| Versenden | Drucken ]
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten