Your SlideShare is downloading. ×
Sugar Presentation - YULHackers March 2009
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Sugar Presentation - YULHackers March 2009

2,434
views

Published on

The presentation of Sugar, a new programming language that can be used as a replacement to JavaScript.

The presentation of Sugar, a new programming language that can be used as a replacement to JavaScript.

Published in: Technology

1 Comment
1 Like
Statistics
Notes
  • 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.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
2,434
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
28
Comments
1
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

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( quot;https://json.penzance.org/requestquot; quot;https://json.penzance.org/requestquot;, { { user : quot;doctoravatar@yahoo.comquot; user: quot;doctoravatar@yahoo.comquot;, t : quot;vlIjquot; t: quot;vlIjquot;, 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