Lucifers,
I'm mostly done with the things I wanted to get in the 0.5 release:
- Review the Clownfish runtime API.
- Document the C API.
- Document the Clownfish header file language.
- Document the cfc compiler for C projects.
Other things that should be done:
- Clownfish tutorial, see CLOWNFISH-43:
https://issues.apache.org/jira/browse/CLOWNFISH-43
- Review and add missing DocuComments.
- Add a Clownfish page and the HTML documentation to lucy.apache.org.
- Check for incompatible versions of Perl modules (see below).
Things that would be nice:
- Document the CFC compiler for Perl projects.
- Utility to create boilerplate code for a new Clownfish project.
The other big feature in 0.5 are the Go bindings. Marvin, what's the status
here? Do you think it's realistic to aim for a release early next year?
Any other things I'm missing?
Regarding the Perl modules: When we make new Clownfish and Lucy releases that
are incompatible with the 0.4 branch, we'll run into a serious problem. If a
Lucy 0.4 user installs Clownfish 0.5, Lucy will stop working in a rather
unpredictable way. I guess that Lucy simply won't load because of symbols
removed from Clownfish.so, so at least there's no danger of data corruption.
The error message will be rather cryptic, though.
Perl doesn't allow to install multiple versions of a module, so an obvious
solution is to use a separate namespace for different major versions like
Lucy::0.4, Clownfish::0.5.
We could also keep using the same namespace and die with a meaningful error
message if an incompatible version of a prerequisite is detected. I envision
something like the "compatibility version" in Darwin dynamic libraries. The
compatibility version is the lowest version a parcel is compatible with,
typically the first release of a major version. For example, Clownfish.cfp
would contain:
version: "v0.5.2",
compatibilityVersion: "v0.5.0",
Then any parcel requiring Clownfish can check whether `compatibilityVersion`
is lower to or equal than the required version (in addition to the check
whether `version` is higher than or equal to the required version). In other
words, a prerequisite can only be used for parcels requiring a version between
`compatibilityVersion` and `version` inclusive. The Perl implementation is a
bit tricky because the check must be done before Clownfish.xs is bootstrapped.
Unfortunately, we'd need this feature to be present in the Lucy 0.4 branch to
make this work. Maybe we should make a new 0.4 release first?
Nick