caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
@ 2014-02-05 17:31 Fabrice Le Fessant
  2014-02-06  9:43 ` Romain Bardou
  2014-02-06 10:53 ` Pierre-Étienne Meunier
  0 siblings, 2 replies; 11+ messages in thread
From: Fabrice Le Fessant @ 2014-02-05 17:31 UTC (permalink / raw)
  To: Ocaml Mailing List

Hi,

  Here is the link to OCamlPro's report on its activities in January
2014 on OCaml:

http://www.ocamlpro.com/blog/2014/02/05/monthly-2014-01.html

--Fabrice
-- 
Fabrice LE FESSANT
Scientific Advisor, OCamlPro SAS

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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-05 17:31 [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014 Fabrice Le Fessant
@ 2014-02-06  9:43 ` Romain Bardou
  2014-02-06 10:25   ` Malcolm Matalka
  2014-02-06 11:31   ` Benjamin Canou
  2014-02-06 10:53 ` Pierre-Étienne Meunier
  1 sibling, 2 replies; 11+ messages in thread
From: Romain Bardou @ 2014-02-06  9:43 UTC (permalink / raw)
  To: Fabrice Le Fessant; +Cc: Ocaml Mailing List

On 05/02/2014 18:31, Fabrice Le Fessant wrote:
> Hi,
> 
>   Here is the link to OCamlPro's report on its activities in January
> 2014 on OCaml:
> 
> http://www.ocamlpro.com/blog/2014/02/05/monthly-2014-01.html
> 
> --Fabrice
> 

Interesting read.

Regarding OCamlRes...

- It like the idea. I already have one use case: images for my GTK icons.

- There is no .mli in your src directory, it makes your code less
readable (even empty .mli files are interesting, they tell the reader
that the module is the main module).

- Because of the above I was not able to find out what ocplib-ocamlres
provided.

- Maybe this is handled by ocplib-ocamlres, but it would be nice if
there was a way to include resources in the executable at first, and
then, if the project becomes bigger, have a way to externalize (some of)
those resources without changing the code. So we would have some
function such as:

  val load_resource: string -> string

taking the resource path (e.g. "res/a/x/test.int") and returning the
contents of the file, either by actually reading an external file, or
just by returning a string which was included at compile-time. It could
be as simple as:

let load_resource path =
  try
    Hashtbl.find included_resources path
  with Not_found ->
    let ch = open_in path in
    ...

where included_resources is a hash table filled by ocp-ocamlres. (I
don't think it is very interesting to keep the directory hierarchy, but
maybe it is for some use cases.)

- I would probably write a file containing the list of resource files I
want to include (one per line), and in my build system, add a rule
saying how to obtain an .ml file from it using ocp-ocamlres. It would
protect the user from including trash such as Emacs autosaves (~ files —
although mines are in a different directory :) ) or Windows Thumbs.db
files or whatever. You can't be sure what's inside your "res" directory!
Maybe your tool could read such a file itself to make it easier and more
unified.

Cheers,

-- 
Romain Bardou

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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-06  9:43 ` Romain Bardou
@ 2014-02-06 10:25   ` Malcolm Matalka
  2014-02-06 10:57     ` Anil Madhavapeddy
  2014-02-06 11:31   ` Benjamin Canou
  1 sibling, 1 reply; 11+ messages in thread
From: Malcolm Matalka @ 2014-02-06 10:25 UTC (permalink / raw)
  To: Romain Bardou; +Cc: Fabrice Le Fessant, Ocaml Mailing List

I haven't use either, but what is the important differences between
crunch and ocamlres?

Romain Bardou <romain.bardou@inria.fr> writes:

