-
Notifications
You must be signed in to change notification settings - Fork 23
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
Nim Roadmap 2023 #503
Comments
Regarding incremental compilation:
For the JSON module(s), would it be possible to go with For term-rewriting macros (and I might write up an RFC for this), I feel that a better mechanism would be a way for a Nim module to implement AST rewriting. This could be something like plugins for the compiler, or an interface exposed by a module. This way the community can experiment with various forms of AST rewriting, and an "ideal" solution can emerge. |
Interesting, thanks!
No. We don't have directories in Nim code (except in
AST rewriting via compiler plugins sounds interesting. |
I could not see where the snippet @Varriount quoted came from, but on Linux, you can just use EDIT: and it seems like this is also pretty easy on OSX -- https://www.techjunkie.com/how-to-create-a-4gbs-ram-disk-in-mac-os-x/ but it is not "just there by default". |
Speaking of caches, LLVM supports caching during lto, something I'll probably enable in |
I'm pretty sure they meant the module names. So that you could do something like |
Yeah but what if he does |
True, but I feel like it's less often that you'll need to import low-level parsers for two separate languages. I hope we'll still get a |
Sorry to be vague, but I think |
Are there (rough) estimates or update regarding this roadmap ? |
I just updated it and @ringabout is now working on "Patch the full compiler to use "definite assignment analysis" itself." |
Update: with nim-lang/Nim#22365 merged, the compiler now enables |
what does "IDE tooling" in "Incremental compilation (IC) / nimsuggest / IDE tooling" means? |
Continued here: #543 |
Version 2.0
Version 2.2
Incremental compilation (IC) / nimsuggest / IDE tooling
This is a single point as for me it's a single thing. If we had a compiler that only recompiles the module that was touched the "nimsuggest" tool can be a simple command line tool that answers a single question like "where is symbol X used?".
We have this tool already, it's
nim check --navigate
, but the implementation of IC needs to be finished. In order to implement this feature in a disciplined manner that avoids complexity and hard to track down subtle bugs the following strategy will be followed:With
--ic:stress
IC is enabled for every single module and the compiler always uses the same non-conditional logic:The Nim compiler compiles a single
a.nim
module at a time. It is compiled to C(++). Letb.nim
be a dependency ofa.nim
. Ifb.nim
has been compiled tob.rod
already andb.nim
did not change since then, importb.rod
and proceed.Otherwise, compile
b.nim
via spawning another Nim compiler process that compilesb.nim
tob.rod
. Then proceed by importingb.rod
. This rather simple setup ensures that by construction we stress test the mechanism completely, all the time. The downside is that all the required IO slows down the compiler a lot, so that development and testing will be slow.Stretch goals
Allow recursive module dependencies
see also
nim-lang/Nim#18818
nim-lang/Nim#18822
Language
Patch the full compiler to use "definite assignment analysis" itself => use strictdefs for compiler Nim#22365
"Void type" -- We should optimize away the "empty tuple" type in the backend and remove this feature.
"AST based overloading" -- Should be removed.
"Parallel & Spawn" -- Should be removed or overhauled. Currently it is better done by external packages.
deprecate
std/threadpool
; usemalebolgia
,weave
,nim-taskpool
instead Nim#22576With our refined idea of "strict funcs", the algorithm for proving borrow checking correct can be much simpler and more precise. In other words, "view types" can be made stable for Nim 2.x.
Library
JSON
The JSON module is in a poor shape, the API exposes public fields, sometimes is not intuitive (the
%*
operator) and has poor performance. It could be split up into:jsonbuilder
,jsonparser
,jsonlexer
,jsontree
,jsonmapper
.Async
The higher level async modules should be moved into their own Nimble package. The required building blocks like
selectors.nim
remain in the standard library, they served Nim well.Less concrete goals
static
values and stabilize the feature.of Value(let x, var y)
and embrace an official pattern matching solution that makes use of this syntax.Atlas tool
project.nimble
likeproject.lock
so that lock files and reproducible builds are supported.How can you help?
The standard library cleanups should be rather easy to do. Atlas is also still a very simple tool, only about 600 lines of Nim code.
The text was updated successfully, but these errors were encountered: