- how to create a small module - editor integration - presentations - module system - copy and paste factoring, inverse - help system - tetris - memoization - editing inspector demo - dynamic scope, lexical scope Factor: contradictions? ----------------------- Have our cake and eat it too Research -vs- practical High level -vs- fast Interactive -vs- deployment Factor from 10,000 feet ----------------------- word: named function vocabulary: module quotation: anonymous function classes, objects, etc. The stack --------- - Stack -vs- applicative - Pass by reference, dynamically typed - Stack languages: you can omit names where they're not needed - More compositional style - If you need to name things for clarity, you can: lexical vars, dynamic vars, sequences, assocs, objects... Functional programming ---------------------- Quotations Curry Continuations Object-oriented programming --------------------------- Generic words: sort of like open classes Tuple reshaping Editing inspector Meta programming ---------------- Simple, orthogonal core Why use a stack at all? ----------------------- Nice idioms: 10 days ago Copy and paste factoring Easy meta-programming Sequence operations correspond to functional operations: - curry is adding at the front - compose is append UI -- Written in Factor renders with OpenGL Windows, X11, Cocoa backends You can call Windows, X11, Cocoa APIs directly OpenGL 2.1 shaders, OpenAL 3D audio... Tools ----- Edit Usages Profiler Easy to make your own tools Implementation -------------- Two compilers Generational garbage collector Non-blocking I/O Hands on -------- Community --------- Factor started in 2003 About a dozen contributors Handful of "core contributors" Web site: http://factorcode.org IRC: #concatenative on irc.freenode.net Mailing list: factor-talk@lists.sf.net C library interface ------------------- Efficient No need to write C code Supports floats, structs, unions, ... Function pointers, callbacks Here is an example TerminateProcess process-handle TerminateProcess