Giter Site home page Giter Site logo

coco's Introduction

Coco

is a CoffeeScript dialect that aims to be more radical and practical.

Why

On its way to hide JavaScript's bad parts, CoffeeScript has accumulated own quirks: horrible variable scope, awkward ranges, confusing/pointless keywords, long extension, and so on. Coco tries to amend them, entwining good parts of both.

Principles

  • Respect JavaScript/ECMAScript semantics.
  • Die for DRY.
  • Perl over Ruby.
  • Fewer keywords, punctuations and runtime errors.

Differences

Documents

Installation

git clone git://github.com/satyr/coco.git && cd coco && bin/coke i

via npm

npm i -g coco

Changelog

0.7.0b

  • Caught up node.js 0.6.x.
  • superclass now points to the function class extends.
  • super now relies solely on superclass rather than requiring special forms like C::m = ->.
  • of no longer delegates to Array::indexOf, making it consistent with for-of behavior.
  • --print no longer implies --compile.

0.6.7

0.6.6

  • Added unary assignments: !! = x => x = !!x
  • Made a? <<< b short for a <<< b if a?.
  • Improved stack traces from directly run .co files.

0.6.5

  • case/of/instanceof now works better with array slice.
  • instanceof now rejects invalid right operands.

0.6.4

  • Unary operators now spread into an array operand: +[a, b] => [+a, +b]
  • .. now points to the constructor under class.
  • coke now works from subdirectories. (coffee#1687)

0.6.3

  • Added pipe operator: f! => g _ => _ = f!; g _
  • Fixed identifier lexing as per ES5.
  • Improved label handlings.
  • Helper functions are now declared last. (coffee#1638)

0.6.2

  • Added character ranges: [\a to \d] => [\a \b \c \d]
  • Added named destructuring: {p, q}:o = f! => o = f!; {p, q} = o
  • Numbers can no longer start with ..
  • function can no longer prefix ->/~>. Use ~function to declare bound functions instead.

0.6.1

  • Allowed line folding after for prepositions.
  • importing onto a soaked expression is now safe.
  • --json now modifies --ast or --compile.
  • Fixed #81 etc.

0.6.0

Additions

Changes

  • Added object slice.
  • Added bang call: f! => f()
  • Revised clone syntax from x{} to ^x.
  • Revised semiautovivification syntax from .!/.@ to .@/.@@.
  • Variable interpolations no longer require braces: "(#id)" => "(" + id + ")"
  • Spaced dots now close implicit calls. See coffee#1407.
  • Direct calls to super now delegate this.
  • extended hook is back.
  • from of for is now optional, meaning from 0. tilless from is no longer allowed.

0.5.4

  • while/until can now have update clause after test clause: continue while f(), g() => for (; f(); g()) {}
  • that no longer triggers anaphoric conversion under unless/until.
  • Disallowed a.=b = c p:~ (a, b) -> f ..., a etc.
  • Fixed coffee#1416.

0.5.3

  • Added do-while/until construction.
  • Added $ flag to regexes. Same as .source, but more efficient.
  • Suppressed implicit return on newed/setter functions.
  • Sped up lexer.

0.5.2

  • Added !? (inexistence) operator.
  • function no longer requires parens around parameters.
  • class block is now mandatory.
  • Bug fixes: coffee#1352 coffee#1354

0.5.1

  • a.b.c?.=d.e now works as expected.
  • a[b, c] = d now works as expected.
  • extras/coco.js works again on WSH.
  • --output implies --compile again.

0.5.0

  • Added ** operator.
  • Overloaded +/-// (in addition to *) for arrays and strings.
  • Revised let: let (a) ~> => let a then
  • Allowed underscores within number literals.
  • Major regex changes:
    • Dieted heregex: /// re /// => // re //
    • Allowed leading whitespace in normal regex literals when unambiguous.
    • No longer accepts invalid regexes.
  • -> is now optional when function is used.
  • case accepts comma-separated tests again.
  • return/throw can now take a block.
  • REPL now uses ^J to continue lines.

0.4.2

  • Enabled:
    • ADI on ?.
    • ACI on ++/--
    • conditional destructuring assignments
    • colors and tab completion in REPL
  • Made leading *s serve like list markers.

0.4.1

  • Added string/array multiplication.
  • Added label support.
  • Aliased constructor as ...

0.4.0

  • Added let. Unary do is back at being simple call.
  • Added with.
  • Added semiautovivification.
  • Made :: a pure sugar for prototype, which can now directly refer to @:: under class body.
  • ?. can now appear anywhere a normal dot can be used.
  • ~. is changed to . ~.
  • new no longer accepts splatted arguments.
  • --interactive now works with --compile and --bare.
  • Renamed --nodes option and .nodes method to --ast/.ast.
  • Fixed the performance bug wrt long method chains.
  • Quit supporting node.js 0.3.x or lower.

0.3.2

  • Unrestricted ADI for identifiers beyond @ and ::.
  • Expanded property shorthands beyond @foo.
  • Added typeof!, which inspects the internal [[Class]] property.
  • Added shebang support.
  • REPL results now evaluate more intuitively.
  • Disallowed whitespace mixup for indentations.

0.3.1

  • debugger now works anywhere.
  • Revised heregex flag syntax: ///#{x}#{y}///? -> RegExp('' + x, y);
  • Removed Coco.eval.
  • Made extras/coco.js work as a mini-compiler on WSH.
  • Added extras/mode-coco.js, an editing mode for Ace.
  • Added --json option.

0.3.0

Pure Additions

  • Added backcall, a sugar to flatten nested callbacks.
  • do block can now work as a pair of normal parentheses.
  • Improved ACI (automatic comma insertion): f {} [] x -> f({}, [], x);
  • Improved ADI (automatic dot insertion): @@0'!' -> arguments[0]['!'];
  • Multiline block on the RHS of object property now works as an implicit array.
  • Heregexes now support dynamic flags: /// x #{? y } /// -> RegExp('x', y);
  • Enabled compound accessigns: a.+=b -> a += a.b;
  • ... in array destructuring (same as ...[]) now skips items rather than sliceing them. (coffee#870)
  • Compilation errors now report line numbers.
  • Coco object now emits more events for use with --require.

Incompatible Changes

  • => -> ~>
  • &. -> ~.
  • Braceless objects no longer consume property shorthands. (coffee#618)
  • Indentations within non-here strings are now stripped.
  • Fixed block comment syntax to good ol' /* */.
  • @0 is now this[0] rather than arguments[0].

0.2.2

  • is not is the new isnt.
  • @'++' is now valid as a shorthand for @['++'].
  • Commas between primitive values are now optional.
  • coke now automatically aliases tasks.
  • extras/coco.js now works as a Gecko JS Module.
  • Grouped documentation suite into doc/ for portability.
  • Rewrote src/optparse.co.

0.2.1

  • Added numeric ranges.
  • Destructuring assignments can now specify default values using logical operators. Default arguments syntax has been changed accordingly. ((a || b) -> instead of (a ||= b) ->)
  • do now performs special conversions against function literals with parameters, making it work as pseudo-let and Coffee 1.0.0 compliant.
  • Allowed for i from x then as a sugar for for i from 0 til x then.
  • Disallowed duplicate formal arguments.
  • Improved syntax-highlight in src/index.html.

0.2.0

  • Version bump for Xmas, in concert with Coffee 1.0.0.
  • @@ is now a shorthand for arguments.
  • do can now indicate a call against indented arguments.
  • and and or now close implicit calls, making you write even less parens: f x and g y or z -> f(x) && g(y) || z;
  • catch's variable declaration is no longer required.
  • a<[ b c ]> is now equivalent to a[\b, \c] (was a(\b, \c)).
  • case now requires brackets to have multiple conditions.
  • Added --nodejs option. See coffee#910.
  • Renamed --stdio to --stdin.

0.1.6

  • Added character/word literal: \C + \++ -> 'C' + '++';
  • Retrieving multiple properties at once is now possible: a[b, c] -> [a[b], a[c]];
  • Destructuring into an object's properties is now possible:
    • a[b, c] = d -> a[b] = d[0], a[c] = d[1];
    • a{b, c} = d -> a.b = d.b, a.c = d.c;
  • Compound assignments can now destructure: [@a, @b] /= c -> this.a /= c[0], this.b /= c[1];

0.1.5

  • Conditional control structures can now be anaphoric; that within if, while or case block now refers to the condition value.
  • Decimal numbers can now have arbitrary trailing alphabets as comments. e.g. 9times, 1.5s
  • Added <<</<<<< as aliases to import/import all
  • non-ASCII identifiers are now allowed.

0.1.4

  • . and its families can now be used with numbers and strings, instead of []. a.0.'0' compiles to a[0]['0'].
  • Added syntax for cloning objects; obj{key:val} acts like a simple version of ES5 Object.create, creating a prototypal child of obj and assigning to .key with val.
  • default arguments can now choose to use ||/&&.
  • super under a class block now refers to the superclass.
  • .coffee extension is no longer supported.

0.1.3

  • Compilation now prefers single quotes.
  • AST now compiles faster, roughly 1.4 times than 0.1.2.
  • []/{} can now be safely used as an placeholder within array destructuring.
  • Improved --nodes output.

0.1.2

  • ... is now prefix.
  • {0: first, (*-1): last} = array now works.
  • Added --lex to the coco utility. Removed --lint.
  • src/ now has doc view.

0.1.1

Release.

coco's People

Contributors

satyr avatar jashkenas avatar stanangeloff avatar cehoffman avatar matehat avatar sstephenson avatar tim-smart avatar chrislloyd avatar olsonjeffery avatar zaach avatar michaelficarra avatar drnic avatar brodyberg avatar tanob avatar holmsand avatar track-com avatar srijs avatar dpritchett avatar gfodor avatar leobm avatar hugs avatar trevorburnham avatar alotofnoodles avatar noonat avatar

Stargazers

Jan Mareš avatar  avatar

Watchers

Jan Mareš avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.