[Haskell-cafe] Instead of Haskell running on the JVM is there a way for Haskell to call a JVM language ...

Ilya Portnov portnov at iportnov.ru
Tue Nov 20 11:01:11 CET 2012


Hi all.

JP Moresmau писал 20.11.2012 13:01:
> You may want to have a look at my little HJVM project on Github (
> https://github.com/JPMoresmau/HJVM). Promise, I'll put in on Hackage 
> some
> day. Basically it provides FFI wrappers and some c code to be able to 
> start
> a JVM and call Java methods, etc from Haskell.

Please take a look at http://hackage.haskell.org/package/hs-java also. 
It's an assembler/disassembler of Java bytecode and *.class files. 
Moreover, there is https://github.com/MateVM/MateVM — an (experimental) 
Java VM on Haskell :) So, if you are interested in haskell/java interop, 
maybe we could integrate our efforts.

Best regards,
Ilya Portnov.

>
> --
> JP Moresmau
> http://jpmoresmau.blogspot.com/
>
> On Tue, Nov 20, 2012 at 7:53 AM, Mathijs Kwik
> <mathijs at bluescreen303.nl>wrote:
>
>> KC <kc1956 at gmail.com> writes:
>>
>> > Instead of Haskell running on the JVM is there a way for Haskell 
>> to
>> > call a JVM language (or generate bytecode) to access the Java 
>> class
>> > libraries when needed?
>>
>> I once did a small test to get this working.
>> It's not that hard, but needs some work. It's fine for exposing a 
>> few
>> functions though.
>>
>> Basically it's a 2-step process, eased by using a makefile or 
>> similar
>> helper.
>>
>> You have to compile your haskell code into a shared object (.so on
>> linux, .dll on windows), which includes the haskell runtime (rts).
>>
>> This library can be called from c.
>> A small pitfall is that you first need to do a call to initialize 
>> the
>> haskell runtime, and when you're done using it, close it.
>> This is most easily just tied to your c/java program's main
>> initialization functions.
>>
>> Java is able to load/use these shared libraries through JNI.
>> Of course you lose your platform-independance, so if you want your 
>> java
>> application to work on multiple platforms / OSses, you need to build
>> shared objects for all of them.
>>
>> Last but not least:
>> You have to export the haskell functions you want through FFI.
>> Also, make sure they use raw data types such as CString, as that 
>> what C
>> and java will give you and expect back.
>>
>> So basically you go Haskell FFI <-> C <-> Java JNI
>>
>> I'm sorry I cannot give you any links or code, because I'm in a bit 
>> of a
>> hurry. But google and the ghc docs are your friend.
>>
>> Mathijs
>>
>>
>>
>> >
>> > Or
>> >
>> > Is there a way for a JVM language or bytecode to call Haskell when
>> needed?
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>




More information about the Haskell-Cafe mailing list