smithy icon indicating copy to clipboard operation
smithy copied to clipboard

Smithy Roadmap

Open rbalicki2 opened this issue 5 years ago • 0 comments

This issue is where I document specific aspects of Smithy I would like to improve. If you have questions, please open a new issue!

Make Smithy generic

  • Make Smithy generic over Event, Dom and Node type
  • For example, mount can have the signature
fn mount<Node: 'static, Event, Canvas>(
  mut app: Box<dyn Component<Node = Node, Event = Event, Canvas = Canvas>>,
  mut el: Canvas,
) where
  Event: CanRegisterWith<Canvas> + 'static,
  Canvas: CanPaint<Node> + 'static,
{

(though I think we can improve upon this, as there should only be two free type variables.)

  • Follow up: Derive CanRegisterWith<HtmlElement> for an enum of events, where which events are included is set via crate features.
  • Follow up: Make Smithy work with another Canvas, e.g. TUI

Alternative lisp-like syntax

  • The Smithy engine (i.e. the glue code that manages your component lifecycle) and the macro syntax (smd!(...)) are decoupled
  • Make an alternative macro that works like
rsx![(
  div
  { attribute: "value" }
  { on_click: |_| count += 1 }
  ["current count ", count]
)]
  • Priority: Low
  • Status: Work ongoing

General areas of improvement

  • Decrease file size
  • Compile on stable
  • Stability and introspection
  • Fail gracefully, e.g. if DOM is modified
  • Audit memory leaks, and prevent them if possible
  • Better error messages
  • Better documentation

Specific improvements

  • Loosen restrictions on interpolated variables
  • Tests of Smithy, not of just smd!
  • Derive Component for more types
  • Organize feature flags sanely
  • Do not use thread_local!, but create instances in mount
  • Allow for multiple Smithy apps on the same page
  • Handling spacing after interpolated variables correctly
  • Ensure that the local cache works on windows (or remove the local cache?)
  • Catalog nightly features in use by smithy.
  • Upgrade to the latest nightly
  • Re-do the existing smd! parser
  • Remove ref section if there are no ref's in an smd! node
  • Benchmark performance
  • Sanitize input

NOTE: if you have questions, please file new issues

rbalicki2 avatar Mar 27 '19 02:03 rbalicki2