SlideShare a Scribd company logo
Remix Your
Language Tooling




Lennart C. L. Kats (@lennartcl)
Cloud9 IDE
Venture capital


30 employees


2 offices
JavaScript
UNDER CONSTRUCTION
Remix Your Language Tooling (JSConf.eu 2012)
browser.js
db.js
server.js
*.js
~300,000
   lines
           of
      JavaScript
Tooling matters
Remix Your Language Tooling (JSConf.eu 2012)
Tooling matters
especially for JavaScript
C#, C++, Java?
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
Iterating using undeclared variable
Remix Your Language Tooling (JSConf.eu 2012)
Warning: you are in an anonymous inner function with its
                   own “this” pointer
Remix Your Language Tooling (JSConf.eu 2012)
Did you mean “length”?
Remix Your Language Tooling (JSConf.eu 2012)
Intelligent code completion
Complex refactoring
9
TypeScript


•   Type Annotations

•   Modules

•   Classes
function add(num1,
             num2) {
    return num1 + num2;
}

var result = add(1, 2);
function add(num1: number,
             num2: number) {
    return num1 + num2;
}

var result = add(1, 2);
function add(num1: number,
             num2: number) {
    return num1 + num2;
}

var result = add(1, true);
function add(num1: number,
             num2: number) {
    return num1 + num2;
}

var result = add(1, true);


          I’m afraid I can’t let you do that, Dave.
MAKE CODE
     Y
     l

 NOT WAR
Remix Your Language Tooling (JSConf.eu 2012)
DEMO
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
MAKE CODE
     Y
     l
MAKE CODE
     Y
     l
MAKE CODE
     Y
     l
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
What if we can REMIX
 Language Tooling?
Remix Your Language Tooling (JSConf.eu 2012)
If only things were this
         simple...
If only things were this
         simple...
If only things were this
         simple...
Remix Your Language Tooling (JSConf.eu 2012)
MAKE CODE
     Y
     l
A client-side plugin
with a server-side
     back-end
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
How can things be that
          simple...
    Command-line tool:

•   you tell it what to do

•   you give it an input

•   it returns a result
How can things be that
          simple...
    Command-line tool:

•   you tell it what to do

•   you give it an input

•   it returns a result


    => it’s a functional interface!
How can things be that
      simple...


   “Functional is the New Black” *




                          *Elise Huard, tomorrow
Functional language
        tooling interface
•   handlesLanguage()
•   parse()
•   analyze()
•   outline()
•   complete()
Each service is described
   by a single function
The interface is fully
         technology agnostic

Accelerating the creation of customized, Language-Specific IDEs in Eclipse,
Charles et al., OOPSLA 2009
So,
how do you implement one
      of these functions?
Compiler


 Parser



Analyzer
Code   Parser   AST
AST   Analyzer   feedback
Reuse existing tooling
   where you can

 Zeon                  Narcissus


            UglifyJS

                       Esprima
   JSLint
Don’t do it with your
       hands
Reusable language tooling
             Parsers


        Parser generators


       Analysis frameworks
treehugger.js
Remix Your Language Tooling (JSConf.eu 2012)
Describe each service
 by a single function
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your
             Language Tooling



http://github.com/lennartcl
http://twitter.com/lennartcl
http://lennart.cl               http://c9.io

More Related Content

PDF
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
PDF
The Spoofax Language Workbench (SPLASH 2010)
KEY
Using Aspects for Language Portability (SCAM 2010)
KEY
Language Engineering in the Cloud
KEY
Test-driven language development
PPSX
Community Tech Days C# 4.0
PPT
C++ to java
DOC
Source-to-Source Compiler
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
The Spoofax Language Workbench (SPLASH 2010)
Using Aspects for Language Portability (SCAM 2010)
Language Engineering in the Cloud
Test-driven language development
Community Tech Days C# 4.0
C++ to java
Source-to-Source Compiler

What's hot (18)

PDF
Create Your Own Language
PDF
LIL Presentation
PDF
Python for Swift
PPT
Intro dotnet
PPTX
C-Sharp 6.0 ver2
PPTX
C++vs java
PPTX
C# language
PPT
A First Look at Google's Go Programming Language
PDF
Log cat kotlindsl
PPT
Introduction to Go-Lang
ZIP
An Introduction to PyPy
PDF
CS4200 2019 Lecture 1: Introduction
PDF
PyPy
PPT
a quick Introduction to PyPy
PDF
Lets Go - An introduction to Google's Go Programming Language
PPTX
2CPP02 - C++ Primer
PDF
Programming Language Selection
Create Your Own Language
LIL Presentation
Python for Swift
Intro dotnet
C-Sharp 6.0 ver2
C++vs java
C# language
A First Look at Google's Go Programming Language
Log cat kotlindsl
Introduction to Go-Lang
An Introduction to PyPy
CS4200 2019 Lecture 1: Introduction
PyPy
a quick Introduction to PyPy
Lets Go - An introduction to Google's Go Programming Language
2CPP02 - C++ Primer
Programming Language Selection
Ad

