Changes

Jump to: navigation, search

Tamarin:ScreamingMonkey:Planning notes

1,489 bytes added, 02:00, 23 October 2007
update with status from the end of stage 1
== Stage 1 Current Status ==
Identify Stage 1 is completed - see the full scope of main [[Tamarin:ScreamingMonkey]] page for details. We currently havea prototype engine implemented that works inside Internet Explorer andincludes the self-hosting esc compiler. We are in the next planning stages of the project (ie, createdetailed estimates for most following stagesStage 2.)
== Stage 1 2 == Work in stage 2 will include a "prototype" be prioritized towards letting people experiment with the implementation , and as such, it will try to follow the 80- 20 rule - hopethat implementation willbe written we can capture 80% of the use cases in C++, using 20% of the Microsoft "Active Template Libraries" to helpmanage boilerplate MSCOM codework. This prototype Simple webpages will focus on the "big ticket"items - iework, but lots of complex things that will not. Events are likely to be problems included in stage 2, even though they are signficant work - the real implementation.As a suitable JavaScript compiler for Tamarin thought is still in developmentthat no window load or button click events makes things fairly crippled and uninteresting to people. However, even for events we will takethesimple route where possible, leaving a full implementation to later initial stages of . However, this implementation will require the use of an externalcompiler; the AXScript engine will be unable is not to say we want to use JavaScript source codedirectlytake short-cuts. It is expected tests are included,as well as other tasks that by the time such a compiler is necessary(currently thought to be stage 3; see below) may impact the 'ActionMonkey' compilerbeing developed by Mozilla should be suitable for useoverall architecture.
=== Deliverables ===
* a "prototype" implementation that will not function, but will demonstrate minimal integration Implementations of AXScript with Tamarininterfaces as described below.* Identification of features that will be delivered in stage 2, and those which can be pushed back to later stagesIntegration into a build system so the ActiveScript binary is created.* Estimates for the time needed to deliver phases 2 Developer documentation and 3.some initial unit tests === Tasks === * A strategy for Better understanding of the tamarin "globals" concept and integration with the real implementation same AX concept. Understanding "per-engine" and "per-process" (ie, should ATL continue to be used, how much and "per-thread!" considerations. Ensure re-initialization of the mozilla infrastructure for MSCOM is suitableengine works (in theory, etcif not in practice) * Identification of limitations or other issues in Events; need to setup connection point handlers and dispatch events to the Microsoft ActiveScripting framework that may cause issue for this projectcorrect handler. For exampleNeed to integrate various ways to handle events, limitations in how including enumerating the "<script global namespace to find 'window_onload()'style events...>" tag is parsed by IE Almost certainly will require using ITypeInfo for instantiating metadata about the ActiveScript event and/or enumerating the events on an object . * Engine "state" management:** "queue" up compiled code until state says to satisfy run; keep "persistent" (SCRIPTTEXT_ISPERSISTENT) blocks around so the tagengine can "reset", etcincluding 'source context' for exceptions.** consider future event handling "connection" state requirement.* Identification of issues related * respond to embedding asynchronous "stop" requests. * Better exception integration. Need column number, and need a compiler in way to remember the engine, and recommendations for this aspect source code we are compiling (see [http://msdn2.microsoft.com/en-us/library/dwy967hz.aspx IActiveScriptError::GetSourceLineText]) (see "state management" above). Sane handling of the projectsyntax errors etc.
== Stage 2 ==* Possibly modify Tamarin, and/or add a new 'extension' to better expose the "global" semantics to js2, with the aim of keeping as much of the implementation as possible to be self-hosting.
ActiveScript implementation, targetting "Windows Scripting Host"* Integration with Moz build environment
This stage delivers enough * Implementation of an implementation to work with theWindows Scripting Host. This is an AXScript host, just like IE,although it need not implement all interfaces - things such as"type info", UI controls etc can be omitted. This will targetpre-compiled JavaScript code - the use of a compiler is notin the scope of this stageother 'Parse' functions.
Details here are guestimates - see Stage 1, where a detailed plan for this stage will be delivered. This stage will deliver a buildable, working Active Script engine. It will not deliver any integration * Documentation: update Wiki with installers, end-user documentation, etc"getting started" docs and other fluff.
=== Deliverables ===* Basic test suite: implement using Python and pywin32; the latter has intrinsic support for these interfaces.
* Full implementations of AXScript interfaces to act as a "basic" script language, Process for making binary releases for beta testing (but *not fully functioning in IE.* Integration into via an installer - just a build system so the ActiveScript binary is created. Its not clear exactly what build system that would be yet, or how such integration would be implementedthey can unzip and register by hand)** who makes binaries? signing considerations.* Developer documentation* "packaging" of the abc files needed by the compiler so we have a self-contained DLL?
== Stage 3 Near-future tasks ==
AXScript implementation that targets Internet Explorer using JavaScript sourceThe following tasks have been identified, but they have not been incorporatedcodeinto planning. This will involve integration of a JavaScript compiler, as well asenhancements to We expect the AXScript engine following tasks to support IE specific features.This still only delivers a "buildable" implementation - noinstaller or end-user documentation will be provided. This implementationcompleted, but have notshould be able to be used by developers for testing purposesmade any decisions about when.
=== Deliverables ===* Consideration of the best way to "wrap" MSCOM (vtable based) interfaces so they can be called from our JS4 implementation. Example is the interface IE passes us (eg, [http://msdn2.microsoft.com/en-us/library/z70w3w6a.aspx IActiveScriptSite]). Current implementation has hand-written C++ wrappers, but this is only reasonable while the number of interfaces in question is small; which they currently are, but may not be if debugging support is added, or any other "ActiveX" related interfaces become desirable.
* Engine that integrates with a compiler, so javascript source code can be compiled on the flyAXScript "thread state" concepts (see [http://msdn2.* Script engine enhanced for use inside IEmicrosoft.com/en-us/library/6a6kx7bd.aspx IActiveScript::GetScriptThreadState])
== Stage 4 ==* Better IDispatch integration, including basic typelib/typeinfo support.** Consideration of best performing way to implement IDispatch/ITypelib (eg, attempt to dynamically introspect "on-the-fly", or pre-build everything at first use, only consider [http://msdn2.microsoft.com/en-us/library/4hb95zwx.aspx IActiveScript::AddTypeLib], or use IDispatch::GetTypeLib, or QI for IProvideTypeInfo, or ?)** Consideration of the best way to *implement* IDispatch/ITypelib support. "catch-alls" don't appear implemented, so this probably needs to be done in C++.
This stage consolidates the work in the previous stages. It will address automated testing, installation and any other issues identified as "out of scope" for stages 2 and 3.* Locale considerations
The deliverable for this stage is an implementation that is suitable forday-to-day use by beta testers.* IProvideMultipleClassInfo
=== Deliverables ===* Implementation of GetScriptDispatch() - this means implementing IDispatch so external callers can call functions etc defined in the script, see variables, and other goodness.
* Integration into installation system, talkback, and any other Ability for an engine to be "deploymentcloned" related requirements- [http://msdn2.microsoft.com/en-us/library/t4f5c129.aspx IActiveScript::Clone()]. Presumably this is just an optimization...
* Ability for scripts to be interrupted - [http://msdn2.microsoft.com/en-us/library/ecadx4td.aspx IActiveScript::InterruptScriptThread] == Stage 5 Distant Future Tasks ==
Add debugging support. This step is optionalThese tasks will be done much further in the future, but would allow integrationinto the "Script Debuggers" from Microsoftif at all. The task is to implement the They are ActiveScript interfaces related to debugging. This stage will eventually besplit to "estimate" and "implement" stages once intentionally vague, as more knowledge is gatheredfrom the implementation of the previous stagesdetails are expected as work progresses.
=== Deliverables ===* Consolidates the work in the previous stages, making it suitable for a "real" release. Address automated testing, installation, integration with 'talkback', etc.
* Updated code and developer documentation to allow Add debugging in support by implementing the end[http://msdn2.microsoft.com/en-user binariesus/library/6dy78b76.aspx Active Script Debugger Interfaces]. This step is optional, but would allow integration into the "Script Debuggers" from Microsoft.
Confirm
98
edits

Navigation menu