caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Ocaml shared libraries
@ 2004-05-17  6:09 Eric Stokes
  2004-05-17  7:46 ` skaller
  2004-05-17  8:22 ` Xavier Leroy
  0 siblings, 2 replies; 7+ messages in thread
From: Eric Stokes @ 2004-05-17  6:09 UTC (permalink / raw)
  To: caml-list

Hello All,
	As the director of a shop who is using Ocaml to do real work (yes I 
know, research is more important :P),
I would really like to be able to build a shared library out of code 
that I have written in Ocaml,
and link other Ocaml programs to it. There are practical reasons for 
wanting to do this, I write and maintain
some rather large systems written in Ocaml. Currently, whenever I 
update a library (not changing its interface),
I need to recompile and reinstall the entire system. These problems I 
can live with for now.
	But... I also have "delusions" (or so I'm told). IMHO, Ocaml is fast 
enough, and has enough good libraries
in existence to create a climate where Ocaml software will slowly start 
replacing software written in C.
I've been watching the building blocks go into place for six months 
now, and things look like they
are accelerating. As the number of libraries, and applications using 
them increases, static linking starts
to become a nightmare very quickly. If you were, for example, to build 
a desktop environment in Ocaml,
you'd have to rebuild the entire system every time you changed a core 
library. And, all the little executables
in the desktop would be HUGE. I think that Ocaml is a very good 
language (understatement) for building
large reliable systems, and I would hate to see its growth be hampered 
artificially by its lack of shared
libraries.


Eric Stokes
Middleware Technical Lead
California State University, Northridge

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Caml-list] Ocaml shared libraries
  2004-05-17  6:09 [Caml-list] Ocaml shared libraries Eric Stokes
@ 2004-05-17  7:46 ` skaller
  2004-05-17  8:22 ` Xavier Leroy
  1 sibling, 0 replies; 7+ messages in thread
From: skaller @ 2004-05-17  7:46 UTC (permalink / raw)
  To: Eric Stokes; +Cc: caml-list

On Mon, 2004-05-17 at 16:09, Eric Stokes wrote:
> Hello All,
> 	As the director of a shop who is using Ocaml to do real work (yes I 
> know, research is more important :P),
> I would really like to be able to build a shared library out of code 
> that I have written in Ocaml,
> and link other Ocaml programs to it. 

You and me both. The Ocaml team is aware of this desire.
At least one obstacle appears to be that the x86 backend
does not generate relocatable code. I'm curious if the
'C' backend could be used for this purpose though??

> There are practical reasons for 
> wanting to do this, I write and maintain
> some rather large systems written in Ocaml. Currently, whenever I 
> update a library (not changing its interface),
> I need to recompile and reinstall the entire system. These problems I 
> can live with for now.

I cannot. My system has a fundamental requirement for self-extension
and high performance. Extensibility is possible with bytecode
but not native code.

> 	But... I also have "delusions" (or so I'm told). IMHO, Ocaml is fast 
> enough, and has enough good libraries
> in existence to create a climate where Ocaml software will slowly start 
> replacing software written in C.

	Yeah, you're deluded if you think performance and
quality have much to do with this .. just think about Java ..

>  I think that Ocaml is a very good 
> language (understatement) for building
> large reliable systems, and I would hate to see its growth be hampered 
> artificially by its lack of shared
> libraries.

	See Felix. I started off *mandating* the target
as a shared library. Static linkage was only added recently.
To a large extent this whole project is inspired by the inability
of Ocaml to build shared libraries and interface easily to C.

-- 
John Skaller, mailto:skaller@users.sf.net
voice: 061-2-9660-0850, 
snail: PO BOX 401 Glebe NSW 2037 Australia
Checkout the Felix programming language http://felix.sf.net



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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Caml-list] Ocaml shared libraries
  2004-05-17  6:09 [Caml-list] Ocaml shared libraries Eric Stokes
  2004-05-17  7:46 ` skaller
@ 2004-05-17  8:22 ` Xavier Leroy
  2004-05-17 11:12   ` Michal Moskal
                     ` (2 more replies)
  1 sibling, 3 replies; 7+ messages in thread
From: Xavier Leroy @ 2004-05-17  8:22 UTC (permalink / raw)
  To: Eric Stokes; +Cc: caml-list

> 	As the director of a shop who is using Ocaml to do real work
> (yes I know, research is more important :P), I would really like to
> be able to build a shared library out of code that I have written in
> Ocaml, and link other Ocaml programs to it. [...]

I'm not sure which aspect of shared libraries you're interested in.
Unix shared libraries or Windows DLL offer the following features:
1- Smaller executables through code sharing.
2- Upgradeability: upgrade the shared library and (with luck) all
   executables that refer to it are automatically upgraded.
3- Dynamic loading of code in a running program.

There is however one big difference between C and OCaml, which is that
OCaml has type-safe linking.  The linker checks that clients of a
library were typed and compiled against the interface and cross-module
optimization information of the library.  

As it is done today, this check is rather brittle: any change in the
library interface or optimization information cause it to fail and
require a recompile of the client modules.

For static linking, this is not too bad: a package management
framework such as GODI can automate the recompilation of clients when
the library changes.  More importantly, you need to bring things in
sync only when you're rebuilding your client: already compiled
programs continue to work, since they embark their own version of the
library.

With shared libraries, any update on the shared lib would immediately
invalidate all executables that use it.  This is the well-known "DLL
hell" problem, just exacerbated by the very strict consistency
checkings done by the OCaml linker.  So, feature 2- above is really
not applicable to OCaml as it is today, and static linking is much
more usable than dynamic linking of shared libs.

As for feature 1- (smaller executables), I'm not convinced this is a
major issue.  I'm old enough to remember the introduction of shared
libraries in the Unix world (in SunOS 4).  At that time, the saving in
disk space was significant: disks were small (a complete SunOS 4
install could fit in as little as 100 Mb) and the size of executables
wasn't negligible compared to the size of data files.  Times have
changed, however: disk space has increased much faster than executable
sizes, and the disks on a modern machine are mostly filled with data
(think MP3 and movies :-), making executable sizes a non-issue.

Feature 3- (dynamic code loading) is already available in bytecode
through the Dynlink API.  I understand there's a demand for having it
in native-code as well, and that might be possible without too much fuss,
at least on selected operating systems.

So, in summary: shared libraries are simply too fragile, especially
when combined with OCaml's type-safe linking.  This is such a big
problem that the drawbacks of static linking (bigger executables)
appear very minor in comparison.

- Xavier Leroy

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Caml-list] Ocaml shared libraries
  2004-05-17  8:22 ` Xavier Leroy
@ 2004-05-17 11:12   ` Michal Moskal
  2004-05-17 13:45   ` John Goerzen
  2004-05-17 14:27   ` Eric Stokes
  2 siblings, 0 replies; 7+ messages in thread
From: Michal Moskal @ 2004-05-17 11:12 UTC (permalink / raw)
  To: caml-list

On Mon, May 17, 2004 at 10:22:54AM +0200, Xavier Leroy wrote:
> As for feature 1- (smaller executables), I'm not convinced this is a
> major issue.  I'm old enough to remember the introduction of shared
> libraries in the Unix world (in SunOS 4).  At that time, the saving in
> disk space was significant: disks were small (a complete SunOS 4
> install could fit in as little as 100 Mb) and the size of executables
> wasn't negligible compared to the size of data files.  Times have
> changed, however: disk space has increased much faster than executable
> sizes, and the disks on a modern machine are mostly filled with data
> (think MP3 and movies :-), making executable sizes a non-issue.

Disk is one thing. Memory is another. Under unix each shared library
resides in memory once.  Of course each executable is also loaded once,
so this is only an issue when there are multiple ocaml programs (different
executables) run simultaneously. Nevertheless this is sometimes the
case.

-- 
: Michal Moskal :: http://www.kernel.pl/~malekith :: GCS !tv h e>+++ b++
: When in doubt, use brute force. -- Ken Thompson :: UL++++$ C++ E--- a?

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Caml-list] Ocaml shared libraries
  2004-05-17  8:22 ` Xavier Leroy
  2004-05-17 11:12   ` Michal Moskal
@ 2004-05-17 13:45   ` John Goerzen
  2004-05-17 14:27   ` Eric Stokes
  2 siblings, 0 replies; 7+ messages in thread
From: John Goerzen @ 2004-05-17 13:45 UTC (permalink / raw)
  To: Xavier Leroy; +Cc: Eric Stokes, caml-list

On Mon, May 17, 2004 at 10:22:54AM +0200, Xavier Leroy wrote:
> With shared libraries, any update on the shared lib would immediately
> invalidate all executables that use it.  This is the well-known "DLL
> hell" problem, just exacerbated by the very strict consistency
> checkings done by the OCaml linker.  So, feature 2- above is really
> not applicable to OCaml as it is today, and static linking is much
> more usable than dynamic linking of shared libs.

I'm not quite sure that conclusion follows from your premise.

Let's say we have an OCaml executable and needs to link with certain
OCaml libraries.  Couldn't the dynamic loader embedded in that
executable, whatever form it may take, check with the libraries it's
dynamically linking with to make sure the interfaces remain the same?

> As for feature 1- (smaller executables), I'm not convinced this is a
> major issue.  I'm old enough to remember the introduction of shared
> libraries in the Unix world (in SunOS 4).  At that time, the saving in
> disk space was significant: disks were small (a complete SunOS 4
> install could fit in as little as 100 Mb) and the size of executables
> wasn't negligible compared to the size of data files.  Times have
> changed, however: disk space has increased much faster than executable
> sizes, and the disks on a modern machine are mostly filled with data
> (think MP3 and movies :-), making executable sizes a non-issue.

There are plenty of situations where this is not the case.  For
instance:

1. Handheld devices (think Sharp Zaurus, re-flashed iPAQ, or other
   units that run Linux)

2. Other embedded systems

3. Limited-storage systems (thin clients, etc)

4. Limited-RAM systems

A little more on #4... on *nix platforms, at least, the code of a .so is
usually shared among all processes that use it.

> Feature 3- (dynamic code loading) is already available in bytecode
> through the Dynlink API.  I understand there's a demand for having it
> in native-code as well, and that might be possible without too much fuss,
> at least on selected operating systems.

It exists, but it's not exactly to the point where you can use it to
load in any arbitrary library; specifically, you can only load libraries
that are specifically written to register their functions with your app
somehow.

