Commit graph

11072 commits

Author SHA1 Message Date
Leonardo de Moura
855dab52e0 chore(library/init/Lean): more fixes
`elaborator.lean` is almost working
2019-03-21 15:06:44 -07:00
Leonardo de Moura
7ac847877f chore(library/init/Lean/Parser): more fixes 2019-03-21 15:06:44 -07:00
Leonardo de Moura
5bbc80fdad chore(*): fixed token.lean 2019-03-21 15:06:44 -07:00
Leonardo de Moura
300aae08b3 chore(*): more fixes 2019-03-21 15:06:44 -07:00
Leonardo de Moura
35ddd49e7a chore(frontends/lean/structure_cmd): toParent instead of to_Parent 2019-03-21 15:06:44 -07:00
Leonardo de Moura
ac27bd092b chore(*): small fixes 2019-03-21 15:06:44 -07:00
Leonardo de Moura
e0b0ca4830 chore(*): adapt C++ code to camelCase 2019-03-21 15:06:43 -07:00
Leonardo de Moura
bc75a24127 chore(library, frontends): use camelCase for attribute names 2019-03-21 15:06:43 -07:00
Leonardo de Moura
039e7fab48 refactor(library): add suffixes.h with commonly used suffixes such as brec_on 2019-03-21 15:06:43 -07:00
Sebastian Ullrich
beda5f5f43 chore(library): capitalize types and namespaces 2019-03-21 15:06:43 -07:00
Sebastian Ullrich
f7aeeaf237 exclude export/extern, translate constants.txt 2019-03-21 15:06:43 -07:00
Sebastian Ullrich
0279d29741 chore(shell/CMakeLists): add bin_lean_stage0 target 2019-03-21 13:16:34 +01:00
Sebastian Ullrich
beae045ebc fix(CMakeLists): complete move of stage1 from src/ to build dir 2019-03-21 13:16:17 +01:00
Sebastian Ullrich
ab974c1c4c chore(shell/CMakeLists,library/Makefile): store stage1 C++ output in build directory 2019-03-20 14:27:17 +01:00
Leonardo de Moura
5f54b5887b chore(kernel/declaration): fix compilation warnings 2019-03-19 11:25:55 -07:00
Leonardo de Moura
437f446844 chore(library/type_context): error instead of assertion violation 2019-03-19 11:25:55 -07:00
Leonardo de Moura
aa56578a29 fix(library/compiler/compiler): assertion violations 2019-03-19 11:25:55 -07:00
Leonardo de Moura
4d9d4523fa chore(state0/.gitignore): ignore .o 2019-03-18 18:30:28 -07:00
Leonardo de Moura
d5180ffa17 fix(library/init/lean/elaborator): make sure new frontend can parse the latest core.lean 2019-03-18 15:47:05 -07:00
Leonardo de Moura
81a105cb20 chore(stage0): update 2019-03-18 15:33:30 -07:00
Leonardo de Moura
2610ace69d feat(library/init/io): remove init_io
In the Haskell proposal for top level mutable state
https://wiki.haskell.org/Top_level_mutable_state, they describe the
following problems with using the `IO` monad during initialization.

"A more serious problem is that there is nothing to prevent arbitrary
observable IO actions from appearing to the right of the arrow. If we
perform all actions before executing main, then import becomes a
side-effectful operation, rather than simply a way of bringing names
into scope; furthermore we must specify the order in which actions from
different modules are executed, which would appear to be difficult in
general. If we execute actions on demand (as the unsafePerformIO hack
does) then we are building an unsafe syntactic construct into the
language."

I believe this is not applicable to us. First, our imports are already
side-effectful since we update attributes and the order we import
modules already matters. Second, we have already a well-defined order
in which we import modules. Finally, all global constants are already
being initialized eagerly.