> On 05/02/2014 18:31, Fabrice Le Fessant wrote:
>> Hi,
>> 
>>   Here is the link to OCamlPro's report on its activities in January
>> 2014 on OCaml:
>> 
>> http://www.ocamlpro.com/blog/2014/02/05/monthly-2014-01.html
>> 
>> --Fabrice
>> 
>
> Interesting read.
>
> Regarding OCamlRes...
>
> - It like the idea. I already have one use case: images for my GTK icons.
>
> - There is no .mli in your src directory, it makes your code less
> readable (even empty .mli files are interesting, they tell the reader
> that the module is the main module).
>
> - Because of the above I was not able to find out what ocplib-ocamlres
> provided.
>
> - Maybe this is handled by ocplib-ocamlres, but it would be nice if
> there was a way to include resources in the executable at first, and
> then, if the project becomes bigger, have a way to externalize (some of)
> those resources without changing the code. So we would have some
> function such as:
>
>   val load_resource: string -> string
>
> taking the resource path (e.g. "res/a/x/test.int") and returning the
> contents of the file, either by actually reading an external file, or
> just by returning a string which was included at compile-time. It could
> be as simple as:
>
> let load_resource path =
>   try
>     Hashtbl.find included_resources path
>   with Not_found ->
>     let ch = open_in path in
>     ...
>
> where included_resources is a hash table filled by ocp-ocamlres. (I
> don't think it is very interesting to keep the directory hierarchy, but
> maybe it is for some use cases.)
>
> - I would probably write a file containing the list of resource files I
> want to include (one per line), and in my build system, add a rule
> saying how to obtain an .ml file from it using ocp-ocamlres. It would
> protect the user from including trash such as Emacs autosaves (~ files —
> although mines are in a different directory :) ) or Windows Thumbs.db
> files or whatever. You can't be sure what's inside your "res" directory!
> Maybe your tool could read such a file itself to make it easier and more
> unified.
>
> Cheers,
>
> -- 
> Romain Bardou

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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-05 17:31 [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014 Fabrice Le Fessant
  2014-02-06  9:43 ` Romain Bardou
@ 2014-02-06 10:53 ` Pierre-Étienne Meunier
  2014-02-07  9:15   ` Alain Frisch
  1 sibling, 1 reply; 11+ messages in thread
From: Pierre-Étienne Meunier @ 2014-02-06 10:53 UTC (permalink / raw)
  To: Fabrice Le Fessant; +Cc: Ocaml Mailing List

Thanks OCamlPro for making things move forward in the ocaml ecosystem!

However, what is the difference between new backends, and using llvm?
If it results in a clear, well-documented API for the ocaml compiler, that allows to write things like js_of_ocaml as a standalone executable linked with the “Ocamlc API”, I see why it is cool.

Pierre-Étienne Meunier


Em 05/02/2014, à(s) 18:31, Fabrice Le Fessant <fabrice.le_fessant@ocamlpro.com> escreveu:

> Hi,
> 
>  Here is the link to OCamlPro's report on its activities in January
> 2014 on OCaml:
> 
> http://www.ocamlpro.com/blog/2014/02/05/monthly-2014-01.html
> 
> --Fabrice
> -- 
> Fabrice LE FESSANT
> Scientific Advisor, OCamlPro SAS
> 
> -- 
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs


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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-06 10:25   ` Malcolm Matalka
@ 2014-02-06 10:57     ` Anil Madhavapeddy
  0 siblings, 0 replies; 11+ messages in thread
From: Anil Madhavapeddy @ 2014-02-06 10:57 UTC (permalink / raw)
  To: Malcolm Matalka; +Cc: Romain Bardou, Fabrice Le Fessant, Ocaml Mailing List

OCamlRes is a much more principled library than crunch -- which
just prettyprints a giant pattern match of strings from a
filesystem tree.

One differentiator of crunch is that it exposes a more system-like
interface, to match the other "real" backends in Mirage (i.e. a
Lwt_cstruct iterator based on Bigarrays, rather than a string).

I have no problem migrating to ocplib-res eventually, except for
a query I've raised on their bugtracker about the licensing:
https://github.com/OCamlPro/ocp-ocamlres/issues/2

best,
Anil

On 6 Feb 2014, at 10:25, Malcolm Matalka <mmatalka@gmail.com> wrote:

> I haven't use either, but what is the important differences between
> crunch and ocamlres?
> 
> Romain Bardou <romain.bardou@inria.fr> writes:
> 
>> On 05/02/2014 18:31, Fabrice Le Fessant wrote:
>>> Hi,
>>> 
>>>  Here is the link to OCamlPro's report on its activities in January
>>> 2014 on OCaml:
>>> 
>>> http://www.ocamlpro.com/blog/2014/02/05/monthly-2014-01.html
>>> 
>>> --Fabrice
>>> 
>> 
>> Interesting read.
>> 
>> Regarding OCamlRes...
>> 
>> - It like the idea. I already have one use case: images for my GTK icons.
>> 
>> - There is no .mli in your src directory, it makes your code less
>> readable (even empty .mli files are interesting, they tell the reader
>> that the module is the main module).
>> 
>> - Because of the above I was not able to find out what ocplib-ocamlres
>> provided.
>> 
>> - Maybe this is handled by ocplib-ocamlres, but it would be nice if
>> there was a way to include resources in the executable at first, and
>> then, if the project becomes bigger, have a way to externalize (some of)
>> those resources without changing the code. So we would have some
>> function such as:
>> 
>>  val load_resource: string -> string
>> 
>> taking the resource path (e.g. "res/a/x/test.int") and returning the
>> contents of the file, either by actually reading an external file, or
>> just by returning a string which was included at compile-time. It could
>> be as simple as:
>> 
>> let load_resource path =
>>  try
>>    Hashtbl.find included_resources path
>>  with Not_found ->
>>    let ch = open_in path in
>>    ...
>> 
>> where included_resources is a hash table filled by ocp-ocamlres. (I
>> don't think it is very interesting to keep the directory hierarchy, but
>> maybe it is for some use cases.)
>> 
>> - I would probably write a file containing the list of resource files I
>> want to include (one per line), and in my build system, add a rule
>> saying how to obtain an .ml file from it using ocp-ocamlres. It would
>> protect the user from including trash such as Emacs autosaves (~ files —
>> although mines are in a different directory :) ) or Windows Thumbs.db
>> files or whatever. You can't be sure what's inside your "res" directory!
>> Maybe your tool could read such a file itself to make it easier and more
>> unified.
>> 
>> Cheers,
>> 
>> -- 
>> Romain Bardou
> 
> -- 
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs


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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-06  9:43 ` Romain Bardou
  2014-02-06 10:25   ` Malcolm Matalka
@ 2014-02-06 11:31   ` Benjamin Canou
  2014-02-06 13:06     ` Daniel Bünzli
  1 sibling, 1 reply; 11+ messages in thread
From: Benjamin Canou @ 2014-02-06 11:31 UTC (permalink / raw)
  To: caml-list

   Hi Romain,

Thanks for your reactive input. OCamlRes is still in design stage (cf. 
the version number) and I published it for gathering potential usages 
and users so it is very welcome. About the lack of mli, the 
implementation is actually ocamldoc'ed, so a `make doc` and a good 
browser should make for a reasonable substitute until the interface is 
well frozen in an mli.

For your filesystem overlay use case, this can already be done with a :

let load_resource base rpath =
   try
     OCamlRes.(Res.find Path.(of_string rpath) MyResources.root)
   with Not_found ->
     let fp = open_in (base ^ rpath) in
     (* read fp *)

But I agree that it could be generated automatically in a specific format.

Your idea of a master file makes sense. I'm more in favor of polishing the CLI for filtering files, but I think both approaches can coexist.

I will put a todo / ideas list on github and I invite you (as well as everyone else) to contribute :)

Cheers,
   Benjamin.

Le 06/02/2014 10:43, Romain Bardou a écrit :
> On 05/02/2014 18:31, Fabrice Le Fessant wrote:
>> Hi,
>>
>>    Here is the link to OCamlPro's report on its activities in January
>> 2014 on OCaml:
>>
>> http://www.ocamlpro.com/blog/2014/02/05/monthly-2014-01.html
>>
>> --Fabrice
>>
> Interesting read.
>
> Regarding OCamlRes...
>
> - It like the idea. I already have one use case: images for my GTK icons.
>
> - There is no .mli in your src directory, it makes your code less
> readable (even empty .mli files are interesting, they tell the reader
> that the module is the main module).
>
> - Because of the above I was not able to find out what ocplib-ocamlres
> provided.
>
> - Maybe this is handled by ocplib-ocamlres, but it would be nice if
> there was a way to include resources in the executable at first, and
> then, if the project becomes bigger, have a way to externalize (some of)
> those resources without changing the code. So we would have some
> function such as:
>
>    val load_resource: string -> string
>
> taking the resource path (e.g. "res/a/x/test.int") and returning the
> contents of the file, either by actually reading an external file, or
> just by returning a string which was included at compile-time. It could
> be as simple as:
>
> let load_resource path =
>    try
>      Hashtbl.find included_resources path
>    with Not_found ->
>      let ch = open_in path in
>      ...
>
> where included_resources is a hash table filled by ocp-ocamlres. (I
> don't think it is very interesting to keep the directory hierarchy, but
> maybe it is for some use cases.)
>
> - I would probably write a file containing the list of resource files I
> want to include (one per line), and in my build system, add a rule
> saying how to obtain an .ml file from it using ocp-ocamlres. It would
> protect the user from including trash such as Emacs autosaves (~ files —
> although mines are in a different directory :) ) or Windows Thumbs.db
> files or whatever. You can't be sure what's inside your "res" directory!
> Maybe your tool could read such a file itself to make it easier and more
> unified.
>
> Cheers,
>


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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-06 11:31   ` Benjamin Canou
@ 2014-02-06 13:06     ` Daniel Bünzli
  2014-02-06 16:07       ` Benjamin Canou
  0 siblings, 1 reply; 11+ messages in thread
From: Daniel Bünzli @ 2014-02-06 13:06 UTC (permalink / raw)
  To: Benjamin Canou; +Cc: caml-list

Le jeudi, 6 février 2014 à 12:31, Benjamin Canou a écrit :
> Thanks for your reactive input. OCamlRes is still in design stage (cf.
> the version number) and I published it for gathering potential usages  
> and users so it is very welcome. About the lack of mli, the  
> implementation is actually ocamldoc'ed, so a `make doc` and a good  
> browser should make for a reasonable substitute until the interface is  
> well frozen in an mli.

The problem of figuring out which functions in the ml are part of the interface and which are not is still solved by this approach (not to mention that you may expose representations you'd like to hide later). Besides you don't get any feel on how the interface is organized type-wise which is one of the quickest way to evaluate the brokenness or beauty of an api.  

As soon as I see a lack of mli files in a published package, I disregard. I equate it with lack of design.  

Best,

Daniel



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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-06 13:06     ` Daniel Bünzli
@ 2014-02-06 16:07       ` Benjamin Canou
  2014-02-07  1:36         ` Benjamin Canou
  0 siblings, 1 reply; 11+ messages in thread
From: Benjamin Canou @ 2014-02-06 16:07 UTC (permalink / raw)
  To: Daniel Bünzli; +Cc: caml-list

Le 06/02/2014 14:06, Daniel Bünzli a écrit :
> As soon as I see a lack of mli files in a published package, I disregard. I equate it with lack of design.
Well, I'm very, very sorry that I disappointed you, my lord.
But do not be worried, I shall compose an mli when comes the time, for I 
would cherish your blessing upon my modest package.

Cheers,

   Benjamin.

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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-06 16:07       ` Benjamin Canou
@ 2014-02-07  1:36         ` Benjamin Canou
  2014-02-07 10:48           ` Daniel Bünzli
  0 siblings, 1 reply; 11+ messages in thread
From: Benjamin Canou @ 2014-02-07  1:36 UTC (permalink / raw)
  To: Daniel Bünzli; +Cc: caml-list

   Dear all,

It seems that my faux olde english is quite poor, and that my message 
reads as an angry attack at Daniel for some people. Of course it is not, 
and Daniel, I apologize if you took it this way too. I'll treat you to a 
pint next time we see each other. I just wanted to react to your quite 
justified criticism, but since I found your tone a bit harsh, I chose to 
reply with a bad joke tone in return. My not so good english and the 
e-mail medium seem to have betrayed me.

So to clarify things, this is not a release announce, I thought that the 
0.1 version number would make it clear, but here again, my mistake. Of 
course, the proper release will include a documented interface. But for 
now, there is no well documented public interface yet, on purpose. The 
library is not frozen because it is still in design stage, and I am not 
sure where to place the abstraction barrier, so I don't want anyone to 
take an interface as granted. I made an early distribution so that my 
blog entry could be backed by something tangible and to collect 
potential users and remarks, as the ones of Romain. In this context, I 
just gave a hint to Romain as how he could hack a bit, in absence of the 
mlis he was searching for.

   Benjamin.

On 06/02/2014 17:07, Benjamin Canou wrote:
> Le 06/02/2014 14:06, Daniel Bünzli a écrit :
>> As soon as I see a lack of mli files in a published package, I 
>> disregard. I equate it with lack of design.
> Well, I'm very, very sorry that I disappointed you, my lord.
> But do not be worried, I shall compose an mli when comes the time, for 
> I would cherish your blessing upon my modest package.
>
> Cheers,
>
>   Benjamin.


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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-06 10:53 ` Pierre-Étienne Meunier
@ 2014-02-07  9:15   ` Alain Frisch
  0 siblings, 0 replies; 11+ messages in thread
From: Alain Frisch @ 2014-02-07  9:15 UTC (permalink / raw)
  To: Pierre-Étienne Meunier, Fabrice Le Fessant; +Cc: Ocaml Mailing List

On 02/06/2014 11:53 AM, Pierre-Étienne Meunier wrote:
> However, what is the difference between new backends, and using llvm?

Since this work is done by OCamlPro on behalf of LexiFi, let me answer 
this one. This current project is much less ambitious than switching to 
llvm.

Some context: ocamlopt generates machine code by producing some textual 
assembly code and calling an external assembler (gas or masm) to produce 
object files.  The assembly code is produced directly from an 
higher-level intermediate representation defined in 
asmcomp/linearize.mli (which represents a list of pseudo-instructions). 
  The mapping from this representation to assembly language contains 
some logic such as picking concrete opcodes (including special cases 
such as a simplified jump for a self tail-call), maintaining the current 
stack offset, taking into account various compilation mode (debug mode, 
fast/compact mode, pic mode), expanding complex pseudo-instructions into 
several actual assembly opcodes (e.g. to compile switches using jump 
tables), sharing floating point literals, etc.

Since two concrete syntaxes of assembly languages (gas/masm) have to be 
supported, this mapping has to be implemented twice for each CPU 
(amd64/emit.mlp + amd64/emit_nt.mlp, and same for i386/), which adds 
burden when this code evolves (and it still does quite often).

So the project is to add an extra intermediate language between 
linearize.mli and textual assembly language.  This new representation 
can be seen as a symbolic representation of machine code or an AST of 
the generated assembly language.  This will allow to share most code 
from emit.mlp and emit_nt.mlp.  Two "printers" from this new 
representation to source assembly language will be implemented.  In 
addition to reducing the maintenance overhead and reducing the risk of 
having the Windows port lagging behind, this will bring a few more 
advantages:

  - It will be quite easy to have a third "printer", which generates 
direct binary machine code instead of source assembly language.  LexiFi 
already uses such binary backends for x86 and amd64, which (together 
with a COFF object emitter) make it possible to have a version of 
ocamlopt under Windows that does not require an external assembler. 
(And this allows our end-user application to compile source OCaml code 
and dynlink it on the fly, without forcing our customers to install any 
toolchain.)  The new project will greatly facilitate the maintenance of 
these direct binary backends (and this is actually LexiFi's primary 
reason for funding this project).  The same backends would actually be 
of interest to other projects, such as the native toplevel or MetaOCaml.

  - Some low-level optimizations could be performed on the new 
representation (typically, peep-hole optimizations).

  - The project will probably make it easier to maintain or experiment 
with new variants of the backends (I'm thinking about the ia32 port from 
the sse2 branch, i.e. a variant of x86 using sse2 instructions for 
floating point arithmetic instead of x87 instructions).



Alain

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

* Re: [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014
  2014-02-07  1:36         ` Benjamin Canou
@ 2014-02-07 10:48           ` Daniel Bünzli
  0 siblings, 0 replies; 11+ messages in thread
From: Daniel Bünzli @ 2014-02-07 10:48 UTC (permalink / raw)
  To: Benjamin Canou; +Cc: caml-list



Le vendredi, 7 février 2014 à 02:36, Benjamin Canou a écrit :

> It seems that my faux olde english is quite poor, and that my message
> reads as an angry attack at Daniel for some people.  

Actually it was not taken as such. I even found it mildly funny; it's true that the last comment of my earlier message was a little bit dry. But I'm already annoyed when people don't document their stuff, so I get even more annoyed if they don't write a mli file which is the primitivest form of documentation.  

Have a good day,  

Daniel



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

end of thread, other threads:[~2014-02-07 10:49 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-05 17:31 [Caml-list] OCamlPro Highlights: Dec 2013 & Jan 2014 Fabrice Le Fessant
2014-02-06  9:43 ` Romain Bardou
2014-02-06 10:25   ` Malcolm Matalka
2014-02-06 10:57     ` Anil Madhavapeddy
2014-02-06 11:31   ` Benjamin Canou
2014-02-06 13:06     ` Daniel Bünzli
2014-02-06 16:07       ` Benjamin Canou
2014-02-07  1:36         ` Benjamin Canou
2014-02-07 10:48           ` Daniel Bünzli
2014-02-06 10:53 ` Pierre-Étienne Meunier
2014-02-07  9:15   ` Alain Frisch

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