-- John

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Caml-list] Ocaml shared libraries
  2004-05-17  8:22 ` Xavier Leroy
  2004-05-17 11:12   ` Michal Moskal
  2004-05-17 13:45   ` John Goerzen
@ 2004-05-17 14:27   ` Eric Stokes
       [not found]     ` <20040517.165146.60944531.andrieu@ijm.jussieu.fr>
  2 siblings, 1 reply; 7+ messages in thread
From: Eric Stokes @ 2004-05-17 14:27 UTC (permalink / raw)
  To: Xavier Leroy; +Cc: caml-list

Yes, I realized when I started this thread that all of these issues 
would arise. I know
it is a nasty problem to do type safe shared libraries. The feature I 
am most interested
in is #2, upgradeability, #3 is a close second. So building a less 
brittle but still type safe linker
would be necessary. My question really is, do you all have any interest 
in doing so. It
seems like it would be an interesting project with practical benefits.

On May 17, 2004, at 1:22 AM, Xavier Leroy wrote:

>> 	As the director of a shop who is using Ocaml to do real work
>> (yes I know, research is more important :P), I would really like to
>> be able to build a shared library out of code that I have written in
>> Ocaml, and link other Ocaml programs to it. [...]
>
> I'm not sure which aspect of shared libraries you're interested in.
> Unix shared libraries or Windows DLL offer the following features:
> 1- Smaller executables through code sharing.
> 2- Upgradeability: upgrade the shared library and (with luck) all
>    executables that refer to it are automatically upgraded.
> 3- Dynamic loading of code in a running program.
>
> There is however one big difference between C and OCaml, which is that
> OCaml has type-safe linking.  The linker checks that clients of a
> library were typed and compiled against the interface and cross-module
> optimization information of the library.
>
> As it is done today, this check is rather brittle: any change in the
> library interface or optimization information cause it to fail and
> require a recompile of the client modules.
>
> For static linking, this is not too bad: a package management
> framework such as GODI can automate the recompilation of clients when
> the library changes.  More importantly, you need to bring things in
> sync only when you're rebuilding your client: already compiled
> programs continue to work, since they embark their own version of the
> library.
>
> With shared libraries, any update on the shared lib would immediately
> invalidate all executables that use it.  This is the well-known "DLL
> hell" problem, just exacerbated by the very strict consistency
> checkings done by the OCaml linker.  So, feature 2- above is really
> not applicable to OCaml as it is today, and static linking is much
> more usable than dynamic linking of shared libs.
>
> As for feature 1- (smaller executables), I'm not convinced this is a
> major issue.  I'm old enough to remember the introduction of shared
> libraries in the Unix world (in SunOS 4).  At that time, the saving in
> disk space was significant: disks were small (a complete SunOS 4
> install could fit in as little as 100 Mb) and the size of executables
> wasn't negligible compared to the size of data files.  Times have
> changed, however: disk space has increased much faster than executable
> sizes, and the disks on a modern machine are mostly filled with data
> (think MP3 and movies :-), making executable sizes a non-issue.
>
> Feature 3- (dynamic code loading) is already available in bytecode
> through the Dynlink API.  I understand there's a demand for having it
> in native-code as well, and that might be possible without too much 
> fuss,
> at least on selected operating systems.
>
> So, in summary: shared libraries are simply too fragile, especially
> when combined with OCaml's type-safe linking.  This is such a big
> problem that the drawbacks of static linking (bigger executables)
> appear very minor in comparison.
>
> - Xavier Leroy
>
> -------------------
> 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
>

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Caml-list] Ocaml shared libraries
       [not found]     ` <20040517.165146.60944531.andrieu@ijm.jussieu.fr>
@ 2004-05-17 15:22       ` Eric Stokes
  0 siblings, 0 replies; 7+ messages in thread
From: Eric Stokes @ 2004-05-17 15:22 UTC (permalink / raw)
  To: Olivier Andrieu; +Cc: caml-list

Hah, I scoured the list archives for weeks looking for just that 
message :P,
and I didn't find it. I guess my search skills are unl33t. Anyway, that 
answers
a lot of my questions. It seems the trade offs do not favor shared 
libraries at all.

On May 17, 2004, at 7:51 AM, Olivier Andrieu wrote:

>  Eric Stokes [Mon, 17 May 2004]:
>> Yes, I realized when I started this thread that all of these issues
>> would arise. I know it is a nasty problem to do type safe shared
>> libraries. The feature I am most interested in is #2,
>> upgradeability, #3 is a close second. So building a less brittle
>> but still type safe linker would be necessary. My question really
>> is, do you all have any interest in doing so. It seems like it
>> would be an interesting project with practical benefits.
>
> Hi,
>
> these questions have already been raised on the list (it does not mean
> they're not worthy of being mentionned again :), so you may be
> interested by this in-depth reply from Xavier:
>
>   http://tinyurl.com/2ywsu
>
> -- 
>    Olivier

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2004-05-17 15:22 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-17  6:09 [Caml-list] Ocaml shared libraries Eric Stokes
2004-05-17  7:46 ` skaller
2004-05-17  8:22 ` Xavier Leroy
2004-05-17 11:12   ` Michal Moskal
2004-05-17 13:45   ` John Goerzen
2004-05-17 14:27   ` Eric Stokes
     [not found]     ` <20040517.165146.60944531.andrieu@ijm.jussieu.fr>
2004-05-17 15:22       ` Eric Stokes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).