picture of cup of coffee, courtesy of Wikipedia   The Decaf—Java without the jitters™—Object Library © 2007, Martin Rinehart coffee canisters, courtesy of Flying Bean
Why Decaf? Because beginners need a language, too. Decaf design goals: easy to learn
easy to teach
good for scripting
For pros, decaf.html is all you need. Designed by a backpacker:
"When in doubt, leave it out."
Object Definition Syntax
{items} := [item[, item]...] {items}+ := item [, item]...
{(type1 | type2)}method := {(type1)method} | {(type2)method}
{method1 | method2}=>type := {method1=>type} | {method2=>type}
method=>{type1|type2} := {method=>type1} | {method=>type2}
access := { RO | RW } (default is RW)

TYPENAME (extends type[,{capabilities}+]) {class constants} [({constructor args})]
 methods: {({args})methods[=>{return types}+]}  object data: {TYPE name access}

Capabilities
COMAPARABLE (CLASSNAME)compare
RUNNABLE ()run
XMLABLE ([]CHAR) readxml; ()writexml=>[]CHAR
Base Object
OBJECT () OBJECT type RO, INT length RO (){copy|create|discard}=>BIT []CHAR description RW, INT location RO, INT size RO
Media Objects
AUDIO (OBJECT) BINARYFILE ()play, ()pause, ()rewind, ()skip BINARYFILE source RW
COLOR (OBJECT) (INT red, INT green, INT blue)|(INT color)|COLOR ([INT percent])lighten, ([INT percent])darken INT color RO, INT red, INT green, INT blue
IMAGE (OBJECT) LOCATION, BINARYFILE ()show, ()hide LOCATION loc RW, BINARYFILE source RW, BIT visible
PEN (OBJECT) (INT x, INT y, INT width[, BIT visible]) ()drawto, ()moveto, (?)arc, (INT x, INT y, INT radius[, BIT fill])circle, (?)oval, (?)rect, show(), hide(), string BIT visible, INT x, INT y, INT width
VIDEO (OBJECT) LOCATION, BINARYFILE ()show, ()hide, ()play, ()pause, ()rewind, ()skip LOCATION loc, BINARYFILE source, AUDIO soundtrack RW, BIT visible
Mathematical Objects
ANGLE (OBJECT) ({INT|DECIMAL} angle[, {INT|DECIMAL} parts_in_semicircle]) DECIMAL parts_in_semicircle RW(180); DECIMAL angle RW(0), DECIMAL{sin|cos|tan|cot|sec|csc} RW assignment to sin|cos|... resets angle
LOG (OBJECT, COMPARABLE) DECIMAL base RW(10); DECIMAL value RW(1); DECIMAL log RW(0) Assign to value resets log. Assign to log resets value. Assign to base resets log.
RAND (OBJECT) from min up to, but not including, max DECIMAL min RW(0.0), DECIMAL max RW(1.0), DECIMAL seed RW(random), DECIMAL next RO
RANDOM (RAND) INT min RW(1), INT max RW(100), INT next RO from min through max, inclusive
ROUNDER (OBJECT) DECIMAL value RW, INT rounded RO under .5 round toward zero; .5 and over round away from zero INT integer RO, decimals truncated INT ceiling RO, round up INT floor RO, round down
GUI Objects
These will be taken from an existing library. Probably a cover of Tkinter.
Value Objects
BIT () BIT type RO, 1 length RO (BIT value) () value RW, 0 min, 1 max, INT location RO, INT size RO
BYTE () BYTE type RO, 8 length RO (BYTE value) () value RW, 0 min, 255 max, INT location RO, INT size RO
CHAR () CHAR type RO, 16 length RO (CHAR value) () value RW, 0 min, 64K-1 max, INT location RO, INT size RO
INT () INT type RO, 32 length RO (INT value) () value RW, -2B min, 2B-1 max, INT location RO, INT size RO
DECIMAL () DECIMAL type RO, 64 length RO (INT value) () value RW, min*, max*, INT location RO, INT size RO
* per IEEE 754r
Core Objects
ARRAY (OBJECT) (TYPE type[, []type]) (range)delete; (range, []type)insert; ()pop=>TYPE; (type)push; (range)read=>[]type; (range, []type)write []type values RW, TYPE type RO
BITARRAY (ARRAY) (){clear|set|not}; ([]BIT){and|or|xor}
ERROR (OBJECT)
ERRORS (STACK)
GROUP (OBJECT)
DICT (OBJECT) (range)delete; (range, []valtype, []keytype)insert; ()pop=>(valtype, keytype); (valtype, keytype)push; (range)read=>([]valtype, []keytype) TYPE valtype, TYPE keytype, []valtype values, []keytype keys
LOCATION (OBJECT) INT left, INT top, INT width, INT height (x, y) move; (x, y)resize INT left RW, INT top RW, INT width RW, INT height RW
STRING (OBJECT, COMPARABLE) ENUM(LEFT, RIGHT) ([string]) ([]CHAR substr)locations=>INT[], (INT start[, INT length])substr=>STRING, ([LEFT|RIGHT])trim, words=>[]CHAR, ([CHAR separator]from_words), ([INT list,] []CHAR search, []CHAR replace)replace INT length RO, []CHAR chars RW('')
THREAD (OBJECT) (RUNNABLE object_to_run) ()start, ()stop
TIME (OBJECT, COMPARABLE) (), (INT year, INT month, INT day[, INT hour, INT minute, INT sec[,INT millis]]), (INT hour, INT minute, INT sec[,INT millis]) {()read,()write}=>BIT INT time RO, INT millis RW, INT second RW, INT minute RW, INT hour RW, INT dayOfMonth RW, INT month RW, INT year RW, INT dayOfWeek RO
Disk I/O Objects
BINARYFILE (FILE) ([start,numbytes]){read,write}=>INT length (-1=error) BYTE[] RW
DATAFILE (BINARYFILE) (TYPE) type RO, length RO (span)read=>[]type; ([]type[, start])write; []INT keys RO, []type records RO
DIRECTORY (OBJECT) {FILE | DIRECTORY}{cut|copy|paste|create|delete}=>BIT DIRECTORY[] directories RO, FILE[] files RO, FILEINFO fileinfo RO
FILE (OBJECT) ()open=>BIT; ()close=>BIT; ([]BYTE pathname)move=>bit; ([]BYTE pathname)copy=>bit; ()delete=>BIT FILEINFO fileinfo RO, INT length RO
FILEINFO (OBJECT) []BYTE pathname RO, TIME created RO, TIME modified RO, TIME accessed RO, PERMISSIONS permissions RO
PERMISSIONS (OBJECT) (full Unix w/dumbed-down Win? or just dumbed down?)
TEXTFILE (FILE) BYTE[] separator RW, separators RO(ENUM(UNIX|WINDOWS)) (){read|write}=>INT length (-1 EQ error) [][]CHAR text RW
(OBJECT)

coffee canister, courtesy of Flying Bean Decaf—Java without the jitters™ single coffee bean, courtesy of Caribou Coffee