$30 off During Our Annual Pro Sale. View Details »

ooc - A Hybrid Language Experiment (OSCON 2010)

ooc - A Hybrid Language Experiment (OSCON 2010)

I was honored to be amongst famous language designers (Ola Bini, Steve Dekorte, Walter Bright, Jonathan Shapiro, Rich Hikey, Jeremy Ashkenas, Slava Pestov, Christopher Bertels, Rob Pike, Charles Nutter, Gilad Brach) to present my own little programming language: ooc.

Amos Wenger

July 22, 2010
Tweet

More Decks by Amos Wenger

Other Decks in Programming

Transcript

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

    View Slide

  2. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  3. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Why?

    The fate of popular software
    Time
    Users
    Quality
    Features

    View Slide

  4. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Why?

    Languages suck
    void (*signal(int, void (*fp)(int)))(int);

    View Slide

  5. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Why?

    Languages suck
    void (*signal(int, void (*fp)(int)))(int);
    signal: Func(Int, Func(Int)) -> Func(Int)


    View Slide

  6. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Why?

    Tools suck
    small.cpp(17) : error C2664: 'class std::_Treestd::char_traits,class std::allocator >,struct std::pairstd::basic_string,class std::allocator >const
    ,int>,struct std::multimap,c
    std::allocator >,int,struct std::lessstd::char_traits,class std::allocator > >,class std::allocator >::_Kfn
    std::less,class std::allocat
    > >,class std::allocator > ::iterator __thiscall std::multimapstd::basic_string,class std::allocator >,int,s
    std::less,class std::allocat
    > >,class std::allocator >::insert(const struct std::pairstd::basic_string,class std::allocator > const
    &)' : cannot convert parameter 1 from 'const int' to 'const struct std::pair::basic_string,class std::allocator > const ,i
    Reason: cannot convert from 'const int' to 'const struct std::pairstd::basic_string,class std::allocator const ,
    No constructor could take the source type, or constructor overload resolution wa
    ambiguous

    View Slide

  7. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  8. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  9. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  10. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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.

    View Slide

  11. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  12. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Acronym fair

    DRY

    KISS

    IYFF

    YAGNI

    RTFMRTFC

    TMTOWTDI

    View Slide

  13. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Paradigm City

    Procedural
    println("Is i+=1 deterministic?")

    View Slide

  14. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Paradigm City

    Object-oriented
    Window new("Vista").
    add(
    Button new("Buy").
    connect("clicked", ||
    "Seriously?" println()
    )
    ).
    showAll()

    View Slide

  15. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Paradigm City

    Generic programming
    Cell: class {
    data: T
    next: This
    init: func (=data) {}
    }
    c := Cell new(42)

    View Slide

  16. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Paradigm City

    Functional
    (1..100) map(|x| x*x) reduce(|a, b| a+b)

    View Slide

  17. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    Paradigm City

    Preemptive multi-threading
    mutex := Mutex new()
    Thread new(||
    mutex lock()
    // prove Fermat's last theorem
    mutex unlock()
    ) start()

    View Slide

  18. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  19. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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.

    View Slide

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

    View Slide

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

    View Slide

  22. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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.

    View Slide

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

    Did you know that GCC -O2 did TCO?

    Turn segfault into infinite loops.

    Protip: use -O0 (the default) when debugging

    View Slide

  24. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  25. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  26. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

  27. OSCON 2010 http://ooc-lang.org/ Amos Wenger
    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

    View Slide

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

    View Slide