Tonight's hackathon is all about YAML in general, and Why's syck in particular. I did finish designing MMD and scoping for PIL's ::Code type when waiting for clkao and miyagawa's arrival, but once they are here, it's syck all over:
- Gaal (physically in Israel but virtually with us) completed Pugs's Syck support, so YAML Dump/Load roundtrip now works for Perl 6 objects in the current runcore.
- Based on Gaal's work and other hackathoner's feedback, I released six versions of YAML::Syck tonight, adding the ability to parse and dump Perl 5 blessed references, and fixed memory leaks discovered by miyagawa's benchmarking script.
- Clkao is converting SVK to use YAML::Syck and uncovered a lot of corner cases. Now the SVK::Patch blocks can be manipulated in other languages -- we decided to use FreezeThaw.pm way back as YAML.pm was too slow at that time. He is also threatening to do randomly-generated testing (ala QuickCheck, Test::LectroTest) for YAML, just like what I did to Adam's PPI.pm during the Lismore hackathon.
- Ingy helped me porting tests from his soon-to-be-released-for-real YAML.pm, 45.54% of which Syck passes out-of-the-box. Some of the rest are due to test's assumptions, and some due to unimplemented APIs.
- Miyagawa noticed that under inline+headless mode, YAML::Syck could produce (and consume) JSON, which makes it an attractive alternative to the pure perl JSON.pm. He'll probably release a JSON::Syck just for doing that...
According to chansen's benchmarking, YAML::Syck is around an order of magnitude faster than YAML.pm, and also faster than every other popular data serialization modules, except for Storable.pm.
There were other strange miniprojects bouncing around, e.g.:
- Declarative pre/post create/retrieve/update/delete wrappers for Jifty::DBI model classes, using miyagawa's soon-to-be-revamped Class::Trigger
- Porting Pugs's Text.Parser.Rule (plus OpTable and PArrows) into Perl 5 for a robust Rules engine.
- Combining Perl6::Subs, Perl6::Roles, Perl6::Attributes and Spiffy into a new module, currently codenamed Sixxy.pm. Aside from useful for Perl 5 coding in general, Pugs's Perl5 codegen can also target it to simplify desugaring.
- Dedicated SVK server for lightweight SVK client and minimal bandwidth consumption, possibly using (gasp) YAML-RPC as transport layer.
- ...there's more, but I keep getting distracted into more hacking instead of mere journaling. You know how it's like...
I am slobbering all over my face hearing about all of the great work on this. Wow, SVK storing patches in YAML??
Yes on the JSON compatibility. It's more than just headless+inline. I also have to ensure all strings are quotes and typed nodes get coerced right. I'll work on it.
Syck's emitter is quite slow and I'm confident that once the knot in its stomach is soothed, we'll get four times the speed out of it.
Posted by: why | 2006.01.09 at 12:20 PM