TODO 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. TODO
  2. ## Important
  3. TYPE SYSTEM REFACTOR: (test/ref/ref.km)
  4. - no subtyping (thus no variance)
  5. - lift record type def to the same level as enum type def
  6. - no tuple; type Lambda2[Input1,Input2,Output]
  7. - no unit; type Lambda0[Output]
  8. - type Pair[A,B] record { first: A, second: B }
  9. - update vd go-struct related code (including EnumDummyInterfaceMethod)
  10. - implicit contexts integrated in arguments (thus have default values)
  11. type Unknown native
  12. type Bool union { const No, Yes } // no as zero
  13. type Maybe[T] union { T, None }
  14. type None record {}
  15. const None None { new None() }
  16. return() // aka return(None)
  17. type Source[T] restricted Observable[T] // Observable no exception parameter
  18. 'a'.[Maybe[String]] // implicit conversion
  19. value.[Interface] // implicit conversion
  20. computed.[] // unbox
  21. type Number restricted Integer
  22. new Number(1) // only available in the module of Number
  23. new Record { ... }
  24. |-+ project
  25. |-+ module1
  26. | |-- @manifest.vd
  27. | |-- foo.km
  28. |
  29. |-+ module2
  30. |-- bar.km
  31. |-- baz.km
  32. type #XXX -> type XXX data {record,union}
  33. overload: input expr "shape" signature matching
  34. field/case refs to list (xx.(&(branch) => ...))
  35. repl gui (text browser + line edit, tab completion)
  36. - QTextBrowser < QTextEdit::append
  37. - display details of large objects in another window
  38. - consider full debugger (multiple tabs, console + timeline + source + gui)
  39. - debugger (in machine), debugger server, debugger client
  40. - reflect::Type, (param T -> Unknown)
  41. - reflect::Value (implicit cast from T to reflect::Value[T])
  42. - debug::Log('state', state)
  43. encode, decode, decode*: async version
  44. component function (can have preview)
  45. SQLite (QSqlDatabase) project source storage (exclusive conn, diff the whole db)
  46. module < project
  47. UUID for each type/const/operator
  48. project: kvdb (-> gist)
  49. content: modules(types,operators), entry point, dependencies, assets, docs
  50. ui::modal-get-text, ui::TextViewMultiLine, ui::TextInputMultiLine
  51. `interact-with-window` add option `min-size`; `popup` add option `rel-pos`
  52. context menu (QMenu.exec)
  53. var wait = make(chan struct{}) // encapsulate to something in util
  54. qtbinding C side int vs. go side int (not the same type, fix it)
  55. api functions for file dialogs, font dialog, ...
  56. merge go118 branch after go1.18 released
  57. - {prefix,infix,suffix,continuation} operator
  58. prefix (op foo)
  59. infix (op infix foo)
  60. suffix (op method Type.foo)
  61. continuation (op control foo)
  62. (op const)
  63. (op variadic)
  64. (op component)
  65. (op message)
  66. ## IDE Roadmap / Design
  67. CS: code structures
  68. code {
  69. textual: code --parse--> CST --transform--> AST --adapt--> CS
  70. structural: CS
  71. }
  72. file {
  73. textual: state-quo, independent loading mechanics, mods pub/pri convention
  74. structural: 1 file, .kmpkg
  75. }
  76. module can be configured as 'no module prefix' (mod:: not displayed in IDE)
  77. - Browser-like navigation (statement <=> page) (back, forward, recent history)
  78. - Tags for functions/types (tags instead of classes/folders)
  79. - language-based debug-log (we can know the type)
  80. - sample input (to get a clear preview of the dataflow)
  81. ## Refinement
  82. - Code: dummy interface: consider { impl(Interface) } instead of { Interface() }
  83. - Code: AST node renaming
  84. - API: consider renaming wait and tick
  85. - API: revise resource management for files
  86. consider Disposable[T] (ctx-based disposal or persist closable object)