Figuring out the goals
We first need to figure out the exact goals for Factor 1.0, and how we're going to go about completing them. From the Factor homepage, we have a list of goals for Factor 1.0:
- New object system with inheritance and multiple dispatch
- Incremental garbage collection
- Drastically reduce compile time
- Continue improving existing libraries, such as databases, multimedia, networking, web, etc
- Full Unicode support, Unicode text display in UI (in progress)
- Better UI development tools
- Get the UI running on Windows CE
- Add support for Windows 64-bit and Mac OS X Intel 64-bit
- Use kqueue (BSD, Mac OS X), epoll (Linux) for high-performance I/O
- Directory change notification
This contains many different things, which will take a lot of work. For each of these tasks (or pieces of them), we need to decide who will be in charge of them and what a target date for completion will be. There are also other goals that aren't on this list, and we need to identify what these are.
One list item is particularly involved: Continue improving existing libraries, such as databases, multimedia, networking, web, etc. Right now, the libraries in
extra/are of inconsistent quality. We should set a standard for quality for things that are in
extra/and designate more experimental libraries as such, maybe by putting them in a different directory like
playground/. We'll should have an audit of all the libraries in
extra/to improve them as much as possible and decide whether they should go into
By the end of this year (December 31, 2007): We need to decide, in more detail, how the path to Factor 1.0 will go. We need a full list of goals, a person assigned to each one, and a target date for completion. We also need to decide the terms for an audit of the libraries.
One-third through next year (April 31, 2008): We should be done with the library audit. All new libraries should be correctly sorted into
playground/. At this point, around half of the remaining critical features of Factor 1.0 should be done. Language features, like the form of the object system, should be completed and frozen.
Two-thirds through the year (August 31, 2008): This date is the target for all of the key features to be completed. After this point, we will focus on bug fixes, performance and more complete documentation. If possible, 1.0 alpha/beta 1 should be released, and further alpha/beta releases should be made through the year. Here, Factor's runtime should be frozen with no significant changes in implementation.
At the end of the year (December 31, 2008): By this date, if all goes well, we will release Factor 1.0, with no major additional features added after the alpha stage.
Here are guidelines that all vocabs in
extra/should eventually follow:
- Each vocab foo should consist of six files: foo.factor, foo-tests.factor, foo-docs.factor, summary.txt, authors.txt, tags.txt
- Every vocab's documentation should explain each externally useful word, and it should have a main article telling users where to start.
- Every vocab's unit tests should be as complete as possible.
Eventually, some vocabs in
playground/will be hosted outside of the main Factor distribution. But right now, the total quantity of Factor code is such that everything that's publicly distributed can be included. Of course, when more people start writing code that they refuse to put under a BSD-compatible license, we'll want to distribute that code separately.
This whole roadmap is quite optimistic, but I think it's possible if we focus on that goal.
Note: I wrote this without significantly consulting everyone involved with Factor, so if you have a problem with it, know that this doesn't form any kind of official policy (and please tell me).