Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

combining -i and -annot #5538

Closed
vicuna opened this issue Mar 14, 2012 · 7 comments
Closed

combining -i and -annot #5538

vicuna opened this issue Mar 14, 2012 · 7 comments

Comments

@vicuna
Copy link

vicuna commented Mar 14, 2012

Original bug ID: 5538
Reporter: @garrigue
Status: closed (set by @damiendoligez on 2012-03-27T15:11:36Z)
Resolution: fixed
Priority: normal
Severity: feature
Version: 3.13.0+dev
Fixed in version: 4.00.0+dev
Category: ~DO NOT USE (was: OCaml general)
Monitored by: @gasche @hcarty

Bug description

Currently ocamlc -i disables any output to files.
It would be nice that combining -i and -annot would still generate the .annot file,
so that one get all the typing information without actually compiling.

@vicuna
Copy link
Author

vicuna commented Mar 14, 2012

Comment author: @gasche

I have a related request: I recently noticed that ocamlc -i foo.ml working fine does not actually provide any assurance that the code compile fines, because some static checking is performed after type-checking (in my case a "this kind of expression is not allowed in a let rec..."). So to be sure that I get all statically-detected errors, I have to use ocamlc -c foo.ml which is less informative. It would be nice if ocamlc -i -c foo.ml gave me the best of both worlds, while it currently ignores the -c part.

@vicuna
Copy link
Author

vicuna commented Mar 14, 2012

Comment author: @alainfrisch

In addition to performing type-checking, "-i" also prints the inferred interface. Maybe we should introduce a new "type-check only" flag, which does the full type-checking (and produce .annot files if requested), without printing the interface.

@vicuna
Copy link
Author

vicuna commented Mar 26, 2012

Comment author: @xavierleroy

Several OCaml developers are discussing this PR right now, and we're not sure what usage scenario you have in mind. Why is it that you can't use "ocamlc -c -annot" ?

@vicuna
Copy link
Author

vicuna commented Mar 27, 2012

Comment author: @garrigue

I just stumbled on it when trying to look both at the interface generated for a unit and its annotations.
This was for debugging purposes, but this could happen in a developing tool too.
I'm not 100% sure what is the right behavior.
Note that -annot is not linked to compilation: it may output some information even if type checking fails.

@vicuna
Copy link
Author

vicuna commented Mar 27, 2012

Comment author: @gasche

I believe the expected behavior is rather clear: don't ignore any explicitly passed flag, even in presence of -i.

  • if -annot is passed, produce -annot files before printing the interface
  • if -c is passed, then compile (and report related errors) after printing the interface

If there was an additional typecheck-only flag as suggested by Alain, it would be implied by -i and -annot, but would not imply interface printing -- a reasonable rationale for this is that interface printing can be slow.

@vicuna
Copy link
Author

vicuna commented Mar 27, 2012

Comment author: @xavierleroy

I am not questioning the expected behavior: I'm questioning the need for yet another flag or combination of flags, given that "ocamlc -i" followed by "ocamlc -c -dannot" does the job in this case.

In the past, -i was a modifier on -c and would not prevent generation of compiled files, and some users made a reasonable point that -i should print the inferred interface and do nothing else. Could we just stick with this behavior?

@vicuna
Copy link
Author

vicuna commented Mar 27, 2012

Comment author: @damiendoligez

I have looked into the code and noticed that "ocamlopt" does allow -i and -annot together.
Moreover, "ocamlc -i" also fails to check for warnings-as-errors and to remove preprocessed temporary files.

I have brought ocamlc in line with ocamlopt on all these points.

Until the next release, you can work around this issue by using "ocamlopt -i -annot".

Fixed in 4.00 (commit 12284) and trunk (commit 12285).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant