From: "Basile Starynkevitch [local]" <basile.starynkevitch@inria.fr>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Alternative Bytecodes for OCaml
Date: Wed, 25 Aug 2004 19:37:45 +0200 [thread overview]
Message-ID: <20040825173744.GA11806@bourg.inria.fr> (raw)
In-Reply-To: <200408250926.28629.jgoerzen@complete.org>
On Wed, Aug 25, 2004 at 09:26:28AM -0500, John Goerzen wrote:
John> I come to OCaml from a Python background, and one of the most
John> interesting bits of technology for Python is Jython[1]. Jython is a
John> pure Java implementation of the Python interpreter and native-code
John> libraries. It allows Python programs to run unmodified in a Java
John> environment. More powerfully, though, Python programs can use Java
John> classes as if they were native classes. [....]
I see several reasons against using the JVM in eager functional
languages like Ocaml (I'm recalling some papers, but I forgot the
references)
The garbage collector has different requirements in Java (JVM) and
in Ocaml. Java is multi-threaded (in the sense that several threads
are executing Java bytecode simultanously), but Ocaml is not really
multi-threaded (in the sense of simultanous bytecode
execution). Also, Java style favors big mutable objects, while
functional style suggests many small immutable tuple blocks (i.e. tuples or
records in Ocaml source language) with quick allocation.
IIRC, the minimal Java overhead for any Java objects is 2 words
(one for the class pointer, one for a serial number), while the Ocaml
memory overhead is usually one word (for the block header, containing
the tag & the block size).
Ocaml runtime (and GC) is optimized for fast allocation of tuple
(in the runtime sense) block values, and for quick tag inspection
(useful for pattern matching) - allocating such a tuple is much
faster than allocating a Java object (because there is no
synchronisation issues)
The JVM bytecode specification does not support tail-calls (which
is really needed in functional languages) and do not provide quick
closures (closures could be emulated by inner classes instances in
JVM, but they would be much slower)
The substantial differences in the GC, and the lack of closure &
tailcall support in JVM is a well known barrier against using the JVM
for functional language implementations. In other words, even if some
Java enthusiasts tell otherwise, the JVM is not the universal UNCOL of
our time!
Even if the JVM specification was extended (for tail calls &
closures), the resulting implementation[s] would very probably be
slower than Ocaml (because Java requires different trade-off than
Ocaml).
Regards.
--
Basile STARYNKEVITCH -- basile dot starynkevitch at inria dot fr
other email : basile at starynkevitch dot net
Project cristal.inria.fr - temporarily
http://cristal.inria.fr/~starynke --- all opinions are only mine
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2004-08-25 17:38 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-25 14:26 John Goerzen
2004-08-25 14:38 ` Richard Jones
2004-08-25 14:50 ` John Goerzen
2004-08-25 15:02 ` John Goerzen
2004-08-26 9:05 ` Raphael Montelatici
2004-08-26 13:20 ` John Goerzen
2004-08-26 13:30 ` John Goerzen
2004-08-25 14:55 ` Lars Nilsson
2004-08-25 15:06 ` Jason Smith
2004-08-25 16:14 ` John Goerzen
2004-08-28 3:49 ` John Goerzen
2004-08-25 15:05 ` skaller
2004-08-25 15:21 ` Lars Nilsson
2004-08-25 15:22 ` Jason Smith
2004-08-25 15:52 ` John Goerzen
2004-08-25 16:26 ` Jason Smith
2004-08-25 16:40 ` Jason Smith
2004-08-25 16:49 ` Ville-Pertti Keinonen
2004-08-25 17:01 ` Jason Smith
2004-08-25 17:17 ` John Goerzen
2004-08-25 20:00 ` skaller
2004-08-25 15:23 ` Brian Hurt
2004-08-25 15:24 ` Christophe TROESTLER
2004-08-27 14:26 ` Daniel Ortmann
2004-08-27 14:44 ` skaller
2004-08-27 14:59 ` Brian Hurt
2004-08-25 15:35 ` John Goerzen
2004-08-25 16:00 ` Richard Jones
2004-08-25 15:40 ` Nicolas Cannasse
2004-08-27 17:55 ` John Goerzen
2004-08-27 18:37 ` skaller
2004-08-27 18:49 ` John Goerzen
2004-08-27 20:39 ` skaller
2004-08-27 20:56 ` John Goerzen
2004-08-27 22:05 ` Richard Jones
2004-08-27 23:15 ` John Goerzen
2004-08-31 11:10 ` Keith Wansbrough
2004-08-28 0:25 ` skaller
2004-08-28 9:35 ` Marcin 'Qrczak' Kowalczyk
2004-08-28 9:50 ` Marcin 'Qrczak' Kowalczyk
2004-08-28 10:41 ` skaller
2004-08-28 11:37 ` Marcin 'Qrczak' Kowalczyk
2004-08-25 17:37 ` Basile Starynkevitch [local] [this message]
2004-08-25 18:00 ` Richard Jones
2004-08-25 22:10 ` Yamagata Yoriyuki
2004-08-26 0:09 ` John Goerzen
2004-08-26 4:26 ` [Caml-list] bytecode and native code at once Brandon J. Van Every
2004-08-26 9:55 ` skaller
2004-08-26 15:52 ` [Caml-list] " mikel
2004-08-26 17:09 ` Paul Snively
2004-08-26 17:31 ` mikel evins
2004-08-26 18:04 ` Paul Snively
2004-08-26 18:28 ` mikel evins
2004-08-26 21:15 ` skaller
2004-08-27 8:52 ` Keith Wansbrough
2004-08-27 15:39 ` David Brown
2004-08-27 15:48 ` mikel evins
2004-08-26 21:42 ` [Caml-list] Alternative Bytecodes for OCaml Michal Moskal
2004-08-27 9:38 ` Nicolas Cannasse
2004-08-27 13:09 ` John Goerzen
2004-08-27 13:44 ` Brian Hurt
2004-08-27 13:58 ` skaller
2004-08-27 20:48 ` Nicolas Cannasse
2004-08-27 21:03 ` Benjamin Geer
2004-08-30 16:40 ` John Goerzen
2004-08-27 19:49 ` Blair Zajac
2004-08-27 22:18 ` Richard Jones
2004-08-27 23:38 ` Yamagata Yoriyuki
2004-08-28 16:40 ` Basile Starynkevitch [local]
2004-08-28 17:03 ` [Caml-list] (GC issues) " Nicolas Cannasse
2004-08-28 20:45 ` [Caml-list] " Basile Starynkevitch [local]
2004-08-29 2:31 ` skaller
2004-08-29 5:04 ` Brandon J. Van Every
2004-08-29 12:58 ` John Goerzen
2004-08-29 15:06 ` Brian Hurt
2004-08-29 15:22 ` Radu-Mihail Obada
2004-08-29 10:12 ` Nicolas Cannasse
2004-08-30 12:23 ` Basile Starynkevitch [local]
2004-08-30 13:17 ` Nicolas Cannasse
2004-08-26 16:04 ` [Caml-list] " =?unknown-8bit?Q?=A3ukasz?= Dobrek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040825173744.GA11806@bourg.inria.fr \
--to=basile.starynkevitch@inria.fr \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox