diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt index b0a7fac8fd..fa6788979c 100644 --- a/TODO.FACTOR.txt +++ b/TODO.FACTOR.txt @@ -1,7 +1,11 @@ + 0.87: -- live search operations need to hide the minibuffer -- list gadget mouse over help +- list usability + - presentation actions close the popup + - popup: -- close button + - popup: -- pin button +- modules: core/ libs/ apps/ +- xml: "" string>xml miscompiles - top level window positioning on ms windows - scroll>rect broken if there are gadgets in between - completion is not ideal: eg, C+e "buttons" @@ -12,6 +16,7 @@ - httpd crash - fep when closing window - : foo \ each reload foo ; foo eventually crashes + - : foo "ppc" make-image stdio get duplex-stream-out pane-stream-pane pane-clear foo ; foo - these things are "Too Slow": - all-words - make-image @@ -28,7 +33,6 @@ - auto-update browser and help when sources reload - mac intel: struct returns from objc methods - new windows don't always have focus, eg focus follows mouse -- listener commands from a menu should not include 'hide-glass' etc - bogus compile errors? - recompile get/set/>n/n>/ndrop if needed - cross-word type inference diff --git a/examples/mslug-talk.factor b/examples/mslug-talk.factor index 8a92cf9555..75b0a2fd93 100644 --- a/examples/mslug-talk.factor +++ b/examples/mslug-talk.factor @@ -108,7 +108,7 @@ IN: mslug { $code "100 [ 4 mod 3 = ] subset ." } { $code "0 100 [ 1 + * ] reduce ." } } } -{ $slide "Data types - hashtables, lazy lists" +{ $slide "Data types - hashtables" "Hashtables: literal syntax, utility words, higher-order combinators..." { $code "H{ { \"grass\" \"green\" } { \"chicken\" \"white\" } }" @@ -116,16 +116,10 @@ IN: mslug "hash-union" } "Prettyprinter -vs- inspector" - { "Lazy lists" - { $code "\"contrib/lazy-lists\" require" "USE: lazy-lists" } } - { $code - ": squares naturals [ sq ] lmap ;" - ": first-five-squares 5 squares ltake list>array ;" - } "Option+h" } { $slide "Data types - others" - "Queues, graphs, splay trees, double linked lists..." + "Queues, graphs, splay trees, double linked lists, lazy lists..." } { $slide "Variables" "Dynamic scope - WHY?" @@ -153,6 +147,8 @@ IN: mslug } { $code "100 200 " } { $code "rectangle-w ." } +} +{ $slide "Polymorphism" { "Generic words:" { $code "GENERIC: area ( shape -- n )" @@ -161,9 +157,10 @@ IN: mslug "M: circle area circle-r sq pi * ;" } } - { "Philosophy: " { $link array } " -vs- " { $link nth } } + { "Methods in classes -vs- methods in functions?" } + { "Both: " { $link array } " -vs- " { $link nth } } } -{ $slide "Polymorphism continued" +{ $slide "More polymorphism" "Tuples can have custom constructor words" { "Delegation instead of inheritance" { $code @@ -175,23 +172,6 @@ IN: mslug { $code "100 200 " "{ 0.5 0.5 1 } " "area ." } "Advanced features: predicate classes, union classes, method combination" } -{ $slide "The compiler" - "Most code has a static stack effect" - { "Combinators have a static stack effect if quotations are known:" - { $code "[ sq ] map" } } - "First stage: construct dataflow graph" - "Second stage: optimize" - "Third stage: emit machine code" - "Compiled code saved in the image" - "Compiler invoked explicitly (not a ``JIT'')" -} -{ $slide "The compiler, continued" - "Rewrite rules" - "Identities" - "Intrinsics" - "Register allocation" - "Unboxing floats" -} { $slide "The Factor UI" "Factor UI is totally implemented in Factor" "OpenGL, FreeType, plus platform-specific code" @@ -206,11 +186,26 @@ IN: mslug { $slide "Models" { $code "USING: models gadgets-scrolling gadgets-text ;" - " dup swap control-model" + } + "Create an editor, wrap it in a scroller:" + { $code + "" + } + "Length filter:" + { $code "dup control-model" "[ concat length number>string ] " - "" - "2array make-pile" - "\"Model test\" open-titled-window" + } +} +{ $slide "Models continued" + "Layout:" + { $code "{" + " { [ ] f f @top }" + " { [ ] f f @center }" + "} make-frame" + } + "Window:" + { $code + "\"Model test\" open-titled-window" } } { $slide "This talk" @@ -220,6 +215,47 @@ IN: mslug "Let's look at the source code:" { $module "examples/mslug-talk" } } +{ $slide "The compiler" + "Performance is a goal" + "Compromise: The compiler only compiles words with a static stack effect" + "Three stages" + { "First stage transforms a quotation into the " { $emphasis "dataflow representation" } } + "Second stage: high-level optimizations" + "Third stage: register allocation, peephole optimization, code generation" + "Compiled code saved in the image" + "Compiler invoked explicitly (not a ``JIT'')" +} +{ $slide "High-level optimizer" + "Quotations <-> dataflow conversion is ``loss-less''" + "Really, just rewriting quotations" + "Type inference" + "Partial evaluation" + "Arithmetic identities" + "Optimistic specialization" +} +{ $slide "Low level optimizer" + "Caching stack in registers" + "Shuffling renames registers" + "Unboxing floats" + "Tail call optimization" +} +{ $slide "Assember DSL" + "The compiler emits machine code:" + { $code + "char-reg PUSH" + "\"n\" operand 2 SHR" + "char-reg dup XOR" + "\"obj\" operand \"n\" operand ADD" + "char-reg-16 \"obj\" operand string-offset [+] MOV" + "char-reg tag-bits SHL" + "\"obj\" operand char-reg MOV" + "char-reg POP" + } +} +{ $slide "Assember DSL - continued" + { "It's all done with " { $link make } } + { $code "USE: assembler" "[ EAX ECX MOV ] { } make ." } +} { $slide "The end" { $url "http://factorcode.org" } { $url "http://factor-language.blogspot.com" }