123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- TODO
- ## Important
- TYPE SYSTEM REFACTOR: (test/ref/ref.km)
- - no subtyping (thus no variance)
- - lift record type def to the same level as enum type def
- - no tuple; type Lambda2[Input1,Input2,Output]
- - no unit; type Lambda0[Output]
- - type Pair[A,B] record { first: A, second: B }
- - update vd go-struct related code (including EnumDummyInterfaceMethod)
- - implicit contexts integrated in arguments (thus have default values)
- type Unknown native
- type Bool union { const No, Yes } // no as zero
- type Maybe[T] union { T, None }
- type None record {}
- const None None { new None() }
- return() // aka return(None)
- type Source[T] restricted Observable[T] // Observable no exception parameter
- 'a'.[Maybe[String]] // implicit conversion
- value.[Interface] // implicit conversion
- computed.[] // unbox
- type Number restricted Integer
- new Number(1) // only available in the module of Number
- new Record { ... }
- |-+ project
- |-+ module1
- | |-- @manifest.vd
- | |-- foo.km
- |
- |-+ module2
- |-- bar.km
- |-- baz.km
- type #XXX -> type XXX data {record,union}
- overload: input expr "shape" signature matching
- field/case refs to list (xx.(&(branch) => ...))
- repl gui (text browser + line edit, tab completion)
- - QTextBrowser < QTextEdit::append
- - display details of large objects in another window
- - consider full debugger (multiple tabs, console + timeline + source + gui)
- - debugger (in machine), debugger server, debugger client
- - reflect::Type, (param T -> Unknown)
- - reflect::Value (implicit cast from T to reflect::Value[T])
- - debug::Log('state', state)
- encode, decode, decode*: async version
- component function (can have preview)
- SQLite (QSqlDatabase) project source storage (exclusive conn, diff the whole db)
- module < project
- UUID for each type/const/operator
- project: kvdb (-> gist)
- content: modules(types,operators), entry point, dependencies, assets, docs
- ui::modal-get-text, ui::TextViewMultiLine, ui::TextInputMultiLine
- `interact-with-window` add option `min-size`; `popup` add option `rel-pos`
- context menu (QMenu.exec)
- var wait = make(chan struct{}) // encapsulate to something in util
- qtbinding C side int vs. go side int (not the same type, fix it)
- api functions for file dialogs, font dialog, ...
- merge go118 branch after go1.18 released
- - {prefix,infix,suffix,continuation} operator
- prefix (op foo)
- infix (op infix foo)
- suffix (op method Type.foo)
- continuation (op control foo)
- (op const)
- (op variadic)
- (op component)
- (op message)
- ## IDE Roadmap / Design
- CS: code structures
- code {
- textual: code --parse--> CST --transform--> AST --adapt--> CS
- structural: CS
- }
- file {
- textual: state-quo, independent loading mechanics, mods pub/pri convention
- structural: 1 file, .kmpkg
- }
- module can be configured as 'no module prefix' (mod:: not displayed in IDE)
- - Browser-like navigation (statement <=> page) (back, forward, recent history)
- - Tags for functions/types (tags instead of classes/folders)
- - language-based debug-log (we can know the type)
- - sample input (to get a clear preview of the dataflow)
- ## Refinement
- - Code: dummy interface: consider { impl(Interface) } instead of { Interface() }
- - Code: AST node renaming
- - API: consider renaming wait and tick
- - API: revise resource management for files
- consider Disposable[T] (ctx-based disposal or persist closable object)
|