caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Alain Frisch <alain@frisch.fr>
To: Bob Zhang <bobzhang1988@gmail.com>, caml-list-request@inria.fr
Cc: Caml List <caml-list@inria.fr>
Subject: Re: [Caml-list] improve omake [was One build system to rule them all]
Date: Fri, 19 Sep 2014 14:23:19 +0200	[thread overview]
Message-ID: <541C2037.5030303@frisch.fr> (raw)
In-Reply-To: <CANcqPu7vkkDKM8kU9hSen6xZACsvOQ3EPaPBXRQmF4XBvPT+Vw@mail.gmail.com>

Hi Hongbo,

It's great to hear that you'll put some energy into omake.  Despite some 
of its shortcomings, it's a great and mature tool, which is nice for 
both simple projects and large ones.  It certainly deserves some good 
treatment :-)   and it's actually the only build system developed around 
OCaml which put so much emphasis, right from the beginning, on good 
Windows support.

I'm not sure of the benefit of using OCaml to write custom rules (but 
why not).  The omake language could certainly be improved, both from a 
syntactic and from a semantic point of view.  (I think there was some 
project, in the latest development version, to introduce a syntax closer 
to programming languages, with un-prefixed variables and delimited 
string literals.)   Personally, I don't care too much about the syntax. 
  The most important problem I can see with the language is the 
difficulty to "pass" information from one part of the project to another 
one.  The only two ways I'm aware of to achieve that are:  (i) rely on 
the scoping rules, which in practice means a one-directional flow of 
data (typically from a toplevel OMakefile to OMakefile in 
sub-directories)  or (ii) piggy-back the more "imperative" dependency 
graph (attaching dependencies to dummy "tag" files can be used to 
implement Boolean markers than can be put on a target in one place and 
observed from another place).   A typical situation where information 
should flow from one part to another:  each library (in its own 
directory) exports some variables (such as some link flags), to be used 
by client parts.


Several people complained about the startup performance of omake on big 
projects.  It would be very useful to know whether this comes from the 
processing of the omake "scripts" (in which case some energy might be 
put into improving the interpreter and the internal data structures -- I 
don't see a deep reason for spending several seconds on interpreting 
even quite large scripts) or from scanning the file system for file 
changes (in which case nothing much could be done about it).


Alain



On 09/18/2014 10:14 PM, Bob Zhang wrote:
> Dear camlers,
>     I have done some work to  improve omake available here:
> https://github.com/bobzhang/omake-fork/tree/work
>     Before deciding spending some time in improving omake, I have tried
> various build systems.
>    1. ocamlbuild
>        ocamlbuild is really nice for small to medium projects and I have
> used it pervasively in my personal projects and corporation projects. It
> works pretty well in most cases.
>       There are mainly three drawbacks:
>        a. Easy things hard to do.
>            Even for some very trivial things, if you don't write
> myocamlbuild.m for a long time, you have to google ocamlbuild API and
> figure it out how to do it correctly.
>       b. Error messages hard to understand
>           It's cool that ocamlbuild detect dependencies dynamically,
> when it does not work out, in general, I would turn on -verbose and
> search which part goes wrong.
>       c. no parallellism
>          This is fatal and main reason that I gave it up
>     2. ocp-build
>        I tried it for my hobby project, it's not close to maturity yet.
>     3. jenga
>        Jenga looks promising, but I don't think it would be usable
> inside our company, the dependency is huge, more importantly, its
> dependency chain includes Camlp4 which we can not rely on. Also, looking
> at the examples, it is quite verbose even for trivial projects.
>
>     omake has its own drawbacks as well, for example, the language is
> overly complex and error message is hard to understand(still better than
> ocamlbuild), startup speed is slow, no easy FFI interface to write rules
> in OCaml language itself, but that's all we can find a way to fix.
>
> --
> Regards
> -- Hongbo Zhang


  parent reply	other threads:[~2014-09-19 12:23 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-18 20:14 Bob Zhang
2014-09-18 20:30 ` Aleksey Nogin
2014-09-20 14:59   ` Jun Furuse
2014-09-18 20:34 ` Sébastien Dailly
2014-09-18 21:32 ` Yaron Minsky
2014-09-19 12:23 ` Alain Frisch [this message]
2014-09-19 12:29   ` Nicolas Boulay
2014-09-19 13:36   ` Gerd Stolpmann
2014-09-19 14:00     ` Alain Frisch
2014-09-19 15:18       ` Yaron Minsky
2014-09-19 17:18         ` Gerd Stolpmann
2014-09-19 17:48           ` Yaron Minsky
2014-09-23 10:40         ` Alain Frisch
2014-09-23 10:58           ` Mark Shinwell
2014-09-23 20:12             ` Alain Frisch
2014-09-24  2:35               ` Yaron Minsky
2014-09-22 15:33 Bob Zhang
2014-09-24 13:37 ` Gerd Stolpmann
2014-09-24 15:47   ` Alain Frisch

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=541C2037.5030303@frisch.fr \
    --to=alain@frisch.fr \
    --cc=bobzhang1988@gmail.com \
    --cc=caml-list-request@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;
as well as URLs for NNTP newsgroup(s).