[Laszlo-dev] Dynamic libraries

Oliver Steele steele at laszlosystems.com
Fri Jan 7 08:03:23 PST 2005


One of the new features for LPS 3.0 is the dynamically loaded library, 
or dynamic library.  A dynamic library is a library that can be loaded 
after the main application execution file has loaded.  The initial goal 
for dynamic libraries is to reduce the initial download size of a 
Laszlo application, by deferring bandwidth costs until an optional 
feature of the application is actually used, or at least until the user 
has had time to interact with the initial screen.  Some non-goals for 
the initial implementation are shared libraries (where the same 
dynamically loaded library execution file can be be shared among 
multiple applications), binary distribution (where a library author can 
distribute a Laszlo library without distributing source code), and 
namespaces (where two libraries can define entities with the same name, 
without collision).  It is intended that the initial version of dynamic 
libraries be forwards compatible with these features, but, in the 
interests of implementation time, the initial version will not 
implement them.

LPS 2.x, for comparison, has static libraries, which use the <library> 
element to define the library, and the <include> element to include it 
in an application (or another library).  Static libraries support 
source code organization, team workflow, and source re-use, but they 
don't have any effect, versus the alternate strategy of putting 
everything in one big source file, on the executable file: a program 
that includes a static library is equivalent, to the compiler, to a 
program that has had the library source code textually inserted at the 
point of the <include> element.

Ideally, a dynamic library can contain anything that today's static 
library contains: class, instance, dataset, resource, and font 
definitions, as well as <script> blocks.  In practice, the Flash 
implementation of Laszlo may have some limits which Laszlo inherits 
from the limits of the Flash file format and execution engine.  We'll 
be exploring this over the next week; this message is intended partly 
to set the context for some of the discussions exploring those limits.

I'll send out a concrete proposal for the dynamic library syntax in the 
coming week.  Henry Minsky is implementing a draft of the syntax, and a 
limited provisional implementation is available in the 3.0b1 release 
(so you'll be able to try it out as soon as I tell you what it is :-).

Something we haven't decided yet is the name for dynamic libraries.  
I've been calling them dynamic libraries, short for dynamically loaded 
libraries, in this message, but that's a provisional name as well.  
It's unlikely that we'll call them "dynamically loaded libraries (DLL)" 
because that name has picked up some negative connotations over the 
past decade.  (These are connotations that I'm now learning to 
associate with the term "jar file", by the way, but we can get into 
that separately...)  "Dynamic library" is perhaps more accurate anyway, 
since it is likely that the location of the library can be determined 
at runtime, as well as just its bits.  Other names that have been 
bandied about are "snippets", "runtime libraries", and "runtime loaded 
libraries".

I suppose one could throw "execution", "late", "lazy", and "deferred" 
into the mix.  "Deferred" would be consistent with the 
initstage="deferred" attribute of views and other LZX nodes, which has 
an analogous function at the instance (as opposed to the file) level.  
In fact, it might be desireable to allow both "late" libraries which 
loaded automatically, but after the main execution file has loaded, and 
"deferred" libraries, which are loaded upon request.

Comments appreciated, although there will be another chance when I post 
the syntax.

Best,
Oliver

--
Oliver Steele
Chief Software Architect
Laszlo Systems, Inc.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 4002 bytes
Desc: not available
Url : http://www.openlaszlo.org/pipermail/laszlo-dev/attachments/20050107/d86893ba/attachment.bin


More information about the Laszlo-dev mailing list