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

2012-11-20 Thread Bernhard Urban
On Tue, Nov 20, 2012 at 11:01 AM, Ilya Portnov  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

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2012-11-20 Thread Stephen Tetley
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  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?
>

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2012-11-20 Thread Ilya Portnov

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


KC  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@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe




___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2012-11-19 Thread JP Moresmau
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.

-- 
JP Moresmau
http://jpmoresmau.blogspot.com/

On Tue, Nov 20, 2012 at 7:53 AM, Mathijs Kwik wrote:

> KC  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@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2012-11-19 Thread Mathijs Kwik
KC  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@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2012-11-19 Thread Никитин Лев
And I'd be very interested.Let me know too, please. 20.11.2012, 13:32, "John Wiegley" : KC   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 knowwhat you discover.John___Haskell-Cafe mailing listHaskell-Cafe@haskell.orghttp://www.haskell.org/mailman/listinfo/haskell-cafe___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2012-11-19 Thread John Wiegley
> KC   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@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2012-11-19 Thread KC
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

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe