On Sun, Oct 20, 2013 at 10:40:32PM -0700, Ian Piumarta wrote: > > * Is the idea that everyone should be doing/forking his own, > > CipherSaber style, or is there an intent to share and build common > > platform? > > I'd love to build a common platform. Maru is in particular trying > to be malleable at the very lowest levels, so any special interest > that cannot be accommodated easily within the common platform would > be a strong indicator of a deficiency within the platform that > should be addressed rather than disinherited. > > Where there is a choice between forking to add a fix or feature and > clamouring to get that fix of feature adopted into some kind of > central repository, I believe clamouring always benefits vastly more > people in the long run. I intensely dislike the github/gitorius > 'clone fest' mindset because it dilutes and destroys progress, > encouraging trivial imitation rather than radical innovation -- > which, if there is any at all, finds itself fighting an intractably > high noise floor. Forking will always split a community (even if > one side is only left with a community of one) so if you want what > you are doing to be relevant one day and benefit the most people > then trying to limit forks and clones is a good thing, IMO. If > anyone wants to do something hugely incompatible with Maru, with no > guarantee of eventual success, I'm happy to make a branch in the > repository for it. While public forking might be a viable model for > development that closely linked with and intends to contribute back > to a mature project, where the gravitational field of the parent > repository is irresistibly high, I don't think it is very helpful or > efficient for getting a small and unestablished project off the > ground.
If I may, there may be one non-trivial argument in favour of forking: learning. I found that building my own stuff helps me learn. For instance, I had to write my own meta compilers[1] to really understand the magic behind parsing expression grammars. Reading OMeta's source code[2] simply wasn't enough. I'm now doing the same with Earley Parsing[3]. I have a working toy recogniser, and now seek to reconstruct a tree (or several). Since the Wikipedia article didn't help much on that front, I have sought the simplest implementation I could find[4]. But again, no luck understanding how it reconstructs the parse tree. (Can't I read source code?) So I tried to reconstruct a parse tree manually, from the states generated by my recogniser. Surprisingly, it worked. The Wikipedia says that "the recogniser can be easily modified to create a parse tree as it recognises, and in that way can be turned into a parser". Turns out I don't even need to. And now, I think I understand the reconstruction algorithm well enough to implement it. I predict some minor trouble with ambiguous parses, though. [1]: http://loup-vaillant.fr/projects/metacompilers/ [2]: http://www.tinlizzie.org/ometa/ [3]: https://en.wikipedia.org/wiki/Earley_parser [4]: https://github.com/tomerfiliba/tau/blob/master/earley3.py --- Now, back to Maru. A central repository for serious work is probably best. But we also need a reliable way to learn. I simply cannot trust myself with a COLA system until I know I can build one, for two reasons: - It's a new, untested, immature technology (or so many people will think). If it breaks, I must be able to fix it myself, because like Linus, Ian probably doesn't scale. - Its abstractions are "leaky" by design. Unlike with C or Java, the actual machine behind the language is for me to take over. There is no layer behind which I cannot get past. (Or so I guess.) So if we want to have a chance to spread something like Maru, we probably need to favour deep learning as well. Surface understanding is likely to get its users into trouble, which will then blame the tool. Of the top of my head, I see a few ways one could learn Maru: - Dive into the source code of the real thing. I may try, but I will likely fail miserably, just like I did OMeta. - Read scientific papers. I gathered a surface understanding of some principles, but nothing solid yet. - Build a toy from scratch. I'll probably do that, since it worked so far. - Learn from an existing toy. That toy would be the "useful fork". Bonus points if the toy can lift itself into the real thing. Extra bonus points if the real thing is _actually_ lifted up from the toy. - Learn from tutorials, like "Write yourself a Maru in 48 hours"[5]. Bonus points if there's a second tutorial to lift your toy into something serious. [5]: https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours --- Here is how I would imagine my dream world. It would be a central repository with: - A toy Maru, optimised for clarity. - A tutorial for writing your own toy. - A serious Maru, lifted up from the toy. - A tutorial for lifting your own toy up. - The hand-written bootstrap compilers (for understanding, and the Trusting Trust problem). Does this dream world sounds possible? Is it even a good idea? Loup. _______________________________________________ fonc mailing list fonc@vpri.org http://vpri.org/mailman/listinfo/fonc