Sugar Presentation - YULHackers March 2009

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

3 comments

Comments 1 - 3 of 3 previous next Post a comment

  • + guest5c72b guest5c72b 9 months ago
    Wery nice.

    http://www.google.com
  • + spierre spierre 9 months ago
    Hi !

    I agree, and Sugar supports joining expressions on a single line by using the semicolon as well -- Slide 20 is about the declaration of maps where the trailing comma ',' between the element is not necessary because the EOL already denotes the end of the element.
  • + guest06ebf5a3 guest06ebf5a3 9 months ago
    (Slide 20) In my opinion semicolons are the lightest form of syntactic salt, they are a good separation of expressions. JavaScript is one language that falls over itself in this case because of its implicit semicolon insertion.
Post a comment
Embed Video
Edit your comment Cancel

1 Favorite

Sugar Presentation - YULHackers March 2009 - Presentation Transcript

  1. Sugar : More sweetness for programming languages Sébastien Pierre, Datalicious @FreeHackers's Union Mtl, Mar. 2009 www.datalicious.ca | github.com/sebastien/sugar
  2. 1: The Origin
  3. Much in common Many languages … Java, C#, Python, Ruby, JavaScript, ActionScript .... have a lot in common Primitive types : numbers, strings, arrays, etc. Control structures : if, for, while, etc. Constructs : functions, objects, modules, etc. 3
  4. So what's the difference ? Syntax, of course ! F (1) (Algol­style) (f 1) (Lisp­style) [f withN:1] (Smalltalk­style) f←1 (Why not ?) 4
  5. Syntax only ? Well, we have traits* Never change anything (Purely functional) Everything is an object (Purely object­oriented) Evaluate only when needed (Lazy evaluation) Code as data (Homoiconic) * we could actually call that “ language features” 5
  6. Syntax, Traits, and ... ? … the base library ! Lisp : lambda, car, cdr C : libc, POSIX JavaScript : ECMA standard library Java : everything but the kitchen sink 6
  7. The Idea Considerations Languages have a lot in common But I keep rewriting the same code in different languages I came to learn how I prefer to express myself Ideally I would like to write once, in my syntax of choice And translate to the target language 7
  8. However... Languages are still “ black boxes” Cannot change syntax easily Difficult to access program representation We think that the program is the source code, but... The source code is one expression of the program The program is a compound construct interpreted by a runtime system 8
  9. So... Let's do “ something*” that Is a syntactic wrapper for other languages Offers full program model representation Translates to commonly used languages Can be easily customized by mortals * This would be a program that writes programs (meta­program) 9
  10. 2: Sugar A Meta­Programming Language 10
  11. It's all about syntax And we can have the luxury to design it ! readability : visual cues, typographic rhythm expressiveness : constructs to describe common patterns consistency : many developers, same code accessibility : learn it in a few hours 11
  12. We can reuse a lot We take advantage of Language­specific primitive types (lists, maps) Language­specific libraries (file, os, etc.) And we provide Abstraction over language­specific traits Emulation of non­supported primitive types, constructs or operations 12
  13. Design Goals “ A program is a design expressed in code” Goals Be learned in a couple of hours Put focus on software architecture Encourage clear, readable code Favor thinking over typing 13
  14. Inspiration Python : expressiveness and consistency Eiffel : formalizing structure and dynamics Smalltalk : objects and message­passing JavaScript : functions and objects having fun together ! And indirectly, Lisp, Io, Erlang and Scala. 14
  15. The syntax : Primitive Types Lists [] [1,2,3] [“ a” , 2, [3, 4]] Maps/objects­as­maps {} {a:1, b:2} {name:” bob” , email:” bob@gmail.com” } And of course... numbers 1 ­1.0 0xFFAAD0 15
  16. The syntax : Indexes and Slices value [ start index : end index] var list = [1,2,3,4,5,6,7,8,9] list [0] 1 (first element) list [­1] 9 (last element) list [:] [1,2,3,4,5,6,7,8,9] (list copy) list [1:] [2,3,4,5,6,7,8,9] (copy after index 1) list [:­1] [1,2,3,4,5,6,7,8] (copy until last index) 16
  17. The syntax : Iterators The traditional “ for each in” for value, index in [1,2,3,4] print (value, index) end With objects too, one one line for value, index in {a:1,b:2,c:3} ­> print (value, index) And the compact form (with a closure) [1,2,3,4] :: {v,k | print (v,k) } 17
  18. The syntax : Closures Closures as blocks var hello = {message| print (“ You said:” + message) } Compact syntax for callbacks (here using jQuery) $ (“ .sayhello” ) click {alert (“ say hello” )} 18
  19. The syntax : Idioms (1) Spaces instead of dots var user = {name:” bob” , email:” bob gmail.com” } print (user name) Why ? Less dense code / more whitespace space denotes “ message sending” dot denotes “ structural resolution” (ask me for details ;) 19
  20. The syntax : Idioms (2) Indentation instead of commas or semicolons var user = {name:” bob” , email:” bob@gmail.com” } var user = { ← no trailing comma here name : “ bob” email : “ bob@gmail.com” } Why ? Got too many errors for missing or extra trailing comma 20
  21. The syntax : Idioms (3) Optional parens in single­argument invocations print “ Hello, world !” user addPoints 10 $ “ .sayhello” click {alert “ Hello” } article setAuthor 'user ← single quote to denote single­argument Why ? A lot of invocations are single argument 21
  22. The syntax: Constructs Constructs start with @, body is indented @function name arg1, arg2,...rest | Documentation string ... @end The flavors @module, @function @class, @property, @shared, @constructor, @method, @operation 22
  23. Under The Hood Full program model API (LambdaFactory) Constructs Program, Module, Class, Function, ... Control Iteration, Selection, ... Operations Computation, Evaluation, Resolution Meta­programming Flexible plug­in “ program pass” system: Modify, manipulate, analyze your program 23
  24. Plugin Languages Multiple back­ends (provided by LambdaFactory) JavaScript (production quality) ActionScript (not so bad) Python (mature, but missing some stuff) Pnuts (for fast scripting on the JDK) Multiple front­ends Sugar is just one of them ! 24
  25. 3: What's In It for Me ? Sugar in practice 25
  26. Why would I use Sugar ? To replace JavaScript for front (or back) end Web dev : simplified syntax fewer errors simplified semantics less surprised higher level constructs more structured code easy to learn no excuse ! 26
  27. You will code like Douglas Crockford ! In Sugar (with mandatory indentation) In JavaScript var requestNumber = JSONRequest post ( requestNumber = JSONRequest.post( \"https://json.penzance.org/request\" \"https://json.penzance.org/request\", { { user : \"doctoravatar@yahoo.com\" user: \"doctoravatar@yahoo.com\", t : \"vlIj\" t: \"vlIj\", zip : 94089 zip: 94089, forecast : 7 forecast: 7 } }, {requestNumber, value, exception| function (requestNumber, value, exception) { if value if (value) { processResponse(value) processResponse(value); else } else { processError(exception) processError(exception); end } } } ) ); From Douglas Crockford : http://www.json.org/JSONRequest.html 27
  28. Get started ! You'll need Python 2.4+ And install these git clone git://github.com/sebastien/lambdafactory.git git clone git://github.com/sebastien/sugar.git 28
  29. The end Thank you ! www.datalicious.ca www.github.com/sebastien sebastien@datalicious.ca
SlideShare Zeitgeist 2009

+ spierrespierre Nominate

custom

2001 views, 1 favs, 5 embeds more stats

The presentation of Sugar, a new programming langua more

More info about this document

© All Rights Reserved

Go to text version

  • Total Views 2001
    • 1940 on SlideShare
    • 61 from embeds
  • Comments 3
  • Favorites 1
  • Downloads 27
Most viewed embeds
  • 50 views on http://www.ivy.fr
  • 5 views on http://ivy.fr
  • 3 views on http://www.slideshare.net
  • 2 views on http://www.iweb34.com
  • 1 views on http://www.agglom.com

more

All embeds
  • 50 views on http://www.ivy.fr
  • 5 views on http://ivy.fr
  • 3 views on http://www.slideshare.net
  • 2 views on http://www.iweb34.com
  • 1 views on http://www.agglom.com

less

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel
File a copyright complaint
Having problems? Go to our helpdesk?

Categories