In This Issue

  Dr. Scripter describes the 4.40 release and whether you want to move from 4.30

Errata for 4.30d release.

  Errata for 4.20d release.

Other Newsletters

DevSpace Developer Support

For more information and resources, visit ScriptEase: ISDK DevSpace online.

Download Center

For latest updates and extensions, visit the ISDK Download Center.

Should you upgrade to 4.40?
A brief description of the new features in the 4.40 release

In this month's Dr. Scripter, we discuss the 4.40 release of the ScriptEase:ISDK/C engine, answering these two questions: How does 4.40 differ from 4.30? and Should I switch to 4.40 from 4.30?

How does 4.40 differ from 4.30?

The two primary changes with 4.40 are improvements in memory use for small devices, and the introduction of fibers for high-performance server environments.

Improved Memory Use: For devices with limited overall memory (and for server systems that may be running hundreds of scripts or instances of the engine), many of the internal structures and algorithms have been tweaked to use less memory overall. We have always concentrated on memory conservation, and 4.40 takes that to a new level.

Extended Memory Options: For systems that support some form of extended memory (i.e. memory outside the standard malloc-like allocation heap), 4.40 can use that extended memory to handle large scripts and libraries, caching recently-used memory objects for performance, and going to extended memory as needed.

Fibers: With 4.40, a new type of "jsecontext" is now available: a "fiber context". Multiple fiber contexts can share globals, share in the garbage collection, and share scripts, so that very many virtual contexts can be running simultaneously. Fibers use up much less memory than true threads, and switching between them is much faster than threads. And programming / scripting between fibers is easier than with threads because switching can only occur at safe times. So with fibers a server can be written to handle simultaneous scripts (e.g. events, connections, requests, etc...) with very good response, much faster, smaller, and easier than using true threads for the same purpose.

Should I switch from 4.30 to 4.40?

If you are short on memory, then yes you should switch use 4.40 for its memory enhancements. For example, with the PalmOS 4.40 release the engine can be running, with all of the standard ECMA objects, script loaded, and hundreds of objects instantiated, and still use about 20K of heap memory.

If you need the fastest response among many events, then yes you should switch to 4.40 for its fiber capabilities. An application server handling multiple requests could get no faster response than with fibers.

If you are not close to releasing with 4.30, then yes you should switch to 4.40. Release 4.40 has received internal testing and been in trial use for more than a year, and has received the bulk of our development efforts.

Otherwise stay with 4.30. We will continue to support 4.30 and provide bug-fix releases to 4.30.

Where do I get version 4.40?

Version 4.40 is available for PalmOS now, and we will be preparing releases for other operating systems in the coming week. A message will go out to this list when the 4.40 releases are available.

Have a question about how to use ScriptEase:ISDK? Let Dr. Scripter know at

4.30d and earlier versions

  • api jseStringTable (e.g. jseInternalizeString) growing over time: The api jseStringTable, which is used for jseInternalizeString and for all callbacks may use more and more memory over time, slowing program execution. This bug and a fix are described at api string table grows and grows on the errata web site.
  • Array instance "length" property is has wrong flags: The "length" property of instances of the Array object should have the flags jseDontEnum and jseDontDelete, but they don't. This bug and a fix are at wrong flags on Array length on the errata web site.
  • "continue" error in "switch" blocks: The "continue" statement fails when within a "switch" block. Bug and a fix are at continue/switch bug on the errata web site.
  • Errors during jseCallFunction() wrongly set "trapped" flag: When an error occurs during jseCallFunction() the trapped flag will wrongly be set to True during the call to the jseAtErrorFunc() callback function. Bug and a fix are at wrong jseCallFunction trap flag on the errata web site.
  • SEDBC cannot find cursor at end of record: When a cursor object is asked for a field and it's at the end of the record, the field is not found, although it should be. Bug and a fix are at end cursor field missing on the errata web site.
  • recursive jseGarbageCollect() corrupts data: jseGarbageCollect( ..., JSE_GARBAGE_COLLECT ), if called during garbage collection, can lead to invalid data and crashes. Bug and a fix are at recursive jseGarbageCollect() on the errata web site.
  • eval() does not propogate "this": Bug and a fix are at eval() wrong this on the errata web site.
  • COMOBJ problems: COMOBJ is not freeing all objects, and is not checking on type-changes for pass-by-reference variables. Bugs and fixes are at COMOBJ reference changes and at COMOBJ release on the errata web site.
  • "var" keyword in eval() initializes as undefined: "var" keyword usined in jseInterp... or eval() will initialize variables to undefined even if they are already defined in scope. Bug fix at var init undefined on errata web site.
  • Empty Object initializer creates Array: Empty Object initializer creates an Array object; should be an Object object. Fix at empty Object is not an Array.
  • crash if error during callbacks: An infinite loop can occur if accessing dynamic callback object reports an error. Fix at error during callbacks forever.
  • "var" in eval() may miss local variables: The "var" keyword may not scope to local variable when used within jseInterpret() or eval(). More information at fix found at eval(var) local scope problem.
  • Array may not know it's also an Object: If an Array instance has been initialized with the "foo=[a,b,c]" syntax, then "instanceof" operator will not recognize it as an instance of an Object. Bug fix at static Array is also Object on errata web site.


4.20d and earlier versions

  • jsePush() does not destroy variable when it should: jsePush() is not destroying pushed variable when the stack is destroyed with jseDestroyStack(). Bug and fix are described at jsePush() doesn't destroy on the errata web page.
ScriptEase: ISDK is a product of Nombas, Inc. Visit us at ../../index.htm