caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Alain Frisch <alain.frisch@lexifi.com>
To: Gerd Stolpmann <info@gerd-stolpmann.de>,
	 Bob Zhang <bobzhang1988@gmail.com>
Cc: nogin@metaprl.org, Caml List <caml-list@inria.fr>
Subject: Re: [Caml-list] improve omake [was One build system to rule them all]
Date: Wed, 24 Sep 2014 17:47:25 +0200	[thread overview]
Message-ID: <5422E78D.1040601@lexifi.com> (raw)
In-Reply-To: <1411565826.2930.76.camel@zotac>

LexiFi might be willing to provide some funding for improving omake, 
esp. its performances.  Please contact me if you (Gerd, Hongbo, anyone) 
want to discuss that.

-- Alain


On 09/24/2014 03:37 PM, Gerd Stolpmann wrote:
> Although I don't have much time now, I'll try to find some for helping
> here.
>
> Gerd
>
> Am Montag, den 22.09.2014, 11:33 -0400 schrieb Bob Zhang:
>> Hi all,
>>     I am glad there are some people who like omake. I have a full time
>> job right now, but I am still very interested in improving omake, it
>> would be nice that some more knowledgeable people would contribute(and
>> particular windows developer).
>>      Currently my fork is here : https://github.com/bobzhang/omake-fork
>>      It's in a re-factorization status .
>>      The main things I can think about to improve omake(long term
>> goal):
>>       a. remove some unused struct in the omake language, add a doc
>> string and reflection abilities
>>       b. make debug easier, error messages easy to follow
>>       c. add a new backend (for example to ninja) for faster
>> performance
>>       d. expose an API to allow people write rules in ocaml language
>> itself.
>>
>>       The short term goal is bug fix and keep it up to date with the
>> latest ocaml compiler
>> -- Hongbo
>> On Fri, Sep 19, 2014 at 1:18 PM, Gerd Stolpmann
>> <info@gerd-stolpmann.de> wrote:
>>          Am Freitag, den 19.09.2014, 11:18 -0400 schrieb Yaron Minsky:
>>          > We had a fair number of problems with omake
>>          >
>>          > - We've run into lots of performance problems on large
>>          builds (2-3
>>          >   million lines, many thousands of targets) was that omake
>>          took a very
>>          >   long time (a few minutes) to be restarted.
>>
>>          Well, never got into that dimensions. The largest builds had
>>          only around
>>          250Kloc, and omake worked well for that size. I don't know
>>          much about
>>          the internals of omake, but I can imagine that certain things
>>          are
>>          recomputed too often, and then you run into performance
>>          problems at a
>>          certain size. But why can't this be nailed down?
>>
>>          > - The build itself has limited parallelism because of
>>          various
>>          >   bottlenecks inside omake, like the fact that it computes
>>          its md5sums
>>          >   in a single process.
>>
>>          Hmm, is that evident? Maybe switching to a faster hash
>>          algorithm could
>>          solve this? (E.g. just use RC4 and XOR up the output stream;
>>          should be
>>          ultimately fast.)
>>
>>          > - The default rules didn't do a good job of clearing out
>>          stale build
>>          >   artifacts (important for getting reliable incremental
>>          builds), and
>>          >   we had to put quite a lot of painful engineering in place
>>          to make
>>          >   that work.  We needed to do similar work in Jenga to make
>>          the same
>>          >   thing happen, but it was a lot more fun writing that code
>>          in OCaml!
>>
>>          If you just stick to the built-in macros, incremental builds
>>          are very
>>          reliable. If you start writing your own rules, there is some
>>          chance that
>>          you overlook dependencies. But that's independent of which
>>          build system
>>          you use.
>>
>>          > I am not convinced that putting more complicated
>>          calculations into
>>          > programs will work well.  I know of no system that does a
>>          good job
>>          > allowing you to deal with complex dependencies that are
>>          discovered
>>          > over the course of a build (which you get with staged
>>          programming)
>>          > that take this approach.  It seems that a more expressive,
>>          monadic
>>          > structure fits the bill, and hammering that into the round
>>          peg of
>>          > shell invocations won't work well, I suspect.
>>
>>          After all, I think that it would be naive to think that one
>>          size fits
>>          all. When you have a large build like yours you probably have
>>          quite
>>          special requirements, and are willing to do without comfort
>>          features
>>          like a macro language.
>>
>>          So: no one build system to rule them all. Nevertheless, I'm
>>          very much
>>          for improving omake.
>>
>>          Gerd
>>
>>
>>          > y
>>          >
>>          > On Fri, Sep 19, 2014 at 10:00 AM, Alain Frisch
>>          <alain@frisch.fr> wrote:
>>          > > On 09/19/2014 03:36 PM, Gerd Stolpmann wrote:
>>          > >>
>>          > >> Well, I run frequently into the difficulty that I need
>>          some special
>>          > >> omake function that would be trivial to develop in OCaml
>>          (e.g.
>>          > >> associating some data with some other data, filtering
>>          things, doing
>>          > >> string transformations), but for writing it in the omake
>>          language I need
>>          > >> some time for developing and testing. I have a quite
>>          simple idea to
>>          > >> improve this: Besides OMakefile there could also be an
>>          OMakefile.ml, and
>>          > >> you can define any helper functions there, and they would
>>          be
>>          > >> automatically callable from the OMakefile. I think this
>>          is not really
>>          > >> complicated to do - you'd need to build a custom omake
>>          executable
>>          > >> whenever OMakefile.ml changes, and need to scan the
>>          OMakefile.ml
>>          > >> interface for function signatures that match the form
>>          that is callable,
>>          > >> and you need to generate some glue code. (Later this idea
>>          could be
>>          > >> extended by allowing OCaml code to emit new rules, as
>>          described in an
>>          > >> earlier post.)
>>          > >
>>          > >
>>          > > I can see some cases where it would indeed be more
>>          comfortable to implement
>>          > > build-system calculations in OCaml.  But couldn't most of
>>          these cases be
>>          > > implemented as external programs called by omake functions
>>          and implemented
>>          > > e.g. in OCaml?  This forces to pass explicitly all the
>>          data required by the
>>          > > calculation to those external programs, but how often is
>>          this a problem?
>>          > > With some convention,  the external program could even
>>          return description of
>>          > > new dependencies, to be interpreted by some omake code and
>>          injected into the
>>          > > actual graph. AFAICT, all this is already possible.
>>          > >
>>          > >
>>          > >> I see what you mean. In a recent project I had to define
>>          all variables
>>          > >> with library names, findlib names, intra-project library
>>          dependencies
>>          > >> etc. in the global OMakefile, because they are needed in
>>          potentially all
>>          > >> sub-OMakefiles. That's of course not where these things
>>          are best
>>          > >> naturally defined.
>>          > >
>>          > >
>>          > > A variant is to have e.g. a OPreOMakefile file in each
>>          directory and arrange
>>          > > so that the toplevel OMakefile includes all of them (with
>>          a proper ordering)
>>          > > without processing the rest of the project.  This way, you
>>          only need to
>>          > > "lift" the full list of directories, and actual data
>>          definitions can be put
>>          > > where they belong.
>>          > >
>>          > >> Maybe we should allow to switch to global context
>>          anywhere? I think this
>>          > >> is solvable.
>>          > >
>>          > >
>>          > > I'm not sure this would easily fit in the current
>>          functional semantics.
>>          > >
>>          > >> Could be something simple, like matching the wildcard
>>          rules against the
>>          > >> real files.
>>          > >
>>          > >
>>          > > Reading the directory content should be quite cheap, and
>>          then it is just
>>          > > string processing, which should be even cheaper (if done
>>          properly).  It
>>          > > would be great to identify such hot spots; maybe some very
>>          local tweaks to
>>          > > algorithmics or data structures could improve performance
>>          a lot.
>>          > >
>>          > >
>>          > >
>>          > > Alain
>>          > >
>>          > >
>>          > > --
>>          > > 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
>>          >
>>
>>
>>          --
>>          ------------------------------------------------------------
>>          Gerd Stolpmann, Darmstadt, Germany    gerd@gerd-stolpmann.de
>>          My OCaml site:          http://www.camlcity.org
>>          Contact details:        http://www.camlcity.org/contact.html
>>          Company homepage:       http://www.gerd-stolpmann.de
>>          ------------------------------------------------------------
>>
>>
>>
>>
>>
>> --
>> Regards
>> -- Hongbo Zhang
>


  reply	other threads:[~2014-09-24 15:47 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-22 15:33 Bob Zhang
2014-09-24 13:37 ` Gerd Stolpmann
2014-09-24 15:47   ` Alain Frisch [this message]
  -- strict thread matches above, loose matches on Subject: below --
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
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

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=5422E78D.1040601@lexifi.com \
    --to=alain.frisch@lexifi.com \
    --cc=bobzhang1988@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=info@gerd-stolpmann.de \
    --cc=nogin@metaprl.org \
    /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).