On Jan 28, 2013, at 3:21 AM, Simon Peyton-Jones <simo...@microsoft.com> wrote:
> I would like to explore making a backend for .NET. I've done a lot of > background reading about previous .NET and JVM attempts for Haskell. It seems > like several folks have made significant progress in the past and, with the > exception of UHC, I can't find any code around the internet from the previous > efforts. I realize that in total it's a huge undertaking and codegen is only > one of several significant hurdles to success. > > Someone should start a wiki page about this! It comes up regularly. (That > doesn’t mean it’s a bad idea; just that we should share wisdom on it.) Maybe > there is one, in which case perhaps it could be updated? > > Some thoughts (which, if someone would like to transfer these to the wiki > page, perhaps in more coherent form): > > · Check out Frege. Maybe others. I think several folk are working on > .NET or JVM projects. > > · Do you want to inter-operate with .NET, or compile to .NET bytecode. > These are very different? I’ll assume the latter. > Yes, the latter. > · Do you want to compile to verifiable .NET bytecode? This is hard. > GHC’s type system is more expressive than .NET’s in many ways (higher kinded > type variables, kind polymorphism...). And less expressive in others > (sub-typing). Compiling to verifiable bytecode would require lots of run-time > type-tests (which we know will succeed) to reassure .NET that it’s all > kosher. Figuring out how to minimise these tests would be a challenge in > itself. > I'm okay with slow code. That's something I can improve later. :) > · And of course this affects whether you can go via C#, since that > requires the program to be well typed in the .NET sense. > I'm not sure yet about going via C# or directly to CIL. > · Do you want simply to run Haskell programs on .NET or do you want > Haskell programs to call .NET libraries? I assume the latter. But that > means that .NET types must be manifested somehow as Haskell types. A big > issue is how much of .NET’s type system you want to suck into Haskell. A > stressful example: can you define in Haskell a type that sub-classes an > imported .NET type. > > Daan and Mark and Sigbjorn and I wrote papers about this stuff. Look at the > papers under "Foreign language integration" on > http://research.microsoft.com/en-us/um/people/simonpj/papers/papers.html. > Oh, and this: > http://research.microsoft.com/en-us/um/people/simonpj/papers/oo-haskell/index.htm > Thanks. I'll make sure to read over those. > · I’d be inclined to start from Core rather than STG, perhaps the > output of CorePrep. STG is a bit encrusted (though we’re about to simplify > it a bit). But honestly they are pretty similar. > > Cmm would be a bad choice. It’s far too low level. > Good to know. > · Another major issues is that of primops (prelude/primops.txt.pp). > Things like add Int# or Float# are fine, but what about forking a thread, or > throwing an exception? > > o One possibility is to try to emulate them all. I have no idea how hard > that would be, but GHC’s I/O libraries rely heavily on lightweight > concurrency. > > o Another is to trim the list of PrimOps, and only support some of them. > That’s easier, but you’d have to dump a lot of the ‘base’ package > (particularly I/O) and re-implement it using the .NET libraries instead. > > I think I will do whatever gets Fibonacci working first, and then reevaluate. Thanks for the pointers. Jason
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users