Skip to content

Commit 3724634

Browse files
committed
add project doc
1 parent af56edc commit 3724634

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

misc/juliacon2020.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## What to present
44

5+
NOTE: [Juno 1.0 Project](./juno1.0-project.md) summarizes what we will do for Juno 1.0.
6+
57
My current plan of the presentation consists of two parts:
68

79
1. Showcase improvements/features
@@ -54,6 +56,8 @@ We also plan to describe our approach to solve the difficult problems and implem
5456

5557
### Notes (optional)
5658

59+
[Juno 1.0 Project](./juno1.0-project.md) describes our current plan for this project in details.
60+
5761
### Talk image (optional)
5862

5963
![](juno1.0-logo.png)

misc/juno1.0-project.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Juno 1.0 Project
2+
3+
TODO: We may want to migrate this into our future (unified) repository.
4+
5+
## Plans
6+
7+
### Unify `julia-client` and `ink`
8+
9+
Basically we want to migrate `ink` into `julia-client`.
10+
Instead of just moving code in the former into the latter,
11+
I would rather create a brand new repository, let's say `JunoLab/Juno`, and put the work into there.
12+
13+
This should give us several _huge_ improvements:
14+
- **Easy installation/update**: An user just need to install/update only one package
15+
- **Better startup time**: A loading/activation consumed on deserialization should vastly improve; we can statically serialize/deserialize items without inter-package interactions
16+
* We may be able to go even future, by deserializing items lazily or something like that
17+
- Better maintainability
18+
* E.g.: CI won't break because of incompatibility between julia-client and ink (although we still don't have enough test suites for code in Atom side :P)
19+
* And also, we can think of `JunoLab/Juno` as a new main repository of our project, i.e. issues/FRs will be bundled there, documentation can be developed there and so on
20+
21+
This will require **tons** of work; we need man power !
22+
23+
NOTE:
24+
In theory, the UI components in `ink` are better to be composable,
25+
and this is why they have been developed separately so far AFAIU.
26+
But Atom is no longer a popular place to develop an IDE and now
27+
we want to focus on our benefits rather than the ideal form of software for general uses.
28+
29+
### Ship Julia packages in the unified Atom package
30+
31+
Bundles Julia packages that constitute Juno within `JunoLab/Juno`, as [julia-vscode extension](https://github.com/julia-vscode/julia-vscode) does to some extent.
32+
33+
This also brings several and similar user experience improvements:
34+
- **Easy installation/update**: Users now don't need to update both Atom and Julia packages separately; what they need to do is only to update `JunoLab/Juno`, the new unified Atom package
35+
- **Non-interference with user's environment**
36+
* By hacking on uuids of our Juno-related packages (Julia side), we can trick Julia into seeing them as totally different packages from user's ones, even when they are actually the same or ones with different versions
37+
* This means Juno users no longer worry about incompatibility between Juno packages and the ones they want to use for their use
38+
39+
### Moar IDE features
40+
41+
We already started to provide (ordinary) IDE features based on static code analysis using [CSTParser](https://github.com/julia-vscode/CSTParser.jl), like outline/goto, but we can go even more further.
42+
43+
Judging from what users require/complain about (and of course from our own interests), these features seem to have high priority:
44+
- linter implementation: @pfitzseb actually already implemented the linter on UI side, but we still not have its backend implementation on Julia side
45+
- rename refactor: [WIP here](https://github.com/JunoLab/Atom.jl/pull/203)
46+
- symbols view: can be nicely integrated with rename refactor feature
47+
- outline view: can be enhanced more by allowing nested items
48+
* once it becomes to handle nested items, our outline view can be used for more things, like markdown, TOML, Weave document, etc
49+
50+
For implementing these features, I would like to go with our own implementations, i.e. don't just rely on [StaticLint.jl](https://github.com/julia-vscode/StaticLint.jl), because:
51+
- caching everything on the first time environment loading isn't preferable from our point of view
52+
- its linter implementation is sometimes too conservative; maybe it's because it doesn't use runtime information, which can be very helpful for linting, while it's a core functionality of Juno
53+
54+
These features are kinda related to each other.
55+
First I would like to refactor [our global (goto) symbol cache](https://github.com/JunoLab/Atom.jl/blob/e8abd9b8e19e7100471dd110a4d417817a53d4e2/src/goto.jl#L146-L164) and make it suitable for more general uses, and then we can reuse it for all the things.
56+
By using user runtime information, it may be possible to enhance their implementations even more.
57+
58+
## Ideas
59+
60+
There are several other things we've wanted to do.
61+
List them here because they have less priority than things above in terms of releasing Juno 1.0.
62+
63+
- update documentation and showcase our latest features: there are lots of features that only we developers know !
64+
* https://github.com/JunoLab/Juno.jl/issues/419
65+
- improve module handling:
66+
* https://github.com/JunoLab/Juno.jl/issues/411
67+
* https://github.com/timholy/Revise.jl/issues/391
68+
* https://github.com/JunoLab/Juno.jl/issues/407
69+
- [Infiltrator.jl](https://github.com/JuliaDebug/Infiltrator.jl) integration
70+
- [Literate.jl](https://github.com/fredrikekre/Literate.jl) integration
71+
- improvements on remote sessions

0 commit comments

Comments
 (0)