Mantis Bug Tracker

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0006389OCamlback end (clambda to assembly)public2014-05-03 15:312016-12-07 11:34
Assigned Togasche 
PlatformOSOS Version
Product Version 
Target VersionFixed in Version4.02.0+dev 
Summary0006389: [github patch] add an -opaque option to produce optimization-empty .cmx file for separate native compilation
Description [^]

The intent of this option is to enable semi-separate native
compilation. Currently, when a module changes, all the modules that
depend on it need to be recompiled. Activating -opaque disables
cross-module optimization, but should let us change a module without
having to recompile all the others (although to be honest this still
have to be verified).

This would be of practical value for development cycles of project
that have (compile;test) loops: currently compilation is much slower
in native code than in bytecode, but tests can be sensibly faster in
native code. -opaque could bring the best of both worlds, with fast
compiles and rather-fast tests.
Additional InformationReviewers noted that the "does not recompile dependencies when implementation changes" aspect only works for build-system that are content-based rather than timestamp-based, as recompiling the .cmx will update its modification time. I think this is fine, and that changing the compilation process to please timestamp-based system is an orthogonal question that should be discussed separately.
Tagsgithub, patch
Attached Filespatch file icon opaque.patch [^] (4,811 bytes) 2014-08-07 17:55 [Show Content]

- Relationships
related to 0004454resolvedshinwell Better control over cross-module optimizations 
related to 0005859closedgasche [patch] add -nocmx command line option to ignore cmx files 

-  Notes
frisch (developer)
2014-05-04 22:21

I'm in favor of accepting the patch, but it would be quite good to at least verify that it fulfills its goal (e.g. with ocamlbuild or with omake default rules).
frisch (developer)
2014-05-06 17:27

I've done a test on LexiFi's code base. For a given source file change and build target, compilation takes 24s without -opaque and 16s with -opaque. The gain is not huge, but we also need to link many executables (and this cannot be avoided!) and omake itself takes some time to parse and evaluate OMakefiles and check timestamp/digests (about 5s).

I assume that for some other scenarios, the gain would be more important.

Gabriel: since nobody else objected to the feature and it seems harmless, I think you can commit your patch on the trunk.
gasche (administrator)
2014-05-06 17:54

Thanks a lot! I was busy with other things and kind of left this one by the wayside. I agree that will be a nice addition.
frisch (developer)
2014-07-23 16:02

Ping? Since the patch cannot break anything, I'd even push for putting it in 4.02.
gasche (administrator)
2014-08-07 17:57

I just rebased the patch against the current trunk. I am about to commit it -- only for now, but I'll check with Damien that it can go in 4.02 as well.

Currently the -opaque option is only supported by ocamlopt. Do you think it should be supported (and ignored) by ocamlc as well? I see you did a similar change for -for-pack.
gasche (administrator)
2014-08-19 14:23

Merged, with special authorization from our dear release manager, in 4.02@15106.

- Issue History
Date Modified Username Field Change
2014-05-03 15:31 gasche New Issue
2014-05-03 15:33 gasche Tag Attached: github
2014-05-03 15:33 gasche Tag Attached: patch
2014-05-04 22:21 frisch Note Added: 0011343
2014-05-06 17:27 frisch Note Added: 0011363
2014-05-06 17:54 gasche Note Added: 0011364
2014-06-02 18:58 frisch Relationship added related to 0004454
2014-06-04 21:43 doligez Status new => confirmed
2014-06-17 16:30 frisch Assigned To => gasche
2014-06-17 16:30 frisch Status confirmed => assigned
2014-07-23 16:02 frisch Note Added: 0011902
2014-08-07 17:55 gasche File Added: opaque.patch
2014-08-07 17:57 gasche Note Added: 0011989
2014-08-19 14:23 gasche Note Added: 0012024
2014-08-19 14:23 gasche Status assigned => resolved
2014-08-19 14:23 gasche Fixed in Version => 4.02.0+dev
2014-08-19 14:23 gasche Resolution open => fixed
2014-08-28 23:16 gasche Relationship added related to 0005859
2016-12-07 11:34 xleroy Status resolved => closed
2017-02-23 16:35 doligez Category OCaml backend (code generation) => Back end (clambda to assembly)
2017-02-23 16:44 doligez Category Back end (clambda to assembly) => back end (clambda to assembly)

Copyright © 2000 - 2011 MantisBT Group
Powered by Mantis Bugtracker