[java-gnome-hackers] Analyzing the hand-written binding growth over time
Brought to you by:
afcowie
From: Colin W. <wa...@ve...> - 2008-03-21 17:54:39
|
My hypothesis is that the current system of hand-writing all bindings is not sustainable, unless there were a dramatic influx of new committers to this project. And even then, we would still have long-term issues with API consistency. Attached is a Python script which generates statistics that I believe support this hypothesis. The basic idea is to count the coverage per unit of time. I chose to use a week. Here's sample output from my script: offset: -0 revnum: 455 methods: 1010 offset: -1 revnum: 453 methods: 1010 offset: -3 revnum: 450 methods: 1010 offset: -5 revnum: 444 methods: 990 offset: -6 revnum: 433 methods: 974 offset: -7 revnum: 429 methods: 970 offset: -8 revnum: 421 methods: 935 offset: -9 revnum: 410 methods: 914 offset: -10 revnum: 404 methods: 861 offset: -14 revnum: 403 methods: 861 offset: -15 revnum: 399 methods: 860 offset: -16 revnum: 395 methods: 691 offset: -17 revnum: 371 methods: 663 offset: -18 revnum: 355 methods: 558 offset: -19 revnum: 352 methods: 513 offset: -21 revnum: 351 methods: 512 The "offset" is the number of weeks ago, "revnum" corresponds to the BZR revision number from mainline, and "methods" is the number of implemented methods, as adapted from src/utils/coverage.pl. We can see in this graph that progress has been pretty jumpy; in the last few weeks the coverage has not increased at all. I don't have the precise number handy, but from an observation it looks like the project is perhaps adding 30 methods/week, tops. According to the hardcoded number in coverage.pl, there are 5468 methods to implement, and currently we have 1010. Using that conservatively-high rate of 30 methods/week, hand-writing 4358 bindings will take 145 weeks. That's 2.7 *years*. But even that is probably overly optimistic, because some parts of the API are much harder to bind than others. I've attached the full output from my script, as well as the script itself. You can regenerate the results like this: python coverage-revisions.py /path/to/java-gnome |