Thank you to everyone who responded to my request for advice on the issues at hand. Your input was invaluable.

After listening to your responses, here is how I will proceed:

- I am looking for beta testers for v3.1. There are tons (and I mean tons) of cool new features. I'm looking for adventurous programmers who want to push the envelope in terms of using new language features. This version is mostly new features with some key bug fixes, so stability isn't an issue.

3.1 has a _huge_ number of new features, and I will probably be adding more over the next few weeks. In the meantime I have to document everything before I release the beta, so don't count on the beta release for a week or so.


- I have a clear roadmap for the features in v4, and I am very excited about it. Does it help or hurt you to know what that is?

Here's the broad overview of v4:

Speed
-----
Everything will be overhauled with speed (and clean code) as the primary focus. There will be a lot of low-level changes that will bring big speed gains. But the biggest single change will be the introduction of byte-compiled code.


When a page is requested, if it has not been compiled or has been modified since the last compile, it will be compiled into byte code and saved to disk. The byte code will then be executed with my own virtual machine that will, I am pretty sure, run at very near the speed of compiled 4D code.

Besides the obvious benefit of faster execution, this will allow me (and you) to extend Active4D through Active4D libraries in Active4D code with no sacrifice in speed.


Caching
-------
When a request is made for a file, the bytecode is cached in memory. If it is still in the cache when the next request is made, it will come out of memory instead of being read off disk.


I am also looking into ways of defining a cacheable query that will have a defined expiration, after which it will automatically refresh.


OOP
---
I want to have object-oriented programming support built into the language.



Debugger -------- Plans are afoot for an interactive debugger.


This is just a roadmap, it isn't anything even remotely resembling a promise or a commitment. I have no idea how long it will all take, but I have a three month sabbatical coming up during which I plan to work on this. My hope is to have the first betas coming out sometime in February or March. We'll see how it goes.



I have come up with a technique whereby I can now execute 4D commands (such as DISTINCT VALUES) that access the database engine and pull data directly into or out of arrays, and still allow you to use local arrays. Previously I couldn't do this because there was no plugin API for such commands and EXECUTE doesn't work with local variables. But I figured out a way to do it -- without even having to copy the arrays.

In any case, I would like to implement SELECTION TO ARRAY in this way, because it will be a whole lot faster. Currently I am faking SELECTION TO ARRAY by looping through the selection, but this is inefficient, especially with Client as the web server because the entire record gets loaded instead of just the requested fields.

  If I do this, I have a few choices on how to do it:

- Simply replace the existing command, but I will no longer be able to support the auto-relate one and auto-relate many parameters I added previously, although they will probably no longer be necessary.

- Keep the previous syntax for backwards compatibility, and have SELECTION TO ARRAY(*; ...) [the * at the beginning distinguishes] use the "true" selection to array.

- Add a new command, such as SELECTION4D TO ARRAY.

After weighing everyone's concerns, I will take a two-pronged strategy:

- Add a * argument to the SELECTION / SELECTION RANGE TO ARRAY commands to force them to use the new code. This way legacy code will work without modification.

- Add an option in Active4D.ini called "new selection to array", which if set to "yes" or "true" will force the commands to use the new code without the * argument. This way, if you want to always use the new code and have no concern about legacy code, you don't have to remember to use the *.

That's all for now, thanks again to all of you for your input and your continued support.

Regards,

   Aparajita
   Victory-Heart Productions
   [EMAIL PROTECTED]
   www.aparajitaworld.com

   "If you dare to fail, you are bound to succeed."
   - Sri Chinmoy   |   www.srichinmoylibrary.com




Reply via email to