Similar to Remix Your Language Tooling (JSConf.eu 2012) (20)

PDF
A New Baseline for Front-End Devs
KEY
Exciting JavaScript - Part II
KEY
JavaScript Neednt Hurt - JavaBin talk
PDF
Choosing Javascript Libraries to Adopt for Development
PDF
03 Advanced JavaScript
PDF
Js in-ten-minutes
PPTX
Awesomeness of JavaScript…almost
PPTX
Maintainable JavaScript 2012
PDF
A Re-Introduction to JavaScript
PDF
Javascript toolkit
PDF
Javascript toolkit
PPTX
JS - Basics
PDF
javascript teach
PDF
JSBootcamp_White
PPTX
JS Basics
PPTX
Front end fundamentals session 1: javascript core
PDF
Practical pairing of generative programming with functional programming.
PDF
Functional Programming in JavaScript
PDF
Intro to React
PDF
Surviving javascript.pptx
A New Baseline for Front-End Devs
Exciting JavaScript - Part II
JavaScript Neednt Hurt - JavaBin talk
Choosing Javascript Libraries to Adopt for Development
03 Advanced JavaScript
Js in-ten-minutes
Awesomeness of JavaScript…almost
Maintainable JavaScript 2012
A Re-Introduction to JavaScript
Javascript toolkit
Javascript toolkit
JS - Basics
javascript teach
JSBootcamp_White
JS Basics
Front end fundamentals session 1: javascript core
Practical pairing of generative programming with functional programming.
Functional Programming in JavaScript
Intro to React
Surviving javascript.pptx
Ad

Recently uploaded (20)

PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Approach and Philosophy of On baking technology
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Machine learning based COVID-19 study performance prediction
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPT
Teaching material agriculture food technology
PPTX
Big Data Technologies - Introduction.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
sap open course for s4hana steps from ECC to s4
Understanding_Digital_Forensics_Presentation.pptx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
The AUB Centre for AI in Media Proposal.docx
MIND Revenue Release Quarter 2 2025 Press Release
Per capita expenditure prediction using model stacking based on satellite ima...
NewMind AI Weekly Chronicles - August'25 Week I
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Electronic commerce courselecture one. Pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Approach and Philosophy of On baking technology
Building Integrated photovoltaic BIPV_UPV.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Machine learning based COVID-19 study performance prediction
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
20250228 LYD VKU AI Blended-Learning.pptx
Teaching material agriculture food technology
Big Data Technologies - Introduction.pptx
Review of recent advances in non-invasive hemoglobin estimation
Digital-Transformation-Roadmap-for-Companies.pptx
sap open course for s4hana steps from ECC to s4

Remix Your Language Tooling (JSConf.eu 2012)

