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

ooc
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

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

  • oc

A hybrid language experiment

slide-2
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

slide-3
SLIDE 3

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

Why?

  • The fate of popular software

Time Users Quality Features

slide-4
SLIDE 4

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

Why?

  • Languages suck

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

slide-5
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)

✔ ✘

slide-6
SLIDE 6

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

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

slide-7
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
slide-8
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
slide-9
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
slide-10
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.
slide-11
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
slide-12
SLIDE 12

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

Acronym fair

  • DRY
  • KISS
  • IYFF
  • YAGNI
  • RTFMRTFC
  • TMTOWTDI
slide-13
SLIDE 13

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

Paradigm City

  • Procedural

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

slide-14
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()

slide-15
SLIDE 15

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

Paradigm City

  • Generic programming

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

slide-16
SLIDE 16

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

Paradigm City

  • Functional

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

slide-17
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()

slide-18
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

slide-19
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.
slide-20
SLIDE 20

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

Generating C – the perks

slide-21
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()

slide-22
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.
slide-23
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
slide-24
SLIDE 24

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

  • oc - 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
slide-25
SLIDE 25

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

  • oc – 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
slide-26
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
slide-27
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
slide-28
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 amoswenger@gmail.com