ooc
play

ooc A hybrid language experiment http://ooc-lang.org/ Amos Wenger - PowerPoint PPT Presentation

ooc A hybrid language experiment http://ooc-lang.org/ Amos Wenger OSCON 2010 Why? Software sucks It's unreliable It's slow It's too hard to develop It's not modular enough [insert rant here] The quality of a piece of


  1. ooc A hybrid language experiment http://ooc-lang.org/ Amos Wenger OSCON 2010

  2. Why? ● Software sucks ● It's unreliable ● It's slow ● It's too hard to develop ● It's not modular enough ● [insert rant here] « The quality of a piece of software is inversely proportional to its popularity. » — Buchheit's law http://ooc-lang.org/ Amos Wenger OSCON 2010

  3. Why? ● The fate of popular software Users Quality Features Time http://ooc-lang.org/ Amos Wenger OSCON 2010

  4. Why? ● Languages suck void (*signal(int, void (*fp)(int)))(int); http://ooc-lang.org/ Amos Wenger OSCON 2010

  5. Why? ● Languages suck void (*signal(int, void (*fp)(int)))(int); ✘ signal: Func(Int, Func(Int)) -> Func(Int) ✔ http://ooc-lang.org/ Amos Wenger OSCON 2010

  6. Why? ● Tools suck small.cpp(17) : error C2664: 'class std::_Tree<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >const ,int>,struct std::multimap<class std::basic_string<char,struct std::char_traits<char>,cla std::allocator<char> >,int,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<int> >::_Kfn,s std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator > >,class std::allocator<int> > ::iterator __thiscall std::multimap<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,str std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator > >,class std::allocator<int> >::insert(const struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const , &)' : cannot convert parameter 1 from 'const int' to 'const struct std::pair<class std ::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,int Reason: cannot convert from 'const int' to 'const struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> const ,in No constructor could take the source type, or constructor overload resolution was ambiguous http://ooc-lang.org/ Amos Wenger OSCON 2010

  7. Why? ● Tools suck ● GNU autoconf, automake, autoreconf – masochism ● GNU ld – the kitchen sink of linkers ● GNU make – the brainless servant ● Bad workers blame the tool ● What if good workers do too? ● Break with tradition http://ooc-lang.org/ Amos Wenger OSCON 2010

  8. Why? ● School assignment in C – laziness. ● 4 months later – ooc 0.1 ● « Version 1 Sucks, But Ship It Anyway » – J. Atwood ● Finding a purpose ● To remove obstacles ● To encourage experimentation ● To minimize frustration http://ooc-lang.org/ Amos Wenger OSCON 2010

  9. What? ● Classes, abstract, single inheritance, virtual by default ● Garbage collection (Boehm, opt-out) ● Covers, function overloading ● Partial type inference, more type-checking ● Arrays, pointers, manual memory management ● Generic functions, generic classes, collections ● Interfaces, operator overloading, properties ● Closures, first-class functions, map/filter/reduce http://ooc-lang.org/ Amos Wenger OSCON 2010

  10. What? ● I was gonna describe the syntax here ● But we're short on schedule so I'll just sum it up: ● « ooc syntax is Java without bullshit » - Anonymous ● I'm sorry if you were offended. ● Java offends me too. http://ooc-lang.org/ Amos Wenger OSCON 2010

  11. Design principles ● Build upon, extend, divide and conquer ● Re-use what makes sense, rewrite the rest as we go ● JDK – an example of how NOT to do modularity ● SDK – all you need to get started, easy to swap out ● Dependency management made easy ● Making it easy to use libs encourages good design http://ooc-lang.org/ Amos Wenger OSCON 2010

  12. Acronym fair ● DRY ● KISS ● IYFF ● YAGNI ● RTFMRTFC ● TMTOWTDI http://ooc-lang.org/ Amos Wenger OSCON 2010

  13. Paradigm City ● Procedural println("Is i+=1 deterministic?") http://ooc-lang.org/ Amos Wenger OSCON 2010

  14. Paradigm City ● Object-oriented Window new("Vista"). add( Button new("Buy"). connect("clicked", || "Seriously?" println() ) ). showAll() http://ooc-lang.org/ Amos Wenger OSCON 2010

  15. Paradigm City ● Generic programming Cell: class <T> { data: T next: This<T> init: func (=data) {} } c := Cell new(42) http://ooc-lang.org/ Amos Wenger OSCON 2010

  16. Paradigm City ● Functional (1..100) map(|x| x*x) reduce(|a, b| a+b) http://ooc-lang.org/ Amos Wenger OSCON 2010

  17. Paradigm City ● Preemptive multi-threading mutex := Mutex new() Thread new(|| mutex lock() // prove Fermat's last theorem mutex unlock() ) start() http://ooc-lang.org/ Amos Wenger OSCON 2010

  18. Paradigm City ● Communicating Sequential Processes chan := make(Int) go(|| chan << question answer := ! chan ) 24h for a basic implementation using libcoroutine 80'000 concurrent coroutines = easy, more with tweaks http://ooc-lang.org/ Amos Wenger OSCON 2010

  19. Paradigm City ● ...is pretty much a nice walk with ooc ● Provide the necessary building blocks ● Don't enforce the « one true way » ● Politics != Technology ● High-level low-level language. http://ooc-lang.org/ Amos Wenger OSCON 2010

  20. Generating C – the perks http://ooc-lang.org/ Amos Wenger OSCON 2010

  21. Generating C – the perks throw old VMExcuse("I wasn't ready!"); if name == "__main__": dont_hold_your_breath() http://ooc-lang.org/ Amos Wenger OSCON 2010

  22. Generating C – the perks ● GCC (Gnu Compiler Collection), TI-GCC, mingw32 ● TCC (TinyCC) ● ICC (Intel C++ Compiler) ● Clang (LLVM) ● PCC (Portable C compiler - with tweaks) ● No MSVC (yet?) - they're too busy with C++0x ● ...although in theory it wouldn't be that hard. http://ooc-lang.org/ Amos Wenger OSCON 2010

  23. Generating C – the perks ● Did you know that GCC -O2 did TCO? ● Turn segfault into infinite loops. ● Protip: use -O0 (the default) when debugging http://ooc-lang.org/ Amos Wenger OSCON 2010

  24. ooc - the platform ● Self-hosting ● Without a doubt the best way to generate C ● A real module system. Partial recompilation. ● The compiler as a library ● C from ooc is easy ● ooc from C is easy ( #define OOC_FROM_C ) ● ooc from Python is dead easy! ● ooc from X = reading JSON compiler output http://ooc-lang.org/ Amos Wenger OSCON 2010

  25. ooc – the tools ● Good compiler errors ● Valgrind, GDB ● Alleyoop, Nemiver (GTK frontends for the above) ● Callgrind, Kcachegrind, gprof ● (Pseudo-)REPL, IRC bot ● Emacs mode – flymake, tooltips with compiler errors ● Lots of C bindings http://ooc-lang.org/ Amos Wenger OSCON 2010

  26. Why use ooc? ● Because you have a llamasyntax fetish ● As a better C/C++ ● As a better Java with no VM ● Because of the tools ● Because of the community ● You want to be part of the adventure http://ooc-lang.org/ Amos Wenger OSCON 2010

  27. What's next? ● Optimizations ● Generic calls inlining – expect huge speedups ● (Please, Mr. Shapiro, don't burst into flames) ● Escape analysis, stack-allocation, annotations ● An alternative to exceptions ● Typesystem improvements ● Mixins ● Typestate? ● Meta-programming, compile-time execution http://ooc-lang.org/ Amos Wenger OSCON 2010

  28. That's all, folks! Web http://ooc-lang.org IRC #ooc-lang on Freenode Twitter @nddrylliog Mail amoswenger@gmail.com http://ooc-lang.org/ Amos Wenger OSCON 2010

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend