Code Cruncher für BlitzMax
Übersicht

![]() |
mpmxyzBetreff: Code Cruncher für BlitzMax |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie einige vielleicht in meinem Worklog schon gelesen haben, habe ich einen Code Cruncher geschrieben.
So etwas kann man bei einem BCC immer gebrauchen. Gibt es das nicht schon? Ja, aber meiner hat im Gegensatz zu diesen höhere Kompressionsraten von ca. 50%. Wie verwende ich das Teil? Die zu crunchenden Dateien werden auf den Cruncher gezogen. Wenn unter den Dateien eine *.txt-Datei ist, wird diese für die so genannte "Blacklist" verwendet: Pro Zeile steht dort ein Begriff, der nicht verändert werden soll. (z.B. überschriebene externe Methoden) Die gecrunchten Codes werden in dem selben Ordner unter einem anderen Dateinamen wieder abgespeichert. Was macht das Teil eigentlich alles? Der Code Cruncher entfernt:
Der Code Cruncher ersetzt:
Außerdem werden aufeinanderfolgende Local/Global/...-Deklarationen zusammengefasst. Der Code Cruncher folgt auch "Import" und "Include" und verändert die eingebundenen Dateien. Man kann in *.ini-Dateien einige Daten zusammenfassen: Diese kann alle notwendigen Informationen enthalten, sodass man nur noch eine *.ini-Datei auf den Code Cruncher ziehen muss. Es gibt folgende Einstellungmöglichkeiten:
Wie lange arbeitest du schon an diesem Projekt? Ich habe vor 7 Tagen damit angefangen. (als ich den Beitrag erstellt hatte) Als Basis diente mein Tokenizer. Wie viel Code hast du geschrieben? drei Dateien mit 21 KiB Code + Tokenizer-Basis (3 Dateien 56 KiB) Wo bekomme ich das Wunderteil her? Hier ist der Download. Was kommt noch?
Viel Spaß damit! mpmxyz |
||
- Zuletzt bearbeitet von mpmxyz am So, Mai 16, 2010 18:03, insgesamt 7-mal bearbeitet
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hört sich sehr gut an, doch es gibt noch ein Paar Fehler:
BlitzMax: [AUSKLAPPEN] Import brl.timer
wird zu BlitzMax: [AUSKLAPPEN] Import brl.ea
weil ich einen Timer namens timer deklariert habe. Außerdem gibt es Probleme, wenn ich Include verwende, wegen doppelter Funktionsdeklaration. Aber ansonsten muss ich sagen, dass es dir sehr gut gelungen ist. Das Programm konnte meinen Tanksclone halbieren ![]() mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Thunder:
Das liegt daran, dass ich den Code nicht voll durchparse. Gegen dieses Problem gibt es die "Blacklist". Include-Problem? Hast du beide Dateien zusammen gecruncht? Wenn nein, dann zeige am Besten mal ein Beispiel. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe zum Probieren den wTanksClone genommen. Download: https://www.blitzforum.de/upload/file.php?id=7735
Da sind die zwei Sourcefiles drinnen. Und, wie ist das genau mit der Blacklist - extern scheint sie ja nicht zu sein, was aber eine schöne Erweiterung wäre. mfg Thunder Edit: Das Include-Problem ist nur aufgetreten, weil ich den String, den ich Include übergebe nicht verändert habe, aber es kommt trotzdem eine EXCEPTION_ACCESS_VIOLATION Error. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mh, bei mir kommt "Unhandled Exception:Expecting a closing quotation Mark!" bei zwei Codes... | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Thunder:
Die Blacklist ist eine Textdatei, die mitgezogen wird. Bei mir sieht sie z.B. so aus: Code: [AUSKLAPPEN] Create
NextLink Replace Dort muss bei dir dann "Timer" stehen. Ich habe übrigens keine Probleme mit dem Code... Xeres: Wie ist die entsprechende Stelle aufgebaut? Das ist nämlich ein Fehler, der vom Tokenizer selbst kommt. Es ist gut möglich, dass ich eine der Regeln für BlitzMax-Code nicht kenne. Ohne Code nichts los... ![]() mfG mpmxyz P.S.: Ich sollte bei der Fehlermeldung auch eine Positionsangabe machen... Edit: Ist das ein einzelnes Anführungszeichen in einem Rem/EndRem-Kommentar? Ich merke gerade, dass ich an so etwas nicht gedacht habe... |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine Ahnung welche Stelle gemeint ist - Eine Positionsangabe wäre dabei hilfreich.
BlitzMax: [AUSKLAPPEN] SuperStrict Edit: Kopiert, eingefügt und hat funktioniert... womöglich Blide Steuerzeichen?! Edit2: Des Rätsels Lösung: Blide benutzt Unicode ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir gibt es keine Textdatei. (Der Downloadlink verweist auf eine Exe)
Falls die Exe die TXT Datei erstellt - wo speichert sie diese? mfg Thunder Edit: Ok, danke! |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
- Zuletzt bearbeitet von Thunder am Mi, Feb 24, 2010 22:26, insgesamt einmal bearbeitet
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, ich habe mich wohl nicht ganz verständlich ausgedrückt.
DU erstellst eine Textdatei, die du mit den Codedateien mitziehst. Mit dieser Textdatei schließt du Begriffe von der Komprimierung aus. Der häufig verwendete Begriff "Create" sollte z.B. ausgeschlossen werden, wenn man eine Type-Funktion(oder andere deklarierte Sachen) mit eben diesem Namen nutzt. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hoffe, dass es genug Änderungen gab, diesen Doppelpost zu rechtfertigen:
Die wichtigste Neuerung: Der Code Cruncher folgt auch Includes und Imports. Das heißt, dass er die angegebenen Dateien auch modifiziert und die Dateiangaben ändert. Die neuste Version unterstützt jetzt auch Unicode und es sollte bei Rem/EndRem-Blöcken mit alleine stehenden Anführungszeichen keine Fehlermeldungen mehr geben. Alle aufgetretenen Probleme und einige weitere sollten jetzt behoben sein. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kleiner Tipp: Du kannst ":Byte" auch noch in "%" Int umwandeln um noch etwas mehr rauszuholen. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube nicht, dass das eine gute Idee ist, da Byte nur positive Werte von 0...255 erlaubt, jedoch int von
-(256^4/2) ... (256^4/2)-1. Wenn man also folgenden Code hat: BlitzMax: [AUSKLAPPEN] Local i:Byte=255 wird das Ergebnis verändert. mfg Thunder Edit: Die Idee mit dem @ ist aber gut - ich wusste gar nicht, dass das geht. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
- Zuletzt bearbeitet von Thunder am Sa, Feb 27, 2010 13:50, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
:Byte = @
Funktioniert jetzt auch mit Blide Problemlos: Du könntest noch Zeilenumbrüche mit ";" ersetzen und für Konstanten deren Werte einsetzen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Xeres hat Folgendes geschrieben: :Byte = @
Funktioniert jetzt auch mit Blide Problemlos: Du könntest noch Zeilenumbrüche mit ";" ersetzen und für Konstanten deren Werte einsetzen. Bei den Konstanten würde ich dann aber gucken, ob sich das lohnt. Zum Beispiel: Const s:string = "hallo ich bin ein ganz langerw satz" Würde eher... negativ sein. |
||
.... |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schön, dass es endlich hier eine Diskusion gibt! ![]() "@"=":Byte": Danke für den Tipp! Da das allerdings nicht dokumentiert zu sein scheint, habe ich die Ini-Option "CrunchByte" mit dem Startwert 1(=aktiviert) hinzugefügt. Außerdem musste ich darauf achten, dass man das nicht nach Zahlen schreiben darf. ("123:Byte"->"123@" geht nicht.) Zeilenumbruch zu ";": Das geht leider nicht immer. Aber man spart trotzdem genau so viele Prozente - ca. 3% macht diese Funktion aus - , wenn man statt "~r~n"/Chr(13)+Chr(10) nur "~n"/Chr(10) nutzt. Falls es damit Probleme gibt, kann man es mit der Ini-Option "CrunchLine" um-/ausschalten. (0-aus,1/13 - normal,2/10 - Ersetzen mit "~r" statt mit "~n") Konstanten ersetzen: Das wäre ziemlich kompliziert. Denn ich müsste nicht nur die Werte ersetzen, sondern auch die Deklaration löschen. Vorher muss aber abgewägt werden, ob es sich lohnt. (Unterm Strich lässt sich nur bei der Deklaration richtig sparen.) Dazu muss ich aber auch die anderen Konstanten beachten. ("Const a...,b...,c..." Wenn nur a weg ist, könnte es sich möglicherweise nicht lohnen; wenn aber alle Konstanten weg sind, könnte es sich doch lohnen, da das 'Const' auch weg kann.) Das letzte Gegenargument gegen Konstantenersetzungen ist die Tatsache, dass man in der einen Funktion die Konstante "a" haben kann und in jenem Type eine Globale "a" existiert. Da ich den Code aber eben nicht voll durchparse, kann ich den Unterschied nicht erkennen. Daher lasse ich es mit den Konstanten sein. mfG mpmxyz Edit: Die neue Version ist jetzt hochgeladen. |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest Zahlen noch Zahlen wie "0.23" zu ".23" Kürzen. Nicht das es dringend wäre - nur der Vollständigkeit halber. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist zwar nicht der Rede wert, aber da wo früher die Thens von mehrzeilgen Ifs waren sind bei mir jetzt überflüssige Leerzeichen. | ||
1 ist ungefähr 3 |
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich als unwissender hätte da mal ne frage:
Wozu soll so ein programm gut sein? Ich kanns bei java und co ja noch verstehen (da macht sowas teilweise wirklich sinn), aber bmax wird doch eh compiliert? |
||
+++ www.masterk.de.vu +++
Lila FTW! |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei Java macht es genausowenig Sinn. Java wird auch kompiliert. Nicht in Maschinencode, aber Bytecode und überflüssige Leerzeichen... werden sowieso nicht in diesem gespeichert.
Es ist nützlich, wenn es bei Wettbewerben (zB: BlitzCodeCompo - wird regelmäßig im Projekte-Subforum veranstaltet), ein Codelimit gibt. Edit: Gut - es kann Sinn machen bei Java, allerdings nur bei wahnsinniglangen Variablen-/Funktionsnamen oder wahnsinnigvielen Variablen/Funktionen oder wenn man nur Lochstreifen zur Verfügung hat. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
- Zuletzt bearbeitet von Thunder am So, Mai 16, 2010 12:25, insgesamt einmal bearbeitet
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es macht bei java sehr wohl sinn. Denn im bytecode werden durchaus die bezeichner gespeichert. Ein obfuscator ersetzt diese durch nichtssagende kurze bezeichner. Wenn speicherplatz wichtig ist, kann man da einiges sparen. Nicht zu vergessen, dass so ein obfuscator natürlich auch zu nem gewissen grad gegen reverse engineering schützt.
@Wettbewerbe: Naja, dazu hatte ich vor längerer zeit eh schonmal gesagt, dass ne bytegrössenbeschränkung quark ist. Besser wäre eine token-beschränkung. |
||
+++ www.masterk.de.vu +++
Lila FTW! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group