KC | 20 Nov 06:36 2012
Picon

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

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?

Or

Is there a way for a JVM language or bytecode to call Haskell when needed?

--

-- 
--
Regards,
KC
John Wiegley | 20 Nov 07:29 2012

Re: Instead of Haskell running on the JVM is there a way for Haskell to call a JVM language ...

>>>>> 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?

> Or

> Is there a way for a JVM language or bytecode to call Haskell when needed?

I'd be very interested to know the answer to this as well.  Please let me know
what you discover.

John
Никитин Лев | 20 Nov 07:41 2012
Picon

Re: Instead of Haskell running on the JVM is there a way for Haskell to call a JVM language ...

And I'd be very interested.
Let me know too, please.
 
20.11.2012, 13:32, "John Wiegley" <johnw <at> newartisans.com>:
 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?
 Or
 Is there a way for a JVM language or bytecode to call Haskell when needed?

I'd be very interested to know the answer to this as well.  Please let me know
what you discover.

John

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
Mathijs Kwik | 20 Nov 07:53 2012
Picon

Re: Instead of Haskell running on the JVM is there a way for Haskell to call a JVM language ...

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?
JP Moresmau | 20 Nov 08:01 2012
Picon

Re: Instead of Haskell running on the JVM is there a way for Haskell to call a JVM language ...

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. 


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




_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
Ilya Portnov | 20 Nov 11:01 2012
Picon

Re: Instead of Haskell running on the JVM is there a way for Haskell to call a JVM language ...

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
>>

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
Bernhard Urban | 20 Nov 23:50 2012
Picon

Re: Instead of Haskell running on the JVM is there a way for Haskell to call a JVM language ...

On Tue, Nov 20, 2012 at 11:01 AM, Ilya Portnov <portnov <at> iportnov.ru> wrote:
> 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.

To elaborate the current state of MateVM a bit:
We implement methods declared as native in Java by either IO Haskell
functions or C functions. You can hook a Haskell function here in the
source [1]. There're already some examples.
Drawbacks are:
(1) you have to mess around with the internal object layout if you
want to pass values, which is JVM specific
(2) it is *not* the standard way, i.e. it isn't like in JNI defined
(3) we'll probably change the interface sooner or later ;)

If you want to play around, you're welcome. But if you need something
stable, don't use MateVM at the moment :-) it's like two man-years
away from something productive usable.

Bernhard

[1] https://github.com/MateVM/MateVM/blob/master/Compiler/Mate/Runtime/MethodPool.hs#L62
Stephen Tetley | 20 Nov 18:26 2012
Picon

Re: Instead of Haskell running on the JVM is there a way for Haskell to call a JVM language ...

There has been, as Antony Courtney was using Java2D for vector
graphics called from Haskell in his Haven system.

The FFI was GCJNI (Green Card JNI) - I'm not sure where it exists now
or how much it has bit rotted.

On 20 November 2012 05:36, KC <kc1956 <at> gmail.com> wrote:
> 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?
>

Gmane