Re: [Caml-list] Embedding the ocaml runtime in a shared library on amd64/x86_64
On Wednesday 02 December 2009 23:37:51 Stefano Zacchiroli wrote: On Wed, Dec 02, 2009 at 04:51:16PM +, Richard Jones wrote: On Wed, Dec 02, 2009 at 01:33:11PM +0100, Joost Yervante Damad wrote: I think compiling with -fPIC by default on the amd64/x86_64 arch would be a good start to making it more usable for embedding. I think this is also a very good idea. Seconded. We went through this already with libcamlrun.a: http://caml.inria.fr/mantis/view.php?id=3866 Just to clarify a bit more for who did not follow that bug: what we did there was not precisely what Joost asked for (i.e. build libasmrun.a with -fPIC). Rather the patch offers two different libraries: libcamlrun.a (no -fPIC) and libcamlrun_shared.so (-fPIC). The reason was a performance penalty in using the -fPIC version. Reading up on this, I don't think using -fPIC on amd64 has a performance penalty since it has the %rip register. Also it appears that gcc by default uses indirect addressing via %rip in the generated asm. Both in Debian and Fedora package you now have both libraries. That said, I share Rich's suggestion: please file a bug (with patch would be even better :)), that enable building 2 different versions of libcamlrun, one built with -fPIC, the other as it is now. I'm first working out the details for a larger application to make sure that also works. I'll file a bug when I have a fully working solution. greetings, Joost Damad -- Joost Yervante Damad - http://damad.be/joost/ ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Random questions
Le Wed, 18 Nov 2009 11:59:08 +0100, Daniel Bünzli daniel.buen...@erratique.ch a écrit: I know little about PRGN and unfortunately in a lot of cases the functions in the Random module don't provide me the right interface. Could anybody tell me if the following functions preserve the quality of the underlying PRGN and/or if there's a better way to achieve that : (* preliminary function: negate_minus_1 : int - int : n |- -n-1 *) let negate_minus_1 = (lor) (-(max_int/2)-1) (* or inline the constant *) 1) Generate an arbitrary int let rint () = Random.bits () lor ((Random.bits () land 1) lsl 30) It seems ok to me even if this variant seems slightly more efficient, since we don't have to bother with making a single bit; note the use of the xor instead of the or, which keeps the probability of one bit to 1/2 (in your example, this probability was kept since one of the bit was forced to be 0): let rint () = (Random.bits () lsl 1) lxor (Random.bits ());; -or- let rint () = let r = Random.bits () in if Random.bool () then negate_minus_1 r (* or inline negate_minus_1 *) else r note these functions don't rely on the fact ints are on 31 bits if Random.bool is more efficient than Random.bits, the latter seems the best; to be benchmarked... 2) Generate an arbitrary int in [0;max] (bounds included) let random_uint ?(max = max_int) = if max 0 then invalid_arg negative max else if max = max_int then Random.bits else let bound = max + 1 in fun () - Random.int bound Seems correct. I don't know if use of exception is more efficient or not, it is to try: let random_uint ?(max = max_int) () = try if max = max_int then Random.bits () else Random.int (max + 1) with Invalid_argument Random.int - invalid_arg negative max 3) Generate an arbitrary int in [-max;max] (bounds included) let random_int ?(max = max_int) = if max 0 then invalid_arg negative max else if max = max_int then let rec aux () = let v = rint () in if v = min_int then aux () else v in aux else let bound = (2 * max) + 1 in if 0 bound bound max_int then fun () - -max + Random.int bound else let bound = Int32.add (Int32.mul 2l (Int32.of_int max)) 1l in let min = Int32.of_int (-max) in fun () - Int32.to_int (Int32.add min (Random.int32 bound)) I think it is better to use the bool trick; simpler and doesn't use Int32: let random_int ?(max = max_int) = if max 0 then invalid_arg negative max else if max = 0 then 0 else if Random.bool () then if max = max_int then Random.bits () else Random.int max else negate_minus_1 (Random.int (max - 1)) (* inline? *) 5) Generate an arbitrary float in [0;max] (bounds included) let after_one = 1. +. epsilon_float let random_ufloat ?(max = max_float) = if max 0. then invalid_arg negative max else fun () - (Random.float after_one) *. max This function is less interesting than Random.float: only less or as many as values as floats in [0.;1.] can be generated so you will miss many values only to be able to produce max (for example, you cannot 1+eps if you try random_ufloat ~max:2. ()) The best would be to have a succ function for floats 6) Generate an arbitrary float in [-max;max] (bounds included) let after_one = 1. +. epsilon_float let random_float ?(max = max_float) = if max 0. then invalid_arg negative max else fun () - (-1. +. (Random.float after_one) *. 2.) *. max same remark Thanks for your answers, Daniel ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs -- Cédric AUGER Univ Paris-Sud, Laboratoire LRI, UMR 8623, F-91405, Orsay ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Embedding the ocaml runtime in a shared library on amd64/x86_64
Joost Yervante Damad wrote: Reading up on this, I don't think using -fPIC on amd64 has a performance penalty since it has the %rip register. Also it appears that gcc by default uses indirect addressing via %rip in the generated asm. I did some benchmarks when switching the ocamlopt AMD64 code generator to generate PIC code by default (in order to support Dynlink on native code): the slowdown was indeed very small (in the order of a few percent for micro benchmarks). Modern processors seem very good for optimizing indirect calls. Alain ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Embedding the ocaml runtime in a shared library on amd64/x86_64
On Thu, Dec 03, 2009 at 11:56:59AM +0100, Joost Yervante Damad wrote: Reading up on this, I don't think using -fPIC on amd64 has a performance penalty since it has the %rip register. Also it appears that gcc by default uses indirect addressing via %rip in the generated asm. I duly notice that OCaml is not only compiler on modern processors. So, a solution that does not offer the non-fPIC solution might be more than appropriate on amd64 processors, but maybe not as much appropriate on other architectures (Debian, for instance, support about 10 other architectures in addition to amd64; even if we restrict to architecture having ocamlopt, there is more than plain amd64). Note: I haven't checked whether there is a difference on all such architectures for what concerns libasmrun, but there were difference for such archs for libcamlrun. Given the negligible cost (both in term of patch preparation and of solution complexity) of supporting the build of both kind of libraries, I don't see why we should simply switch to the -fPIC library, trashing the other. Thanks for your work on this! Cheers. -- Stefano Zacchiroli -o- PhD in Computer Science \ PostDoc @ Univ. Paris 7 z...@{upsilon.cc,pps.jussieu.fr,debian.org} -- http://upsilon.cc/zack/ Dietro un grande uomo c'è ..| . |. Et ne m'en veux pas si je te tutoie sempre uno zaino ...| ..: | Je dis tu à tous ceux que j'aime ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Random questions
Hello Cedric, Thanks for your comments. Comments on your comments. let rint () = (Random.bits () lsl 1) lxor (Random.bits ());; That was actually my first version. However I dropped it because I thought that generating a new random number by the interaction of the bits of two successive PRN could somehow change the underlying quality of the generator. Any thought ? if Random.bool is more efficient than Random.bits, the latter seems the best; to be benchmarked Random.bool is Random.bits () land 0 = 1. 2) Generate an arbitrary int in [0;max] (bounds included) let random_uint ?(max = max_int) = if max 0 then invalid_arg negative max else if max = max_int then Random.bits else let bound = max + 1 in fun () - Random.int bound Seems correct. I don't know if use of exception is more efficient or not, it is to try: let random_uint ?(max = max_int) () = try if max = max_int then Random.bits () else Random.int (max + 1) with Invalid_argument Random.int - invalid_arg negative max You lose the ability to partially apply random_uint with the max and avoid the if on each call. I think it is better to use the bool trick; simpler and doesn't use Int32: let random_int ?(max = max_int) = if max 0 then invalid_arg negative max else if max = 0 then 0 else if Random.bool () then if max = max_int then Random.bits () else Random.int max else negate_minus_1 (Random.int (max - 1)) (* inline? *) Yes, thanks. Your version can also be reordered to be partially applicable. It should also be noted that all our functions for [int]s don't work with the intended semantics on 64 bits platforms. 5) Generate an arbitrary float in [0;max] (bounds included) let after_one = 1. +. epsilon_float let random_ufloat ?(max = max_float) = if max 0. then invalid_arg negative max else fun () - (Random.float after_one) *. max This function is less interesting than Random.float: only less or as many as values as floats in [0.;1.] can be generated so you will miss many values only to be able to produce max (for example, you cannot 1+eps if you try random_ufloat ~max:2. ()) The point you make maybe valid but unfortunately that's also the case for Random.float as this is the way it is implemented (generate a number in [0;1[ and scale it). Best, Daniel ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Random questions
Le Thu, 03 Dec 2009 15:48:37 +0100, Daniel Bünzli daniel.buen...@erratique.ch a écrit: Hello Cedric, Thanks for your comments. Comments on your comments. let rint () = (Random.bits () lsl 1) lxor (Random.bits ());; That was actually my first version. However I dropped it because I thought that generating a new random number by the interaction of the bits of two successive PRN could somehow change the underlying quality of the generator. Any thought ? If it is the case, then the generation is of bad quality... If you can predict the generated values of such combinations, then it is easy to predict the values of the base generator; which is then a bad generator. (What I say is not valid for non reversible combination, such as or or and, even if it implies that generator is of poor quality too; and not valid for complex operation, such as emulating the generator itself). I am not expert in this domain, so it is better to directly ask on specialists. if Random.bool is more efficient than Random.bits, the latter seems the best; to be benchmarked Random.bool is Random.bits () land 0 = 1. ok, so this function is not as interessant as I thought. 2) Generate an arbitrary int in [0;max] (bounds included) let random_uint ?(max = max_int) = if max 0 then invalid_arg negative max else if max = max_int then Random.bits else let bound = max + 1 in fun () - Random.int bound Seems correct. I don't know if use of exception is more efficient or not, it is to try: let random_uint ?(max = max_int) () = try if max = max_int then Random.bits () else Random.int (max + 1) with Invalid_argument Random.int - invalid_arg negative max You lose the ability to partially apply random_uint with the max and avoid the if on each call. I think it is better to use the bool trick; simpler and doesn't use Int32: let random_int ?(max = max_int) = if max 0 then invalid_arg negative max else if max = 0 then 0 else if Random.bool () then if max = max_int then Random.bits () else Random.int max else negate_minus_1 (Random.int (max - 1)) (* inline? *) Yes, thanks. Your version can also be reordered to be partially applicable. It should also be noted that all our functions for [int]s don't work with the intended semantics on 64 bits platforms. I noticed it, but I may have forgot to write it down. 5) Generate an arbitrary float in [0;max] (bounds included) let after_one = 1. +. epsilon_float let random_ufloat ?(max = max_float) = if max 0. then invalid_arg negative max else fun () - (Random.float after_one) *. max This function is less interesting than Random.float: only less or as many as values as floats in [0.;1.] can be generated so you will miss many values only to be able to produce max (for example, you cannot 1+eps if you try random_ufloat ~max:2. ()) The point you make maybe valid but unfortunately that's also the case for Random.float as this is the way it is implemented (generate a number in [0;1[ and scale it). Ok, in fact it is reasonnable to do it since generating a random bit sequence (uniformly) won't lead to a uniform law on floats, taking the exposant in consideration, will result in more fine grained generator, but at a rather high cost. and between 0 and 1 you can use int generation. Furthermore, use of generated random floats is often done in [0;1] (as it is a probability). Best, Daniel ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs -- Cédric AUGER Univ Paris-Sud, Laboratoire LRI, UMR 8623, F-91405, Orsay ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
[Caml-list] Hoogle for Ocaml
Hi, Is there an equivalent to Haskell's Hoogle for Ocaml? Matthias. ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Hoogle for Ocaml
On Thu, Dec 03, 2009 at 04:08:08PM +, Matthias Görgens wrote: Is there an equivalent to Haskell's Hoogle for Ocaml? Not really .. I have been meaning for several years to implement something like *CPAN* for OCaml. CPAN is much more than what people here seem to think it is. Rich. -- Richard Jones Red Hat ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Hoogle for Ocaml
This might be what you're looking for: http://docs.camlcity.org/docs/index.html You can search through the files in all of the GODI packages. It's not just function names and type signatures so you might get more results than you want. Tom On Dec 3, 2009, at 5:08 PM, Matthias Görgens wrote: Hi, Is there an equivalent to Haskell's Hoogle for Ocaml? Matthias. ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Random questions
Le Thu, 03 Dec 2009 17:01:18 +0100, Damien Doligez damien.doli...@inria.fr a écrit: On 2009-12-03, at 12:00, AUGER wrote: (* preliminary function: negate_minus_1 : int - int : n |- -n-1 *) let negate_minus_1 = (lor) (-(max_int/2)-1) (* or inline the constant *) You probably mean this: let negate_minus_1 = (lxor) (-1);; -- Damien You are right ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs -- Cédric AUGER Univ Paris-Sud, Laboratoire LRI, UMR 8623, F-91405, Orsay ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Hoogle for Ocaml
Not really .. I have been meaning for several years to implement something like *CPAN* for OCaml. CPAN is much more than what people here seem to think it is. Out of curiosity, what's in CPAN that's not in GODI ? ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
What is CPAN? (was: Re: [Caml-list] Hoogle for Ocaml)
On Thu, Dec 03, 2009 at 05:51:00PM +0100, ri...@happyleptic.org wrote: Not really .. I have been meaning for several years to implement something like *CPAN* for OCaml. CPAN is much more than what people here seem to think it is. Out of curiosity, what's in CPAN that's not in GODI ? OK, I knew I'd have to answer this question :-) CPAN is: (1) A network of redundant mirrors which means you can always get the tarball you need, even when the original site is down: http://mirrors.geoexpat.com/cpan/authors/id/R/RW/RWMJ/ http://mirror.unej.ac.id/cpan/authors/id/R/RW/RWMJ/ http://mirrors.ucr.ac.cr/CPAN/authors/id/R/RW/RWMJ/ (more: http://search.cpan.org/mirror) (2) CPAN unpacks each tarball and makes the source and documentation available in a browsable way: http://search.cpan.org/~rwmj/Net-FTPServer-1.122/lib/Net/FTPServer.pm http://cpansearch.perl.org/src/RWMJ/Net-FTPServer-1.122/lib/Net/FTPServer.pm (3) An excellent search tool: http://search.cpan.org/search?query=IO%3A%3Astringymode=all (4) A central namespace registry for Perl modules. Once someone has the name 'Net::FTPServer', if you want to write an FTP server, you know you need to give it a different name. (5) A testing network. When you submit a new version of your module, it is picked up by automated and manual testers around the world, who build and test it on their systems (often oddball ones - eg. I get reports about it failing to build on SunOS and AIX). (6) A place where you can browse everything that Perl supports: http://www.cpan.org/modules/by-module/ http://www.cpan.org/modules/01modules.index.html Which is great advertising for Perl, because you can immediately see the breadth of available libraries for Perl. (7) A command line tool to download and install CPAN modules: http://search.cpan.org/~andk/CPAN-1.9402/lib/CPAN.pm#DESCRIPTION -- Note what CPAN is *not*: It's not a packaging system. Perl has its own packaging standard(s) (like cabal for Haskell), but CPAN doesn't care. It hosts source tarballs. It doesn't store binaries. It's not strongly centralized. Actually, it's very loose indeed. Although there is a central place where you upload modules, they are very loose about naming, content, licensing etc. (within limits of course). -- Out of curiosity, what's in CPAN that's not in GODI ? I think that Gerd Stolpmann has (to his credit) done a lot of the work that CPAN does, but I also think it should be on a firmer footing, mirrored more widely, the search tools should be linked from the OCaml home page, and not tied to building modules, but to hosting source tarballs. And more inclusive - it should include *every* source tarball -- as much OCaml source as possible. Rich. -- Richard Jones Red Hat ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Hoogle for Ocaml
This might be what you're looking for: http://docs.camlcity.org/docs/index.html Thanks. I'll try it. Does it support e.g. searching for (a-b) - [a] - [b] and spitting out List.map? Matthias. ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Hoogle for Ocaml
Am Donnerstag, den 03.12.2009, 18:45 + schrieb Matthias Görgens: This might be what you're looking for: http://docs.camlcity.org/docs/index.html Thanks. I'll try it. Does it support e.g. searching for (a-b) - [a] - [b] and spitting out List.map? There is no search for type expressions. Here is the query syntax: http://docs.camlcity.org/docs/syntax.html Gerd -- Gerd Stolpmann, Bad Nauheimer Str.3, 64289 Darmstadt,Germany g...@gerd-stolpmann.de http://www.gerd-stolpmann.de Phone: +49-6151-153855 Fax: +49-6151-997714 ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: What is CPAN? (was: Re: [Caml-list] Hoogle for Ocaml)
Am Donnerstag, den 03.12.2009, 18:00 + schrieb Richard Jones: On Thu, Dec 03, 2009 at 05:51:00PM +0100, ri...@happyleptic.org wrote: Not really .. I have been meaning for several years to implement something like *CPAN* for OCaml. CPAN is much more than what people here seem to think it is. Out of curiosity, what's in CPAN that's not in GODI ? OK, I knew I'd have to answer this question :-) CPAN is: (1) A network of redundant mirrors which means you can always get the tarball you need, even when the original site is down: http://mirrors.geoexpat.com/cpan/authors/id/R/RW/RWMJ/ http://mirror.unej.ac.id/cpan/authors/id/R/RW/RWMJ/ http://mirrors.ucr.ac.cr/CPAN/authors/id/R/RW/RWMJ/ (more: http://search.cpan.org/mirror) (2) CPAN unpacks each tarball and makes the source and documentation available in a browsable way: http://search.cpan.org/~rwmj/Net-FTPServer-1.122/lib/Net/FTPServer.pm http://cpansearch.perl.org/src/RWMJ/Net-FTPServer-1.122/lib/Net/FTPServer.pm (3) An excellent search tool: http://search.cpan.org/search?query=IO%3A%3Astringymode=all (4) A central namespace registry for Perl modules. Once someone has the name 'Net::FTPServer', if you want to write an FTP server, you know you need to give it a different name. (5) A testing network. When you submit a new version of your module, it is picked up by automated and manual testers around the world, who build and test it on their systems (often oddball ones - eg. I get reports about it failing to build on SunOS and AIX). (6) A place where you can browse everything that Perl supports: http://www.cpan.org/modules/by-module/ http://www.cpan.org/modules/01modules.index.html Which is great advertising for Perl, because you can immediately see the breadth of available libraries for Perl. (7) A command line tool to download and install CPAN modules: http://search.cpan.org/~andk/CPAN-1.9402/lib/CPAN.pm#DESCRIPTION -- Note what CPAN is *not*: It's not a packaging system. Perl has its own packaging standard(s) (like cabal for Haskell), but CPAN doesn't care. It hosts source tarballs. It doesn't store binaries. It's not strongly centralized. Actually, it's very loose indeed. Although there is a central place where you upload modules, they are very loose about naming, content, licensing etc. (within limits of course). -- Out of curiosity, what's in CPAN that's not in GODI ? I think that Gerd Stolpmann has (to his credit) done a lot of the work that CPAN does, but I also think it should be on a firmer footing, mirrored more widely, the search tools should be linked from the OCaml home page, and not tied to building modules, but to hosting source tarballs. And more inclusive - it should include *every* source tarball -- as much OCaml source as possible. Yes, nice goals - but hard to achieve if you only have limited resources. Also, don't forget that Perl attracted a lot of sysadmins, and for them it is a lot of fun to create something like CPAN. For the typical Ocaml developer it is scripting hell. Finally, there is the question of creating normative pressure so sources have some formal uniformity - normal for sysadmins, but a no-go for the creative ocamlists. I'd say it is a different project than GODI to make sources available, browsable and searchable. There's some overlap, though. Gerd -- Gerd Stolpmann, Bad Nauheimer Str.3, 64289 Darmstadt,Germany g...@gerd-stolpmann.de http://www.gerd-stolpmann.de Phone: +49-6151-153855 Fax: +49-6151-997714 ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: What is CPAN? (was: Re: [Caml-list] Hoogle for Ocaml)
(1) A network of redundant mirrors which means you can always get the tarball you need, even when the original site is down: If I understand correctly, GODI site does not store any of the source tarballs, but the makefiles download the sources directly from their respective home, does it ? Can't we use the MASTER_SITE_BACKUP make variables to have one or several backup sites ? If it's usefull I can try to setup a server to download every possible source tarballs and serve as such a site backup. But would it be usefull ? (2) CPAN unpacks each tarball and makes the source and documentation available in a browsable way: Why is it any better than something like that : http://docs.camlcity.org/docs/godipkg/3.10/godi-frontc/doc/godi-frontc/html/Ctoxml.html (3) An excellent search tool: Ok. (4) A central namespace registry for Perl modules. Once someone has the name 'Net::FTPServer', if you want to write an FTP server, you know you need to give it a different name. Ok ; unfortunately no such authority is required to name the few (compared to perl) ocaml libraries. (5) A testing network. (6) A place where you can browse everything that Perl supports: That would be nice to have in Godi as well. (7) A command line tool to download and install CPAN modules: I like godi_console (despite laking fancy colors :-), although I'd like a simpler command line tool to be available as well. ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
[Caml-list] Re: What is CPAN? (was: Re: Hoogle for Ocaml)
On 03-12-2009, ri...@happyleptic.org ri...@happyleptic.org wrote: (1) A network of redundant mirrors which means you can always get the tarball you need, even when the original site is down: If I understand correctly, GODI site does not store any of the source tarballs, but the makefiles download the sources directly from their respective home, does it ? Can't we use the MASTER_SITE_BACKUP make variables to have one or several backup sites ? If it's usefull I can try to setup a server to download every possible source tarballs and serve as such a site backup. But would it be usefull ? Yes of course. You can use ocamlcore.org website to do that. I have already a proof of concept using uscan + Debian watch file, to scan for new upstream on a weekly basis. Send me a private mail, if you want to proceed. Once the website is setup, we can use rsync to propagate it (ssh.ocamlcore.org has rsync installed). Everything is ready on *.ocamlcore.org, we just need some volunteer to do the work. Regards, Sylvain Le Gall ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs