<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ecmascript &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<atom:link href="https://jessewarden.com/tag/ecmascript/feed" rel="self" type="application/rss+xml" />
	<link>https://jessewarden.com</link>
	<description>Software &#124; Fitness &#124; Gaming</description>
	<lastBuildDate>Sun, 08 Feb 2015 15:35:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://jessewarden.com/wp-content/uploads/2016/08/cropped-Lambda2-32x32.png</url>
	<title>ecmascript &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<link>https://jessewarden.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>JavaScript Transpiled Languages</title>
		<link>https://jessewarden.com/2015/02/javascript-transpiled-languages.html</link>
					<comments>https://jessewarden.com/2015/02/javascript-transpiled-languages.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Mon, 02 Feb 2015 02:15:03 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[6to5]]></category>
		<category><![CDATA[atscript]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[clojurescript]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[coffeescript]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[dart]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[traceur]]></category>
		<category><![CDATA[transpilers]]></category>
		<category><![CDATA[typescript]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=4751</guid>

					<description><![CDATA[Introduction JavaScript is now the assembly of the web. Rather than wait on language innovation in the design by committee web standards world, many choose to use more advanced languages and tooling to develop in, that then compile to JavaScript. Transpilers, also known as source to source compilers or transcompilers, are used to translates source [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>JavaScript is now the assembly of the web. Rather than wait on language innovation in the design by committee web standards world, many choose to use more advanced languages and tooling to develop in, that then compile to JavaScript.</p>
<p>Transpilers, also known as <a href="http://en.wikipedia.org/wiki/Source-to-source_compiler">source to source compilers</a> or transcompilers, are used to translates source code to another form of source code. They areÂ popular and numerous, not just for JavaScript, but also for C, and many other languages. In this article I cover why they are valuable for JavaScript developers, give details on the popular ones in the community, and go over the use case workflow for each.</p>
<p>I&#8217;ve chosen 6 of the most popular JavaScript transpiled languages used for client web application development:</p>
<ol>
<li><a href="http://jessewarden.com/2015/02/javascript-transpiled-languages.html#coffeescript">CoffeeScript</a></li>
<li><a href="http://jessewarden.com/2015/02/javascript-transpiled-languages.html#typescript">TypeScript</a></li>
<li><a href="http://jessewarden.com/2015/02/javascript-transpiled-languages.html#atscript">AtScript</a></li>
<li><a href="http://jessewarden.com/2015/02/javascript-transpiled-languages.html#clojurescript">ClojureScript</a></li>
<li><a href="http://jessewarden.com/2015/02/javascript-transpiled-languages.html#es6">ES6 to ES5</a></li>
<li><a href="http://jessewarden.com/2015/02/javascript-transpiled-languages.html#dart">Dart</a></li>
</ol>
<p><span id="more-4751"></span></p>
<h2>What</h2>
<p>Transpilers allow you to convert your source code in one language, either 1 file or many, into another language. In JavaScript&#8217;s case, you typically write in 1 language such as CoffeeScript, and using a build system such as <a href="http://gulpjs.com/">Gulp</a> or <a href="http://gruntjs.com/">Grunt</a>, it will compile your .coffee files to .js JavaScript files.Â Most also generate <a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">source maps</a> for more streamlinedÂ debugging.</p>
<p>Another use case is the use of annotations where you write comments in the code that have special meaning and reflection API&#8217;s are utilized at runtime to inspect the code&#8217;s meaning and act accordingly. Examples include signifying what type the class is without the need for inheritance which is what AtScript does on top of the TypeScript compiler. Another isÂ describing the static typing contract the function has in JavaScript using the <a href="https://github.com/google/traceur-compiler">Google&#8217;s Traceur</a> compiler. They both will interpret those code comments and generateÂ JavaScript with those special meanings applied.</p>
<h2>Why</h2>
<p>Transpilers in the non-JavaScript past were utilized to convert large code bases to a newer language (such as Python 2 to 3), an old API to a new one, or runtime platform where doing it by hand was impractical and error prone.Â  In the JavaScript world,Â there are a variety of reasons.</p>
<p>The primary reason is that JavaScript innovation is slower than open source and private offerings. It takes a long time to get an ECMAScript feature from committee standard to implemented inÂ all green field browsers. You can use some of those features, and more, in the other languages, today, and still have it run on the standards based, ubiquitous web platform.</p>
<p>Here are few more often cited reasons:</p>
<ol>
<li>JavaScript evolution slow compared to other languages</li>
<li>open source and private languages evolve faster, have more features</li>
<li>sometimes less code</li>
<li>better code</li>
<li>organized code</li>
<li>more language features</li>
<li>leverage existing talent</li>
<li>leverage existing libraries</li>
<li>more efficient runtime</li>
<li>developers are more productive</li>
<li>future proof</li>
<li>clearer code</li>
</ol>
<h2>History</h2>
<p><a href="http://jessewarden.com/wp-content/uploads/2015/02/LLVM-3-0-Officially-Released-bw.png"><img decoding="async" class=" size-thumbnail wp-image-4770 alignleft" src="http://jessewarden.com/wp-content/uploads/2015/02/LLVM-3-0-Officially-Released-bw-150x150.png" alt="LLVM-3-0-Officially-Released bw" width="150" height="150" /></a>Source to source compiling is not a new concept.</p>
<p>In 1981, Digital Research had a program that converted ASM source code for the Intel 8080 processor into A86 source code for the Intel 8086.</p>
<p>In 1983 Cfront was the original compiler for C++ which compiled C++ to C.</p>
<p>In 2000, the <a href="http://llvm.org/">LLVM</a> project was created with a collection of modular and reusable compiler and toolchain technologies. It is used for compiling a variety of of gcc 4.2.1 languages to C. A few of these include Lisp, ActionScript, Ada, D, Fortran, OpenGL, Go, Java, Objective-C, Python, Ruby, C#, and Lua are just a few.</p>
<p>In 2006, Google released Google Web Toolkit, called <a href="http://www.gwtproject.org/">GWT</a>. It enables developers to build cross browser web applications in Java.</p>
<p>Many other source to source compilers have been written forÂ everything to Fortran to Python to either convert an older language to a newer platform, or from an old API to a new one.</p>
<p>Source to source compilers are an old, accepted practice.<br />
<a name="coffeescript"></a></p>
<h2>CoffeeScript</h2>
<h3><a href="http://jessewarden.com/wp-content/uploads/2015/02/coffeescript-logo-bw.png"><img decoding="async" class=" wp-image-4771 size-medium alignnone" src="http://jessewarden.com/wp-content/uploads/2015/02/coffeescript-logo-bw-300x51.png" alt="coffeescript-logo bw" width="300" height="51" srcset="https://jessewarden.com/wp-content/uploads/2015/02/coffeescript-logo-bw-300x51.png 300w, https://jessewarden.com/wp-content/uploads/2015/02/coffeescript-logo-bw.png 450w" sizes="(max-width: 300px) 100vw, 300px" /></a></h3>
<h3>Why</h3>
<p><a href="http://coffeescript.org/">CoffeeScript</a> attempts to expose the good parts of JavaScript and hide the bad parts. Created by the guy responsible for <a href="http://underscorejs.org/">Underscore</a> and <a href="http://backbonejs.org/">Backbone</a>. Benefit is class syntax, fixes JavaScript&#8217;s operators, and has a terse &amp; safe syntax.</p>
<h3>Features</h3>
<ul>
<li>classes with inheritance and super keyword which abstracts away Object.prototype</li>
<li>fixes == equality to work as expected</li>
<li>arrow functions and other shortened initializers for terse code</li>
<li>shortened loop syntax with optimized output and additional keywords</li>
<li>literate coffeescript option which allows code to be written in Markdown</li>
<li>lexical soping of variables (i.e. no need for var keyword)</li>
<li>terse if else then statements, no parentheses or brackets required</li>
<li>rest based parameters</li>
<li>array slice syntax similiar to Python</li>
<li>implied return statement, no need to type it</li>
<li>statements converted to expressions inside closures</li>
<li>uses english for equality operators and compiles down to safe usage</li>
<li>provides existential operator for checking existence of variables</li>
<li>Array/Object destructuring which allows for multiple return values from functions</li>
<li>Function binding for ensuring this scope remains intact</li>
<li>safter switch statements</li>
<li>chained comparrisons</li>
<li>String interpolation</li>
<li>multiline and block strings</li>
<li>Block Regular Expressions (borrows from Perl&#8217;s /x)</li>
</ul>
<h3>Pros</h3>
<ul>
<li>Compiles to nice JavaScript providing good escape hatch if team ends up not liking it</li>
<li>Basically JavaScript, not much to learn</li>
<li>terse code</li>
<li>fixes many of JavaScript&#8217;s basic language problems with safety included</li>
<li>makes classes useable in JavaScript</li>
</ul>
<h3>Cons</h3>
<p>The only con is some developers wish to code only in CoffeeScript, and others do not wish to code in CoffeeScript. These are often quite strong feelings.<br />
<a name="typescript"></a></p>
<h2>TypeScript</h2>
<h3><a href="http://jessewarden.com/wp-content/uploads/2015/02/CRS-56479-bw.png"><img fetchpriority="high" decoding="async" class=" wp-image-4772 size-medium alignnone" src="http://jessewarden.com/wp-content/uploads/2015/02/CRS-56479-bw-300x208.png" alt="CRS-56479-bw" width="300" height="208" srcset="https://jessewarden.com/wp-content/uploads/2015/02/CRS-56479-bw-300x208.png 300w, https://jessewarden.com/wp-content/uploads/2015/02/CRS-56479-bw.png 400w" sizes="(max-width: 300px) 100vw, 300px" /></a></h3>
<h3>Why</h3>
<p><a href="http://www.typescriptlang.org/">TypeScript</a> provides opt-in static typing, class and module syntax, and is based on the ES6 spec. It was created by Anders Hejlsberg of Turbo Pascal, Delphi, and C# fame. Benefit is strong typing with ability to use against 3rd party libraries, package &amp; classes, and backed by Microsoft.</p>
<h3>Features</h3>
<ul>
<li>define strongly typed globals via declare</li>
<li>integrate strong typing to 3rd party libraries via declaration files</li>
<li>strong typing for both built-in primitives, classes, and interfaces</li>
<li>type inference with basic primitives, classes, and interfaces</li>
<li>interfaces can be applied to basic Objects and classes</li>
<li>function literals</li>
<li>class constructor initializers</li>
<li>default parameters</li>
<li>multiple constructor signatures</li>
<li>class inheritance with super keyword</li>
<li>package support via private and public modules</li>
<li>compiler supports generating AMD or CommonJS modules</li>
<li>arrow syntax for function binding</li>
<li>generics</li>
<li>&#8230; and a lot <a href="https://github.com/Microsoft/TypeScript/wiki">more</a>.</li>
</ul>
<h3>Pros</h3>
<ul>
<li>Compiles to nice JavaScript providing good escape hatch if team ends up not liking it</li>
<li>strong typing allows larger projects and teams to find bugs early w/o writing unit tests</li>
<li>classes are made usable in JavaScript with inheritance</li>
<li>Offers package management for classes, unlike CoffeeScript</li>
<li>Like CoffeeScript, a lot of syntactic sugar</li>
</ul>
<h3>Cons</h3>
<p>Typing is not enforced at runtime, only compile time. Also, same problem with CoffeeScript: developers either love or hate it.<br />
<a name="atscript"></a></p>
<h2>AtScript</h2>
<h3><a href="http://jessewarden.com/wp-content/uploads/2015/02/AngularJS_logo.svg-bw.png"><img loading="lazy" decoding="async" class=" wp-image-4773 size-medium alignnone" src="http://jessewarden.com/wp-content/uploads/2015/02/AngularJS_logo.svg-bw-300x80.png" alt="AngularJS_logo.svg bw" width="300" height="80" srcset="https://jessewarden.com/wp-content/uploads/2015/02/AngularJS_logo.svg-bw-300x80.png 300w, https://jessewarden.com/wp-content/uploads/2015/02/AngularJS_logo.svg-bw.png 695w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></h3>
<h3>Why</h3>
<p><a href="https://angularjs.org/">Angular&#8217;s</a> growth in the Enterprise has shown the limits of JavaScript, thus the natural evolution is to a more mature language: TypeScript. However, TypeScript is missing application development features, so the Google Angular team is working with the Microsoft TypeScript team to modify the language &amp; compiler. Specifically class annotations and runtime assertions resulting in an enhanced TypeScript called <a href="https://docs.google.com/document/d/11YUzC-1d0V1-Q3V0fQ7KSit97HnZoKVygDxpWzEYW0U/edit">AtScript</a>.</p>
<h3>Features</h3>
<p>Same as TypeScript. The two additional ones are class metadata annotations and runtime assertions for type safety at runtime. The class metadata annotations are used to denote the Angular component types without having to inherit from a specific class or work within a specific lifecycle API. While it may seem Angular specific, any framework can benefit from class and variable metadata annotations consumed at runtime. <a href="http://aurelia.io/">Aurelia</a> is another MVC framework thatÂ supports AtScript.</p>
<h3>Pros</h3>
<p>All the Pros of TypeScript including:</p>
<ul>
<li>your types being enforced at runtime</li>
<li>can swap out the assertion library with your own</li>
<li>easier &amp; more readable way to declare Angular component types compared Angular 1.0&#8217;s methods</li>
<li>backed by both Google and Microsoft</li>
</ul>
<h3>Cons</h3>
<p>Same as TypeScript, including at the time of his writing, these features are in active development.</p>
<p><a name="clojurescript"></a></p>
<h2>ClojureScript</h2>
<h3><a href="http://jessewarden.com/wp-content/uploads/2015/02/clojure-icon-bw.png"><img loading="lazy" decoding="async" class=" wp-image-4775 size-medium alignnone" src="http://jessewarden.com/wp-content/uploads/2015/02/clojure-icon-bw-300x96.png" alt="clojure-icon-bw" width="300" height="96" srcset="https://jessewarden.com/wp-content/uploads/2015/02/clojure-icon-bw-300x96.png 300w, https://jessewarden.com/wp-content/uploads/2015/02/clojure-icon-bw.png 309w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></h3>
<h3>Why</h3>
<p><a href="http://clojure.org/">Clojure</a> has gained in popularity because it is a functional language that runs on the JVM with concurrency. This same language can be utilized to build client side applications through compilation to JavaScript via the <a href="https://developers.google.com/closure/">Google Closure compiler</a> (note the &#8220;s&#8221; vs. a &#8220;j&#8221;). Touting the same benefits of JavaScript with <a href="http://nodejs.org/">Node</a>, being the same language used on the client and server sharing some of the same libraries.</p>
<h3>Features</h3>
<ul>
<li>functional language, dialect of Lisp</li>
<li>runs on the JVM</li>
<li>supports concurrency written in a synchronous way like Go</li>
<li>optional type hints and type inference to avoid Java reflection</li>
<li>immutable data structures</li>
<li>same language used on the server</li>
</ul>
<h3>Pros</h3>
<ul>
<li>one language for front end and back-end development</li>
<li>supports streams and promises native to the language</li>
<li>immutable data structures are the norm with mutable support enabling easy concurrency with rewind testing support</li>
<li>this makes working with <a href="http://facebook.github.io/react/">React&#8217;s</a> shouldComponentUpdate method insanely efficient and succinct to write</li>
<li>Clojure is a Functional Language</li>
</ul>
<h3>Cons</h3>
<ul>
<li>No popular MVC frameworks ported yet (ie Angular, Backbone, <a href="http://emberjs.com/">Ember</a>). Although one can utilize <a href="https://github.com/purnam/purnam">Purnam</a>, most of these MVC frameworks are OOP based and encourage Clojure Models to be some sort of atom as opposed to being Functional based and using Collections and Streams as the Models.</li>
<li>&#8230; like the Pro, Clojure is a Functional Language</li>
</ul>
<p><a name="es6"></a></p>
<h2>ECMAScript 6 to ECMAScript 5</h2>
<h3><a href="http://jessewarden.com/wp-content/uploads/2015/02/es6-logo-bw.jpg"><img loading="lazy" decoding="async" class=" size-thumbnail wp-image-4776 alignnone" src="http://jessewarden.com/wp-content/uploads/2015/02/es6-logo-bw-150x150.jpg" alt="es6-logo-bw" width="150" height="150" srcset="https://jessewarden.com/wp-content/uploads/2015/02/es6-logo-bw-150x150.jpg 150w, https://jessewarden.com/wp-content/uploads/2015/02/es6-logo-bw.jpg 200w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a></h3>
<h3>Why</h3>
<p>Utilize ECMAScript 6 features of the future, today, while supporting the older browsers of yesterday. Still writing JavaScript, no need to learn a new language. Get a leg up on writing the JavaScript of tomorrow to ensure code bases are easier to modify/reuse in the future. The most common way to do that today is to utilize the <a href="https://6to5.org/">6to5</a> or <a href="https://github.com/google/traceur-compiler">Google Traceur</a> transpilers.</p>
<h3>Features</h3>
<ul>
<li>classes &#8211; no need to agree on an OOP JavaScript pattern or library</li>
<li>modules &#8211; standardized way of organizing code like Java packages</li>
<li>module loading supporting dynamic loading, execution sandbox, and module cache manipulation</li>
<li>private variables</li>
<li>tighter code through arrow functions, object literals</li>
<li>template strings &#8211; safer string creation without a library</li>
<li>destructuring with soft fail pattern matching</li>
<li>constants</li>
<li>iterators like Java and &#8220;for of&#8221;Â support</li>
<li>generators for creating green threads for long running processes</li>
<li>Map, Set, and Weak versions &#8211; updated collection data structures commonly used</li>
<li>Proxy support</li>
<li>Symbols, more powerful Strings for lookups in Maps and Objects</li>
<li>easier to sub-class native classes</li>
<li>various new API&#8217;s to String, Number, Object, and Math</li>
<li>native Promises</li>
<li>reflection api for easier Proxy creation and other higher level tooling</li>
<li>tail calls &#8211; safer recursion</li>
</ul>
<h3>Pros</h3>
<ul>
<li>most ES6 features</li>
<li>team doesn&#8217;t have to learn a new language, it&#8217;s simply JavaScript compiling to JavaScript</li>
<li>you&#8217;re coding the future, today</li>
<li>classes and modules help code quality because of consistency, a core problem in JavaScript applications</li>
<li>module loader helps solve common performance and security issues with JavaScript applications</li>
<li>various features that aren&#8217;t yet implemented are emulated via shims/polyfills that perform well enough</li>
<li>using technology based on web standards ensuring longer term support</li>
</ul>
<h3>Cons</h3>
<ul>
<li>existing JavaScript libraries and frameworks need to be ported, brought into build system, or maintained separately</li>
<li>generators cannot be effectively polyfilled, though polyfills do exist</li>
<li>modules and their loaders do not solve module problem thoroughly&#8230; yet. They are client specific, avoids Common JS, and makes sharing code with Node/io.js challenging. Solution is to use <a href="http://browserify.org/">Browserify</a> and put ES6 classes on module.exports.</li>
<li>most JavaScript coding standards do not yet exist for ES6.</li>
<li>This includes syntax, code quality, and coverage tooling as well.</li>
<li>For many teams not yet used to developing in more enterprise languages (i.e. heavy use of class and module keywords in large codebase), this can be a huge change for them. This is not necessarely the &#8220;safe option&#8221; because &#8220;it&#8217;s just newer, standards based JavaScript&#8221;</li>
</ul>
<p><a name="dart"></a></p>
<h2>Dart</h2>
<h3><a href="http://jessewarden.com/wp-content/uploads/2015/02/dart-logo-wordmarkbw.png"><img loading="lazy" decoding="async" class=" wp-image-4777 size-medium alignnone" src="http://jessewarden.com/wp-content/uploads/2015/02/dart-logo-wordmarkbw-300x80.png" alt="dart-logo-wordmarkbw" width="300" height="80" srcset="https://jessewarden.com/wp-content/uploads/2015/02/dart-logo-wordmarkbw-300x80.png 300w, https://jessewarden.com/wp-content/uploads/2015/02/dart-logo-wordmarkbw-1024x272.png 1024w, https://jessewarden.com/wp-content/uploads/2015/02/dart-logo-wordmarkbw.png 1733w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></h3>
<h3>Why</h3>
<p>For Java developers, a mature OOP language with functional elements on both client and server. For full stack developers using JavaScript frameworks on the client and Node on the server, a better language &amp; compiler for larger scale applications. For gaming developers, much of the same benefits they get with TypeScript, but with more functional elements, cross browser API&#8217;s abstracted for them, with a more powerful compiler to optimize their code. All get a Google run package management system and gain immense runtime speed when code runs in the Dart Virtual Machine. <a href="https://www.dartlang.org/">Dart</a> is the full package.</p>
<h3>Features</h3>
<ul>
<li>Dart language &#8211; like JavaScript, object oriented, optionally strongly typed, generics, classes, packages, libraries, promises, streams, and other functional features including basics like no undefined, and == that works like you&#8217;d expect it to.</li>
<li>Dart SDK &#8211; libraries for client and server, cross browser DOM and other HTML5 API abstractions.</li>
<li>pub &#8211; package management system, much like npm or bower</li>
<li>Dart Editor &#8211; Eclipse based IDE with code hinting, intellisense, and basic refactoring abilities. Includes a GUI on top of pub so you can add/remove dependencies as well as create you own.</li>
<li>Dart VM &#8211; runtime utilizing .dart code to run in a virtual machine for great speed. Currently implemented in Chromium with future plans to bring to Chrome and hopefully implement in other browsers.</li>
<li>dart2js &#8211; advanced compiler that converts dart code to JavaScript. Includes generic and data type optimization, tree shaking, and various metadata/reflection/annotation capabilities. You can optionally leave in runtime assertions for data typing.</li>
</ul>
<h3>Pros</h3>
<ul>
<li>language better suited for larger teams &amp; applications built from scratch specifically for building client and server web applications</li>
<li>mature compiler built with web applications in mind, often generating faster executing JavaScript</li>
<li>Built &amp; run by Google</li>
<li>Core part of the Angular 2.0 build lifecycle</li>
<li>A suite of tools for building web applications</li>
<li>Where Chrome only is an option (kiosks, enterprise networks, etc) Dart VM helps gain fast speed, yet not having to use C/C++ for <a href="https://developer.chrome.com/native-client">Native Client</a> development</li>
<li>same language &amp; libraries used on client and server</li>
<li>easier runtime module creation with retained strong-typing for application optimization (as opposed to custom grunt/gulp builds + <a href="https://github.com/ocombe/ocLazyLoad">ocLazyLoad</a> or <a href="http://requirejs.org/">require.js</a> packaging).</li>
<li>supports debugging directly from an Android device</li>
</ul>
<h3>Cons</h3>
<ul>
<li>Unlike CoffeeScript, TypeScript, ClojureScript, and ES6 to ES5, Dart does not provide an easy escape hatch. The transpiled JavaScript is built for a specific runtime. Thus it is not easy to &#8220;try before you buy&#8221; and thus salvaging your work.</li>
<li>This Dart JavaScript runtime specific code causes challenges when attempting to integrate into existing applications. There is JS interop, however, that allows Dart JavaScript to non-Dart JavaScript communication</li>
</ul>
<h2>Conclusions</h2>
<p><a href="http://jessewarden.com/wp-content/uploads/2015/02/javascript-and-the-good-parts-bw.jpg"><img loading="lazy" decoding="async" class=" wp-image-4778 size-medium alignleft" src="http://jessewarden.com/wp-content/uploads/2015/02/javascript-and-the-good-parts-bw-300x140.jpg" alt="javascript-and-the-good-parts-bw" width="300" height="140" srcset="https://jessewarden.com/wp-content/uploads/2015/02/javascript-and-the-good-parts-bw-300x140.jpg 300w, https://jessewarden.com/wp-content/uploads/2015/02/javascript-and-the-good-parts-bw.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>There are many other<a href="https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js"> transcompiled languages, platforms, and compilers</a> not covered here. The desire for developers to improve various other parts of JavaScript and customize to their team&#8217;s workflow has resulted in a plethora of choices for teams. While it&#8217;s not always clear which choice is the best for the team, what is clear is that transcompiling is a normal practice in JavaScript development, integrates nicely with most build systems, and will continue to improve.</p>
<h2>Special Thanks</h2>
<p>Thanks to <a href="https://twitter.com/nodename">Alan Shaw</a>Â andÂ <a href="https://twitter.com/danielglauser">Daniel Glauser</a> (hire Daniel) for the impromptu Google Hangouts to give my peers and I the lo down on Clojure. Thanks to <a href="https://twitter.com/swannodette">David Nolen</a> for answering my questions and hooking me up with some good Clojure resources to learn. <a href="http://swannodette.github.io/">His blog</a> is crazy and awesome, btw, encourage you to read even if you&#8217;re a clientÂ dev.Â  Thanks to <a href="https://twitter.com/jhooks">Joel Hooks</a>, <a href="https://twitter.com/robpenner">Robert Penner</a>, and <a href="https://twitter.com/bclinkinbeard">Ben Clinkinbeard</a> for clarifying some some finer points and sharing code. Thanks to beer for helping me get through Clojure training.</p>
<p>Title artwork by <a href="http://www.deviantart.com/art/Zelda-Four-Swords-Adventure-189106010">Ry-Spirit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2015/02/javascript-transpiled-languages.html/feed</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
	</channel>
</rss>