Editor's Notes

  • #2: How to Effectively Build Language Tooling\n\n... or, alternatively, how WE can remix OUR language tooling\n
  • #3: \n
  • #4: \n talk today will focus on TOOLING\n
  • #5: \n
  • #6: \n
  • #7: \n\none of the pioneers in programming language design\n\none of the first women in the US to receive a PhD in CS\n
  • #8: \n
  • #9: - several years since I first tried JavaScript. think it's been over 10 years.\n - copy/pasting for popup menus on web pages\nBack when everybody was still using “Under Construction”\n\n\n\n\nhttp://contemporary-home-computing.org/still-there/geocities.html\n
  • #10: Things have changed since.\n\n\n\n\n\n\n\nhttps://commons.wikimedia.org/wiki/File:Beta-badge.svg\n\n\n\n
  • #11: \n
  • #12: \n
  • #13: \n
  • #14: \n
  • #15: “Application Scale JavaScript”\n“Last audience: shocked, mix of surprise and anger”\n
  • #16: \n
  • #17: \n
  • #18: \n
  • #19: \n
  • #20: \n
  • #21: Is there anyone in the audience who knows JavaScript and can point out an error in this code?\n
  • #22: \n
  • #23: \n
  • #24: \n
  • #25: \n
  • #26: \n
  • #27: \n
  • #28: \n
  • #29: \n
  • #30: \n
  • #31: \n
  • #32: \n
  • #33: \n
  • #34: Any IDE that’s worth anything\n
  • #35: \n
  • #36: Two reasons for doing an IDE in the cloud:\n- one is all the reasons anyone would make any application online. We’re JavaScript developers, why would our IDE not be online?\n- the other is nice pictures of clouds\n\nNice place of fluffy clouds, but new things keep happening:\n- new libraries, new ways of using the language, new platforms\n
  • #37: \n
  • #38: \n
  • #39: \n
  • #40: \n
  • #41: Optional types, if you want you can declare the type of any function, property, or variable\n
  • #42: \n
  • #43: \n
  • #44: as a language tooling guy I must say I like these extensions\n “lots of controversy”; yet another compile-to-js, will make debugging harder, yadayada and so on. \n at Cloud9 we really only care about making you more productive\n so by the immortal words of my colleague Garen,\n
  • #45: how long did it take us to support it?\n one day.\n
  • #46: how long did it take us to support it?\n one day.\n
  • #47: \n
  • #48: how long did it take us to support it?\n one day.\n
  • #49: <show terminal screenshot installing typescript and having it output errors; show size of compiler>\n not minified; but it’s application-scale\n\n
  • #50: <show terminal screenshot installing typescript and having it output errors; show size of compiler>\n not minified; but it’s application-scale\n\n
  • #51: <show terminal screenshot installing typescript and having it output errors; show size of compiler>\n not minified; but it’s application-scale\n\n
  • #52: syntax highlighter\n terminal\n this took maybe 30 minutes to complete\n the other thing we use is NPM: users can install anything they want in their dev instance, including the typescript compiler\n
  • #53: syntax highlighter\n terminal\n this took maybe 30 minutes to complete\n the other thing we use is NPM: users can install anything they want in their dev instance, including the typescript compiler\n
  • #54: \n
  • #55: \n"c9 been around, now at the point where the community can make awesome tools\n\nAs of today, we’re opening up Cloud9. We’re making it possible to ...\n\n“i’ll show you how you can do that”\n
  • #56: We want to make it possible to build that villa for any language. For any library.\n
  • #57: \n
  • #58: \n
  • #59: \n
  • #60: \n
  • #61: \n
  • #62: \n
  • #63: <what if we can remix>\n \n \n \n \n \n http://egonego.blogspot.nl/\n
  • #64: \n
  • #65: Why in the age of social coding is it so hard to remix language tooling?\n
  • #66: <show terminal screenshot installing typescript and having it output errors; show size of compiler>\n not minified; but it’s application-scale\n\n
  • #67: <show terminal screenshot installing typescript and having it output errors; show size of compiler>\n not minified; but it’s application-scale\n\n
  • #68: <show terminal screenshot installing typescript and having it output errors; show size of compiler>\n not minified; but it’s application-scale\n\n
  • #69: <show terminal screenshot installing typescript and having it output errors; show size of compiler>\n not minified; but it’s application-scale\n\n
  • #70: \n
  • #71: \n
  • #72: \n
  • #73: Can apply it to other languages w/ linters\n\nTypeScript, PHP, CoffeeScript, ANTLR\n
  • #74: \n
  • #75: \n
  • #76: No UI or anything involved; it’s just a black box that we call\n
  • #77: Explored before in other projects and in the academic world\n
  • #78: base_handler\n
  • #79: \n
  • #80: Bob Fuhrer, Philippe Charles, and others\n
  • #81: \n
  • #82: \n
  • #83: \n
  • #84: \n
  • #85: \n
  • #86: http://wickedstageact2.typepad.com/life_on_the_wicked_stage_/cool_tools/page/2/\nhttp://dvice.com/pics/hand_wrench.jpg\n
  • #87: And please, people. Don’t do everything with your hands. There are tools for building language components.\n\nhttp://wickedstageact2.typepad.com/life_on_the_wicked_stage_/cool_tools/page/2/\nhttp://dvice.com/pics/hand_wrench.jpg\n
  • #88: Michael Ficarra’s CoffeeScript Redux project\n\n\nused PEG.js\n
  • #89: \n
  • #90: \n
  • #91: \n
  • #92: \n
  • #93: \n
  • #94: \n
  • #95: \n
  • #96: \n
  • #97: \n parting message:\n remix your tooling;\n use generic language-independent frameworks to build language tooling\n\n
  • #98: I’m Lennart Kats and I’ve remixed my name into such sites as github, twitter, and the interwebs\n\nIn the coming weeks we’ll be releasing docs and examples.\n\nYou heard it here first.\n