While .NET might not be an obvious candidate for hosting dynamic languages, it can, and very effectively do so, as demonstrated by the Iron languages IronPython, IronRuby or IronJS.
Niecza works with both .NET and Mono which means that is usable not only on Windows based machines but on Linux boxes too. Both Niecza and Rakudo follow the Perl6 specs to the letter and as this comparison chart reveals, although Niecza is faster and has support for threading/concurrency, Rakudo is more complete as an implementation.
The main man of the project Stefan O’Rear will take us through the background of porting the language to the CLR as well as what the advantages of that move are, or in other words what you can do with Perl 6 on .NET.
NV: For starters, what does Niecza mean? Where does the word’s come from?
SO’R: It is butchered Czech for a lack of time. The origins are documented at gist.github.com.
NV: So why Perl for .NET? What is the idea and motivation behind it?
SO’R: I wanted to try my own implementation of Perl 6; I asked around for a good implementation language with the features I wanted, and Matthew Wilson (diakopter) suggested C#. I had never touched .NET prior to this point.
NV: Why target the CLR and not the DLR which is specifically targeted for Dynamic languages?
SO’R: One reason is that nobody told me about the DLR until it was too late. Also, I think the DLR is a bad fit for Perl 6 conceptually and would require a lot of slow glue. In particular, the DLR has a very different idea than Perl 6 about how arithmetic operator overloading should work.
NV: Is language interop with the rest of the .NET languages possible?
SO’R: There is interop support but it’s not transparent; it tries to be as transparent as it can, but when bridging two systems as different as Perl 6 and C#, there will be roughness.
NV: Does Niecza plug into out of the box facilities of .NET like the GC, threading etc?
SO’R: Yes, it uses .NET GC and threading.
NV: So generally speaking that is the big plus of VM’s, plugging in into ready made facilities?
NV: Do Rakudo and Niecza start in common ground and then branch off, like being two branches of the same tree ? can they both follow the Perl 6 specs to the letter while at the same time targeting two different VM’s?
SO’R: Both implementations follow the spec to the letter, except when buggy. The language isn’t adapted to the VM; it would certainly be faster and easier, but we don’t want to create branches.
NV: Ultimately what can one do with Niecza? Is it possible to access .NET libraries or use Linq? Or through Silverlight can you achieve Perl on the browser?
SO’R: You can definitely access .NET libraries, there are a couple of Gtk# samples. Language Integrated Query is a C# feature, and Niecza does not make it available in Perl 6. Silverlight can probably be made to work with some effort; as far as I know it has not been attempted. But Perl in the browser is already a reality thanks to Flavio Glock’s “Perlito” system.
Nikos Vaggalis has a BSc in Computer Science and a MSc in Interactive Multimedia. He works as a Software Engineer/Database Application Developer and codes in Perl and C#.