Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Include_a_file
Beteiligte: minx
Skript:
Spoiler anzeigen
[autoit]
#include <WindowsConstants.au3>
[/autoit]Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Include_a_file
Beteiligte: minx
Skript:
#include <WindowsConstants.au3>
[/autoit]Sammelthread zum RosettaCode Wiki.
Foruminterne Infos zu RC
Bereits implementierte Aufgaben
Aufgaben, die eine dringende Überarbeitung brauchen
Nicht-implementierte Aufgaben
Was hier gepostet werden kann:
Wir sollten hier vor allem bei neu geschriebenen Beispielen diskutieren, ob diese perfekt sind und sie falls nötig verbessern. Danach können wir sie ins Wiki stellen ![]()
Ich beginne mal:
Art: Neu-Implementierung
Task: http://rosettacode.org/wiki/Arithmetic/Integer
Beteiligte: minx
Script:
$iA = InputBox("Integer Arithmetic", "a?")
$iB = InputBox("Integer Arithmetic", "b?")
MsgBox(0, "Integer Arithmetic", "Results are:" & @CRLF & _
"a + b = " & $iA + $iB & @CRLF & _
"a - b = " & $iA - $iB & @CRLF & _
"a * b = " & $iA * $iB & @CRLF & _
"a / b = " & Floor($iA / $iB) & ", remainder is " & Mod($iA, $iB))
;
Und es darf in die Puschen gekommen werden ^^. Aus dem englischen Forum hat ein User sein Skript bereits fertig - leider noch nicht eingesandt. Derweil sind aber schon 2 Einsendungen da.
Noch 7 Tage ![]()
Der Heise funktioniert bei mir nicht. Es gibt keine "meine" Version. Ich habe bloß überflüssiges entfernt und ein paar Infoausgaben hinzugefügt. So bleibt nur noch eine Datei und nicht mehrere.
Tach!
Eine Programmiersprache sollte einen Debugger haben. Jetzt bekommt AutoIt auch einen, einen "echten".
Das Skript wurde ursprünglich von Heron geschrieben. Ich habe es etwas handlicher gemacht und unnötige Funktionen / Ressourcen entfernt und hier und da etwas aufgeräumt. In diesem Tutorial geht es aber weniger um das Skript, als um die effektive Nutzung desselben.
Der Debugger ist ein Einzelschritt Debugger, der mit SciTe kommuniziert. Es werden beim Ausführen des Skripts automatisch Breakpoints eingefügt. An diesen Stellen bleibt der Debugger nach einem Schritt stehen. Man hat die Möglichkeit per Einzelschritt [1] vorzugehen, das Skript bis zur Cursorposition in SciTe auszuführen [2] oder das Skript einfach laufen zu lassen [3]. Das ausgeführte Skript kann jederzeit pausiert werden [4]. In einem Listview werden alle Variablen und Makros mit Typ, Wert und Scope angezeigt [5]. Der Debugger hat zudem eine eigene Kommandozeile [6], um Befehle am aktuellen Breakpoint auszuführen. Dazu gibt es zur Eingabe ein Input, zur Ausgabe eine Console [7]. Der allgemeine Status des Debuggers kann über die restlichen Labels [8] abgelesen werden (wie Ausführungszeit, Änderungen, Errors, Calls während des Ausführens).
Die aktuelle Position wird in SciTe immer mit einem Punkt in der linken Leiste markiert. Über "Exit all" beenden wir das Skript + den Debugger. Beendet sich das Skript, schließt sich auch der Debugger automatisch.
[Blockierte Grafik: http://j04.img-up.net/lolz22b78.jpg]
Gehen wir mal durch wie man ihn benutzen könnte.
Um das Skript zu debuggen, welches wir vor uns haben, müssen wir einfach nur #include <Debugger.au3> an den Anfang setzen. Das entfernen wir vor dem Kompilieren einfach wieder. Wenn man jetzt das Skript startet, dann öffnet sich das Debuggerfenster und das Skript ist pausiert. Wir können nun einfach per Druck auf "Step" das Skript bis zur nächsten Zeile ausführen.
Man sieht nun, dass die Variablen die vorhanden sind in einem Listview angezeigt werden, und wir nach einem Step sehen wie sie sich ändern. Drücken wir jetzt auf Run, dann deaktivieren wir das Debuggen für eine unbestimmte Zeit oder bis wieder ein Druck auf "Stop" erfolgt. In dieser Zeit werden die Variablenwerte nicht aktualisiert, um die Performance des Skripts nicht zu beeinflussen. Nach dem Stoppen werden die Werte wieder angezeigt.
Wenn wir den Debugger für einen Codeabschnitt komplett ausschalten wollen, setzen wir an den Anfang des Abschnitts einfach "#Debugger_Stop" und danach ein "#Debugger_Start". Der Debugger überspringt diese Zeilen ganz.
Probiert einfach ein wenig herum, es sollte selbsterklärend sein ![]()
Dieses Feature hat zwei Hauptfunktionen. Zum Einen können damit am Breakpoint AutoIt-Befehle ausgeführt werden (die natürlich auch das Skript affektieren können) und zum Anderen können damit die Werte der Variablen live geändert werden (Bsp: "$var = 4"), beim nächsten Breakpoint sind die Änderungen dann durchgeführt.
Aber die Konsole hat noch eine Funktion. Gibt man nur eine Variable ein "$Var", werden alle Infos zu dieser Variable ausgegeben. Auch zu Arrays, dort wird jedes Element aufgerollt!
Dieser Debugger funktioniert nur mit der aktuellen Stable. Mit den Betas kommt er nicht klar. Da es aber in absehbarer Zeit keine neu Stable geben wird, ist das kein Problem. Wenn etwas unklar war / ist unbedingt fragen!
Installation: Die angehängte Datei in den Autoit-Inlcude-Ordner packen. ERST alles oben lesen!
Erster Snapshot im Startpost. Kleines Beispiel (nur ein sehr kleiner Ausschnitt)
Schönes Skript ![]()
[size=8]Vielleicht als nächstes einen Lizenzvereinbarungsgenerator...
Soho.
aPaste hat ein größeres Update erfahren. Neue Features sollten offensichtlich sein, was aber am wichtigsten ist: es gibt jetzt eine "echte" API.
Bitte Thread auf [gelöst] setzen!
die Frage bei Kompressionen im Allgemeinen lautet doch, schnell oder hoch?
Eher ist doch Mars Ansatz eine Antwort darauf. Auf das Packen kann man ewig warten, das stört keinen, solang das entpacken fix geht ![]()
Ein erster Screenshot:
[Blockierte Grafik: http://o73.img-up.net/lol0e50.jpg]
Kleines Syntax-Update. Variablenpointer können jetzt direkt angesprochen werden:
Update 3:
Man muss nun nicht mehr manuell Funktionen aus der WinAPI importieren (durch extern "user32", MessageBeep ). Alle benutzten WinAPI Funktionen werden automatisch erkannt und eingebunden.
Das würde ja wenig bezwecken. Die 64Bit Instruktionen machen da nicht mehr viel aus. Gewschwindigkeitstechnisch reicht das schon ![]()
// Das läuft ja trotzdem unter x64 ![]()
Optimierender Compiler von Zwischensprache in Maschinencode existiert schon.
Tut er doch auch hier schon :P. Spaß beiseite, ich finde es einfach spannend eine Programmiersprache von Grund auf aufzubauen. Der Assembler bzw. der Übersetzer Zwischensprache zu Assembler (LASM) existiert ja schon. Da liegt jetzt der Vorteil in der Entwicklung der Zwischensprache, die kann man nämlich schon richtig in Richtung AutoIt biegen. ![]()
Das ist auch das Grundprinzip von C-- (Ja, Minus) etc. Wenn man aber was eigenes hat, ist das doch viel besser ^^.
Wie viel hast du davon schon gemacht?
Also nochmal etwas ausführlicher. Der Assembler ist fertig (http://apaste.square7.ch/lasm). Die Zwischensprache an sich ist in der Entwicklung, wann man sie als fertig bezeichnen kann weiß ich nicht ^^.
Aber danke alle ![]()
Dann setz den Thread auf gelöst.
Daran hab ich auch schon gedacht. Ich versuche gerade LASM ausm Speicher auszuführen, ohne direkte Datei.
Mal sehen in wie weit ich dafür Zeit finde ^^. Gute Idee jedenfalls.
Dern Sinn kann sich in die nächste Ecke stellen ^^.
Ich glaube es gibt schon dadurch einen Vorteil, dass es bereits Typenlos geschrieben werden kann. Natürlich kann man nie den ganzen Funktionsumfang umschreiben, man muss den Au3 Code sehr sauber verfassen (was auch die Var-Deklaration angeht). Richtig an den Speed geht es dann bei grafischen Dingen. Dort ist man dann nur noch durch den Speed der API Calls beschränkt (obwohl diese direkt mitassembliert werden).
Klar ist die Personengruppe, die sich noch um Dateigrößen schert extrem klein, aber wenn man dann mal ein paar Photoshop Effekte in 5KB darstelen kann, viel schneller als es eine AutoIt exe mit ihren mind. 300KB oder eine VC++ mit 1MB+ schaffen könnte, erweckt man dann doch Interesse ![]()
Schon allein die Größe meines Assemblers. 52KB. Davon passen Dutzende Kopien auf eine Diskette ![]()
Wenn ich ein OP-Problem hab nerv ich dich sowieso ![]()
Du weißt schon was ein Interpreter ist? Der interpretiert den Code und hat nichts mit einer ausführbaren Datei zu tun ![]()
Wie wird aus Perseus Maschinen-Code, na indem er übersetzt / assembliert / compiliert wird. Wie nunmal EXE Dateien erzeugt werden ![]()
___________
Ein Assembler nimmt Text-Instruktionen und wandelt sie in OP-Code um. Der OP-Code wird dann in eine .exe Datei geschrieben (einfach FileWrite). Perseus ist als ein Assembler wie FASM, MASM oder TASM, bloß mit einfacherem Syntax.