Skip to content
Clément Pit-Claudel edited this page Apr 25, 2018 · 11 revisions

A bunch of F* engineering projects:

≤ 1 day of work

Disabling OCaml warnings locally

F*'s extraction should produce [@warning "-8"]-style annotations to disable spurious warnings (instead of our current _tags file for the compiler)

A few days at most

Add rich types for errors

Add a rich type for errors, and propagate that type into the interactive mode. For example, instead of Expected "int", got ""A" ^ "B"" of type "string", say UnificationError ("Expected '%s', got '%s' of type '%s'", Code "int", Code "\"A\" ^ \"B\""). This lets the IDE highlight the code snippets, for example.

An extension of this would be to associate lists of ranges to errors, instead of single errors. F*-mode can already jump to related errors, but we currently have at most one, and it's sometimes parsed from the error message text (Also see:). This would make it much nicer (we'd probably to highlight related ranges when the point is on an error)

F* REPL

Should be a relatively easy extension of FStar.Interactive.Ide.fs. Overwriting definitions might be tricky. Same for loading modules on the fly (dependencies are currently (2017-07) loaded all at once when the file is first parsed). See next item.

Dynamic dependency loading (might be harder?)

In interactive mode, defer dependency analysis and loading to when each dependency is first encountered. Instead of parsing the whole file and loading all dependencies, only load a dependency after receiving the first chunk mentioning it (through an open, and include, or a qualified reference to a symbol).

This would remove the requirement for interactive files to be syntactically valid when an editing session is started, and it would get rid of annoying errors about modules not being found (and it would save the time spent reprocessing everything after reloading a module, too).

A few days at least

Incorrect/partial term parsing (ONGOING)

Enrich the parser with error states, and use these to do contextual completion, type-at-point info with partial terms, eldoc-style argument type suggestion, for indentation driven by F*-mode.

Clément will chat with François and Frédéric about this.

Make F*'s interactive loop asynchronous

This would let you run info queries (type at point etc) while a long-running proof is in progress.

F*-reformat (ONGOING)

Decide on a standard code layout format, and implement a tool to apply it consistently.

Bug minimizer

https://github.com/FStarLang/FStar/issues/1151

Done!

Make sure that the compiler's sources are editable with fstar-mode (Done by @cpitclaudel, 2017-09)

Change the parser to accept fs and fsi in --MLish mode. Don't copy the files to a separate u_boot_fsts/ folder when building.

https://github.com/FStarLang/FStar/issues/1146

Clean up the state tracking system (Done by @cpitclaudel, 2017-10)

We currently have multiple stacks used for backtracking, including one in the SMT solver, one in the typechecker, one in ToSyntax, and one in the interactive mode. Additionally, we have separate notions of pushing, marking (along with popping, committing marks, and resetting marks). It would be nice to simplify these, and have a single backtracking stack in F*.

This would also be a good occasion to start using pure maps (psmap, pimap) rather than imperative maps with copies.

Cache unsat SMT queries (Done by @wintersteiger, 2017-10)

In addition to hints, record a hash of unsat SMT queries in a cache, and admit queries that can be found in the cache. Useful for CI and potentially for interactive developments (with such a system, issuing one query per assert might be faster than producing one large VC, due to caching). https://github.com/FStarLang/FStar/issues/1140

Identifying and filtering warnings

Annotate each warning with an identifier. Include the identifier in messages, and make it possible do disable specific warnings from the command line. Add disabled-by-default warnings under -Wall.

Use this to turn off Adding an implicit 'assume new' warnings while compiling F*'s compiler. See also "add rich types for errors", which would subsume this.

Clone this wiki locally