Their ACIO proposal (`init_io` in our implementation) is too restrictive
for what we want to do. For example, to implement an environment
extension mechanism like we have discussed, we would also need `io.ref.write` and
`io.ref.read`. I imagine, we would have a global table, and `register`
would update this table. These extra actions do not satisfy the ACIO restrictions
described in the Haskell proposal. From their document:
"AC stands for Affine Central.
An IO action u is affine if its effect is not indirectly observable, hence need not be performed if the result is unneeded. That is, if u >> v === v for all actions v.
It is central if its effect commutes with every other IO action. That is, if do { x <- u; y <- v; w } === do { y <- v; x <- u; w } for all actions v and w."
It feels like we would have to keep fighting with the ACIO
restrictions. As I said above, our initialization order is well
defined. So, we must document the `[init]` feature and tell users they
should be aware that the `import` is important for initialization
purposes, and that their initialization actions should be
affine central whenever possible.
2019-03-18 15:33:29 -07:00
Leonardo de Moura
4e02edf71f fix(library/compiler/emit_cpp): emit code for invoking user provided initialization functions 2019-03-18 15:33:29 -07:00
Leonardo de Moura
b839ecb3d9 fix(library/compiler/emit_cpp): typo 2019-03-18 15:33:29 -07:00
Leonardo de Moura
08f3459ea3 fix(library/compiler/emit_cpp): stop initialization when error is reported 2019-03-18 15:33:29 -07:00
Leonardo de Moura
9b1c5c09fb feat(library/compiler/emit_cpp): thread io state 2019-03-18 15:33:29 -07:00
Leonardo de Moura
15d89b24a3 feat(library/compiler): [init] attribute
TODO: use attribute when emitting code in the backends.
2019-03-18 15:33:29 -07:00
Sebastian Ullrich
c57e3f7736 fix(shell/CMakeLists): fix REBUILD_STAGE0=OFF, somehow? 2019-03-18 21:19:42 +01:00
Leonardo de Moura
06ac89e184 chore(CMakeLists): temporary fix
@kha Added this fix to make sure I can build Lean
2019-03-18 12:49:49 -07:00
Leonardo de Moura
d45da2d5ba fix(shell/lean): check whether output file was created or not 2019-03-18 12:44:28 -07:00
Sebastian Ullrich
6bd3f1168a chore(src/CMakeLists): remove now-useless standard_lib target and introduce stdlib target at stage0 2019-03-18 20:25:59 +01:00
Sebastian Ullrich
bf5c2ea123 chore(src/CMakeLists,library/Makefile): remove stage1 on clean-olean as well 2019-03-18 20:25:59 +01:00
Leonardo de Moura
06695b5942 chore(CMakeLists.txt): update cmake min version 2019-03-18 11:12:56 -07:00
Sebastian Ullrich
246d2914da chore(CMakeLists): remove dead code 2019-03-18 17:56:40 +01:00
Sebastian Ullrich
9df8d97f0f chore(CMakeLists): add bin target 2019-03-18 17:44:21 +01:00
Sebastian Ullrich
0db283023c chore(src/boot): rename to stage0 2019-03-18 17:14:30 +01:00
Sebastian Ullrich
dec8b76c32 feat(src/CMakeLists): build stdlib using leanc instead of nested CMake run 2019-03-18 16:11:39 +01:00
Sebastian Ullrich
f6d3062524 feat(bin/leanc): add simple C++ compiler wrapper script 2019-03-18 16:11:30 +01:00
Sebastian Ullrich
b4ce2ba1a5 chore(shell/CMakeLists): add REBUILD_STAGE0 dev option 2019-03-18 16:09:20 +01:00
Sebastian Ullrich
ee15a70098 fix(*/CMakeLists): build all binaries via (staged) leanstatic 2019-03-18 16:09:20 +01:00
Sebastian Ullrich
074b179984 feat(shell/CMakeLists): do not touch src/boot by default, use untracked dir src/stage1 instead 2019-03-18 16:09:20 +01:00
Leonardo de Moura
1da4782483 feat(runtime, library/init/io): add io.ref 2019-03-16 22:16:28 -07:00
Leonardo de Moura
1935986f3c fix(library/compiler/compiler): we must compile (non external) opaque constants 2019-03-16 18:41:58 -07:00
Leonardo de Moura
9984d28bb2 fix(library/init/lean/frontend): make sure new frontend works with new io monad 2019-03-16 18:24:53 -07:00
Leonardo de Moura
b1c187f717 feat(library/compiler): allow io unit as main function result type
When `io unit` is used, we use `return 0` for `result.ok`, and `return
1` for `result.except`.
2019-03-16 16:05:45 -07:00
Leonardo de Moura
dcdeff1794 chore(runtime): remove dead file 2019-03-16 15:34:58 -07:00
Leonardo de Moura
6d0ec3a8c9 refactor(library/init/io): implement io monad using estate monad 2019-03-16 15:34:58 -07:00
Leonardo de Moura
62284c7f39 feat(library/init/control): add estate monad
Optimized `except_t ε (state_t σ id) α`
2019-03-16 15:24:12 -07:00
Sebastian Ullrich
b325908d4a chore(frontends/lean/vm_elaborator): rename to lean_elaborator, update some comments 2019-03-16 19:29:12 +01:00
Sebastian Ullrich
e19ed79414 feat(shell/lean): pass environment to and from Lean, remove environment.mk_empty axiom
/cc @leodemoura

I didn't remove the implementation of `environment.mk_empty`, we may want to use
it in tests.
2019-03-16 19:27:16 +01:00
Leonardo de Moura
ffc3436dd6 feat(library/init/lean): remove some TODOs using the new opaque constants 2019-03-15 17:49:10 -07:00