I mentioned Monday I would try to summarize what worked and didn't
work so well in M4 so we could improve.
== Why M4 took "so long"
Next, I made the decision, on agreement with Tako and Tom (at least)
to delay work on rewriting our CLI tools to git-style until M3 was
released. And from experience I know these sorts of tasks are best
done _right at the start_ of the next dev cycle, so I told Tom to get
started with it right away. It turned out to be a long task
I'm 100% convinced we can't win the crowd without these presentations
(though it's not enough to win them, but it's a prerequisite), so I
don't regret investing this time. We also can't afford to do it after
1.0 because we want users of 1.0 as soon as we release it.
Not only that but writing ceylon.io illustrated changed required in
the language, so it was beneficial, if expensive. I am still not sure
what our strategy should be regarding that SDK.
== What we need to improve
=== Testing
We do a lot of testing, especially in the JVM backend. Running the
tests involve testing not only the compiler, but the command-line
tools, ant tasks, API documentation generator, ceylon.language tests
and making sure that the SDK compiles, testing the CMR and stuff.
What we don't test is:
I also noticed that at the start of a release cycle we write a lot
more thorough tests than at the end, so late features/bug fixes are
less tested.
=== Performance
We could argue that performance of Ceylon code at runtime can wait for
1.1, but performance of the tools could be an adoption prerequisite
(note that Scala has notoriously slow tools too, but that could also
be an adoption barrier for them too).
==== IDE
The IDE performance is unacceptable. We can't expect people to start
working on the SDK project with it. There are a number of things which
we can improve easily if we wanted:
==== JVM compiler
The JVM compiler performance is unacceptable. On the SDK we take 6s of
the build (50% time) and we need to improve that. I've started looking
in the past in serialising the lazy model to load it faster than with
the model loader, but that's pretty much limited to ceylon.language
(modules that can't depend on other modules) and the improvement was
so minimal (1.5s out of 12s) that it was not merged. I think we need
to look into it more seriously. Perhaps caching and getting rid of
allocations could fix it.
==== Typechecker
The typechecker performance is unacceptable. On the SDK we take 6s of
the build (50% time) and we need to improve that. I think we need to
look into it more seriously. Perhaps caching and getting rid of
allocations could fix it.
=== Cross-project bugs/features
sometimes you just have to. If in M5 I don't see commits from
_everyone_ in the core team on the IDE, we will have failed, so please
find the courage to do it. If it's not a cross-project feature that
needs to be done, surely there must be a bug or feature in the IDE
that you experienced and want to see fixed: well now's the time to do
it.
=== Community
I am of the opinion that there are two sorts of contributors to
Ceylon: people that get paid for working on it, such as Gavin, Tako,
Tom or me, and others that do it in their free time, such as David,
Tomas, Ales and others. I personally think that we can't point a
finger to "free-time" contributors and tell them to fix something
ASAP.
I think that free-time contributors should not be given time
constraints or menial tasks unless they are willing to do them
voluntarily, because the moment contributing on Ceylon becomes a shore
to them, we've lost them as contributors.
By definition, Gavin, Tako,
Tom and me are paid to deal with time constraints and shores. That's
what we're paid for. So whenever we find a bug on code contributed by
free-time contributors and we need it fixed ASAP, then this is a job
for us, not for pointing fingers.
We also should not duck out of
menial tasks by trying to delegate them to free-time contributors,
that's just nasty. Remember we're paid to do the shitty work that
needs to be done.
=== The schedule
As in every dev cycle there are bugs to fix and features to write. I
had the opinion that we should first fix all the bugs and only then
deal with features. Which meant that I spent three weeks straight (and
others too) just fixing bugs. This is boring as hell and demoralising,
but at the same time, I am not sure there's a better way to schedule
that. I still think we shouldn't introduce features while we have open
bugs.
== The things we did well
I think all the rest we did not just well but great :) I don't want to
give the impression we have a shitty team because that's absolutely
not true. I couldn't wish for a better team and wouldn't change it for
the world. That we came up with M4 at all seems nothing short of a
miracle to me. But the project is growing a lot and we need to improve
to keep up with it.
Of course I must have missed things, so if there's anything else that
we need improving (like what an ass I can be during the release
weeks), please speak up! Oh, and feel free to disagree with what I
said too (unless it's about performance and you're Gavin).
I suppose that's a philosophical debate. What we did is bugs,
features, bugs+integration. I think that adding releases and new bugs
on top of a buggy base is just wrong. It means we end up relying on
flawed architecture to add new features, which means that the new
features introduce more bugs that way than if they were added to a
"healthy" platform.
Often? Come on, that's rarely true, we've hardly ever needed to actually rewrite anything because of a bug, that normally only happens because of a new feature.
Still, we could look at all the own issues to see if there are any that we need to do right now because of architectural concerns, I just don't think it's necessary to go and fix all outstanding issues.
> --
> You received this message because you are subscribed to the Google Groups "ceylon-dev" group.
> To post to this group, send email to ceylo...@googlegroups.com.
> To unsubscribe from this group, send email to ceylon-dev+...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/ceylon-dev?hl=en.
>
Not only that but writing ceylon.io illustrated changed required in
the language, so it was beneficial, if expensive. I am still not sure
what our strategy should be regarding that SDK.Personally my first reaction would be to say that we can't release a 1.0 without an SDK.But releasing 1.0 with a half-baked or not very well thought out SDK is much worse.And knowing that writing a good SDK will be a lot of work means that we might have to delay the SDK until after 1.0 (but if we have them on Herd how will we prevent people from using them and starting to rely on them?)I at least consider the design of the SDK to be something of utmost importance, not something that we can "just do iteratively until we get it right".Of course at the same time they serve us well to get a feel for the language and to find problems (but any module serves that purpose, not only the official SDK modules)
Not only that but writing ceylon.io illustrated changed required in
the language, so it was beneficial, if expensive. I am still not sure
what our strategy should be regarding that SDK.Personally my first reaction would be to say that we can't release a 1.0 without an SDK.But releasing 1.0 with a half-baked or not very well thought out SDK is much worse.And knowing that writing a good SDK will be a lot of work means that we might have to delay the SDK until after 1.0 (but if we have them on Herd how will we prevent people from using them and starting to rely on them?)I at least consider the design of the SDK to be something of utmost importance, not something that we can "just do iteratively until we get it right".Of course at the same time they serve us well to get a feel for the language and to find problems (but any module serves that purpose, not only the official SDK modules)Very true. But I don't think there's a realistic way to release 1.0 with an SDK that can honestly be called mature. Not if you if you don't want to spend another year on it (and maybe not even then). But maybe that's not necessary: with Herd and Ceylon's module system we have the necessary preconditions to let the SDK evolve over time. Change and diversity are not necessarily bad, if you have the right infrastructure.
we've been
pretty much working to the max of our abilities for a year now (at
least for Tako, Tom and I. Gavin longer), so summer was not as
productive as other months.
Tom
outdid himself with a plugin system, genericity, command-line
completion, HTML tool help generation and stuff. We have a pretty
great system now, that we can be proud of. But it took a long time.
I worked a lot on ceylon.io, which
turned out to be a lot of work that I didn't quite finish because at
some point it was suggested that getting 1.0 out the door might be
more important than having a complete SDK at 1.0.
During M4 we had many would-be contributors that offered to help, and
almost none of them ended up contributing. We need to try to find out
why. It could be our fault, or not.
As in every dev cycle there are bugs to fix and features to write.
Don't forget that the whole member type thing Tom did which turned out to be a monster job.