Registriert: Di Aug 26, 2003 20:08 Beiträge: 81 Wohnort: Mönchengladbach
Programmiersprache: ObjPas ASM C C++ etc
Hiermit stelle ich hier nach einer langen Zeit wieder mal ein Projekt von mir vor. Diesmal ist es eine ECMAScript Engine. Für die, die es nicht wissen, ECMAScript ist die von der ECMA unter ECMA-262 standardisierte Form von JavaScript, jedoch ist ECMAScript nicht vollständig komplett zu JavaScript identisch (mehr dazu zum Thema siehe Wikipedia zum Suchbegriff JavaScript oder ECMAScript). Meine ECMAScript Engine trägt den Namen BESEN, was wiederum für "Bero EcmaScript ENgine" steht, und besitzt zudem Just-In-Compilation (zurzeit nur für 32-bit x86), Property Inline Caching, Codeoptimization, und viele weitere Dinge.
Es steht zudem unter einer RubyLike+AGPLv3 Duallizenz.
Hier eine englische Liste der Features von BESEN für den groben Überblick:
Complete implementation of the ECMAScript Fifth Edition standard
Own bytecode-based ECMA262-complaint Regular Expression Engine
Context-Threaded 32-bit x86 Just-in-Time Compiler (x64/AMD64 JIT is in the work and a ARMv7 EABI JIT for ARM CPUs with VFPUv1 instruction set is planed)
Constant folding
Dead code elimination
Abstract-Syntax-Tree based optimizations
Type inference (both exact and speculative)
Property Inline Cache
Perfomance optimized hash maps
Self balanced trees (for example to sort on-the-fly linked list items of hash maps for very fast enumeration of array objects)
Easy native ObjectPascal class integration (properties per RTTI and published methods per by-hand-parsing of the native virtual method table)
Registriert: Di Aug 26, 2003 20:08 Beiträge: 81 Wohnort: Mönchengladbach
Programmiersprache: ObjPas ASM C C++ etc
Es ist eine neue Version online, die zwei wichtige Bugfixes enthält.
Der erste Bug war, dass der Parser bei >>= den Right Node mit dem Left Node überschrieben hat, und nachher dann versucht hat, den Left Node 2x freizugeben, was dann zu einer Exception führte.
Der zweite Bug war, dass der CodeGenerator bei <<= >>= und >>>= vergaß, für die Shifting Operation temporäre Register zu allokatieren, und dadurch der generierte ByteCode sowie native geJITte Code aufgrund Out-Of-RegisterIndex crashte.
_________________ Behindert ist man nicht, behindert wird man.
Registriert: Di Aug 26, 2003 20:08 Beiträge: 81 Wohnort: Mönchengladbach
Programmiersprache: ObjPas ASM C C++ etc
Ich habe den Code nun FPC 2.4.0 (inoffziell) kompatibel gemacht, bzw. FormatDateTime als BESENFormatDateTime reimplementiert, was ja bei 2.4.0 fehlerhaft war bzw. ist. Also viel Spass damit
_________________ Behindert ist man nicht, behindert wird man.
Registriert: Di Aug 26, 2003 20:08 Beiträge: 81 Wohnort: Mönchengladbach
Programmiersprache: ObjPas ASM C C++ etc
Nun ist schon wieder eine neue Version online und somit hab ich auch wieder eine ganze Reihe an Bugs gefixt. Und zwar diesmal habe ich einges an den ECMAScript-eigenen Objekten selbst gefixt, und sowie einen sehr fiesen Bug im Garbage Collector gefixt, wo bei sehr seltenen Fällen Rootwurzelobjekte fälscherweise als nicht mehr gebraucht angesehen und somit freigegeben wurden, wodurch dann ungültige Zeigerreferenzen entstanden, und dadurch dann auch hübische Invalid Pointer Exceptions. Jetzt werden Rootwurzelobjekte aber immer direkt eingeschwärzt (nach dem Tricolor-MarkAndSweep-Verhalten, also direkt als "In-Gebraucht" markiert", mehr dazu siehe englische Wikipedia zum Thema Garbage Collector).
_________________ Behindert ist man nicht, behindert wird man.
Registriert: Di Aug 26, 2003 20:08 Beiträge: 81 Wohnort: Mönchengladbach
Programmiersprache: ObjPas ASM C C++ etc
Im letztem Monat habe ich wieder einiges an BESEN gemacht, so dass BESEN mit aktiviertem Native-Code-Just-In-Time-Compiler nun in vielen Fällen um einiges schneller als die JavaScript Engine SquirrelFish Extreme auch mit aktiviertem Native-Code-Just-In-Time-Compiler aus Safari 5 bzw. aus WebKit ist. Also BESEN wird nun so langsam richtig performancetechnisch-gefährlich für die ECMAScript/JavaScript-Engine-Quasi-Konkurrenz
_________________ Behindert ist man nicht, behindert wird man.
Registriert: Di Aug 26, 2003 20:08 Beiträge: 81 Wohnort: Mönchengladbach
Programmiersprache: ObjPas ASM C C++ etc
Ich habe das BESEN Projekt jetzt auch nun kompatibel für Delphi 2009-XE3 gemacht (wegen der ganzen Unicodestring Geschichte ab Delphi 2009), als LGPL (mit Static-Link-Exception) umlizenziert und von SourceForge nach Google Code http://code.google.com/p/besen/ verschoben, aufgrund paar Sachen, die ich bei SourceForge seit kurzem bemängle, die erst im Laufe der Zeit aufkamen bzw. besser gesagt, in den Fokus meiner Aufmerksamkeit gelangten.
_________________ Behindert ist man nicht, behindert wird man.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.