From: Clifford Heath Date: 2009-05-31T12:15:05+09:00 Subject: Re: [ANN] Endless Ruby 0.0.2 Caleb Clausen wrote: >> Ouch. But this is a good candidate for using Polyglot. Just name >> your files .rbe, and when you require 'endless', it registers that >> extension with Polyglot to be used with the endless loader. Then >> you can just "require 'fred'", and it will endless-load "fred.rbe". > > This is very interesting, I could use this in RubyMacros as well. But > then that brings up another issue; what if I want to use both at once? I think you'd need to create a custom loader that knows how to load the file having combined syntax. When Nathan Sobo created Treetop, one of his hopes was that Ruby could eventually incorporate PEG parsing technology and add his "rule" keyword. Because PEG parsers are composable, this would allow you to define new parse rules within a Ruby program, which would integrate fully into the existing Ruby grammar, or be used to introduce new sub-languages that mesh in nicely... My take on that was then to extend Kernel.require so that each file extension used a different top-level parse rule *from within the combined grammar*, and you have a full meta-language framework... That's kinda what Polyglot is about. It's kinda what you're talking about below, but done "properly". > Aside from the trouble of actually getting the two to work together, > how does a user specify that some particular combination of > preprocessors is to be used? Extending your example, I could use .rbm > for files with macros in them, but what about files without ends and > with macros? .rbem? While Polyglot's extension registration system is > nice, I'm wanting something more sophisticated as well. Rails went with chained processors, like file.html.erb, etc. Polyglot's loader isn't currently defined to read the input file and yield content for a subsequent loader, but chaining like that is a possible extension. > I'm not entirely sure, but it seems like he's saying that if you > should be able to require "languageConverter_f77.rb", and then write > the rest of the file in fortran. A bit far-fetched, but I like the > idea of being able to declare the format up at the top of the file, > perhaps with a magic comment. > >> Why not think about providing a mechanism which provides this possibility? > > Hmm, what about it, Clifford? Seems like an appropriate thing to add > to Polyglot.... It's certainly possible. How would one loader pass output to the next? I wouldn't want to create the intermediate content as files. > PS: the examples on this page got damaged somehow: > http://polyglot.rubyforge.org/ Thanks, I'll look at it. Clifford Heath.