You are on page 1of 17

Fancy

www.fancy-lang.org
chris@fancy-lang.org
Inspiration

 Smalltalk
 „reine“ Objektorientierung & spätes Binding
 Ruby
 einfache Syntax
 Text-basiert (anstatt Image-basiert)

 Erlang
 Actor-Concurrency
 Verteilte Systeme
 Threads & Locks sind ungeeignet
Motivation

 Interesse und Spaß


 Forschungsprojekt
 Auch für Laien relativ einfach zu verstehen
 Viele vorhandene Sprachimplementierung sind
relativ schlecht dokumentiert (→ Quellcode)
 Nebenläufigkeit mit reiner Objektorientierung
Syntax: Hello World
Syntax: Klassendefinition
Syntax: Blöcke (Closures)
Codebeispiele
Fancy in Fancy erweitern

 Ursprünglich:
 Großteil der Stdlib in Fancy selbst geschrieben
 Vorteil: Schön, ausdrucksstark, kompakt
 Nachteil: Schlechte Performance :(
Fancy in Fancy erweitern

 Beispiel C++ vs Fancy:


Fancy in C++ erweitern
Features

 Konservativer Garbage Collector (BoehmGC)


 Closures
 Klassendefinitionen
 Klassen- & Instanzmethoden
 Nachrichtenbasiert
 Methoden dienen lediglich „Nachrichten-Handler“
 Was mit einer Nachricht gemacht wird, kann jedes
Objekt autonom entscheiden, falls erwünscht
 → unknown_message:params:
Features

 Alles ist ein Objekt, inklusive:


 Klassen
 Objekte (duh!)
 Methoden
 Blöcke (Closures / Anonymous Methods)
 Scopes (derzeit deaktiviert aus Performancegründen)
 Nachrichten & deren „Versand“ (z.T. unvollständig)
 Dynamische Bindung & Typisierung
 Wichtiges Konzept für DSLs
 Metadaten
Features

 Exception Handling

 Nur wenige speziell reservierte Wörter, u.a.:


 def, class, actor, try, catch, finally, require, super
 Spezielle Operatoren:
 $, .
Features

 Literale Ausdrücke für:


 Arrays: [1,2,3]
 Hashes: <[:foo => 42]>
 Zahlen: 12, 12.123
 Symbole: :foo, :bar, :wasgeht_123
 Strings: „foo“, „bar“
 Reguläre Ausdrücke: r{[a-Z]*(foo|ba(r)+)}
Features

 Bisher implementiert
 Array, Block, Class, Console, Directory, File,
Enumerable, Hash, NilClass, TrueClass, Number,
Object, Set, String, Symbol
 FancySpec
TDD-Library ähnlich zu Rubys Rspec
→ Tests für alle eingebauten Klassen vorhanden
(siehe tests/ Ordner)
Features

 Was fehlt noch?


 Sockets
 Ausbau der bisherigen Klassen & Stdlib
 Pattern-Matching
 Prozesse (à la Erlang)
 ggf. Threads
 u.v.m., u.a. eine Killer-App ;)
Mehr Infos

 Website:
 http://www.fancy-lang.org
 Email:
 chris@fancy-lang.org
 GitHub Repository:
 http://github.com/bakkdoor/fancy/
 Google Group:
 http://groups.google.com/group/fancy-lang