{"id":20722,"date":"2017-05-18T10:58:21","date_gmt":"2017-05-18T14:58:21","guid":{"rendered":"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/"},"modified":"2022-03-04T23:12:33","modified_gmt":"2022-03-05T04:12:33","slug":"release-1-7-story-behind-bucklescript","status":"publish","type":"post","link":"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/","title":{"rendered":"Release 1.7 and the story behind BuckleScript"},"content":{"rendered":"<div class='bbg-row bbg-bg--white  bbg-row--margin-top-none bbg-row--margin-bottom-none' data-anchor='row-6a04ccdb241cb'>\n  \n\t\n\t\n\t<div class=\"bbg-row--content\">\n\t\t\n\t\t\t<div class='bbg-column bbg-column--width-8 bbg-column--offset-2'>\n\t<p><figure class=\"image-figure\" data-animation=\"\">\n    <img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg\" class=\"attachment-large size-large image-figure__image image-figure__image--primary\" alt=\"\" srcset=\"https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 1024w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 300w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 768w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 170w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 140w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\n    \n<\/figure>\n<div class='bb-wysiwyg'>\n    \n    <p><em>At the <a href=\"https:\/\/www.composeconference.org\/2017\/program\/\" target=\"_blank\" rel=\"noopener noreferrer\">Compose Conference 2017<\/a> in New York City later this week, <a href=\"https:\/\/github.com\/bloomberg\/bucklescript\" target=\"_blank\" rel=\"noopener noreferrer\">BuckleScript<\/a> author Hongbo Zhang, a senior programmer here at Bloomberg, will deliver his first formal conference presentation about BuckleScript and how this optimizing compiler makes functional programming more accessible to JavaScript developers. Ahead of his talk at the conference, we wanted to let him share details about the latest update to the platform.<\/em><\/p>\n\n<\/div>\n<div class=\"bb-separator\" data-color=\"\">\n\t<hr class=\"bb-separator__rule\">\n<\/div>\n<div class='bb-wysiwyg'>\n    \n    <p>It has been a while since we <a href=\"https:\/\/www.techatbloomberg.com\/blog\/bucklescript-1-0-release-arrived\/\" target=\"_blank\" rel=\"noopener noreferrer\">announced<\/a> the release of BuckleScript 1.0, and the quality of the BuckleScript compiler and its build system have improved significantly since then.<\/p>\n<p>As an engineer, I would prefer solving challenging technical problems to writing articles. However, this release includes several large improvements and I believe BuckleScript has reached the point where it may be <em>the<\/em> state-of-art Alt-JS compiler. So I decided to spend some time writing about this release and sharing my story about BuckleScript and JavaScript.<\/p>\n<h2>My experience with JavaScript<\/h2>\n<p>As a developer who knew very little about Web UI development, I was shocked by the power and reach of the JavaScript platform. Back in 2012, when I saw the entire <a href=\"https:\/\/ocaml.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">OCaml<\/a> compiler could be hosted in a <a href=\"https:\/\/try.ocamlpro.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">browser<\/a> and run very smoothly, it truly surprised me, especially given the complexity of the compiler. More than that, the hosted OCaml toplevel also provided the support of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Camlp4\" target=\"_blank\" rel=\"noopener noreferrer\">Camlp4<\/a>, which is another complex beast.<\/p>\n<p>At that point, I got hooked by the power of the JavaScript platform.<\/p>\n<p>The appearances of Node.js and Electron liberated JavaScript from the browser environment. Without a doubt, the JavaScript platform is currently one of the most heavily-invested programming languages.<\/p>\n<h2>Languages running on JavaScript<\/h2>\n<p>I truly love JavaScript as a dynamic language; despite some warts, it is an enjoyable, dynamic language, especially modern JavaScript (ES6 or later).<\/p>\n<p>However, like most dynamic languages, refactoring is a miserable experience in a large code base, and it is not uncommon to have a JavaScript project contain thousands of lines of code. Even trivial refactoring could result in runtime failures. While such bugs may be easy to fix, they are still a waste of time, not to mention mentally disturbing.<\/p>\n<p>That&#8217;s probably why Microsoft, Google and Facebook and other tech companies all started to invest in building type systems on top of JavaScript:<\/p>\n<ul>\n<li>Microsoft produced <a href=\"https:\/\/www.typescriptlang.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">TypeScript<\/a><\/li>\n<li>Facebook developed <a href=\"https:\/\/flow.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Flow<\/a> (written in OCaml)<\/li>\n<li>Google even made several of them: <a href=\"https:\/\/developers.google.com\/closure\/compiler\/\" target=\"_blank\" rel=\"noopener noreferrer\">Google Closure compiler<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Web_Toolkit\" target=\"_blank\" rel=\"noopener noreferrer\">Google Web Toolkit<\/a> and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dart_(programming_language)\" target=\"_blank\" rel=\"noopener noreferrer\">Dart<\/a><\/li>\n<\/ul>\n<p>Of these, TypeScript strikes a great balance. It emits extremely readable JavaScript code and provides excellent tooling support. One of its biggest advantages is that it provides a smooth incremental migration path: rename your file from `.js` to `.ts`, add type annotations, and then your code editor can provide more effective auto-completion.<\/p>\n<p>Unfortunately, TypeScript is <a href=\"https:\/\/github.com\/Microsoft\/TypeScript\/issues\/9825\" target=\"_blank\" rel=\"noopener noreferrer\">unsound by design<\/a>; it is trivial to convert code written in a sound language to an unsound language (like what BuckleScript does), but going the other direction is much more difficult. The type unsoundness means ahead-of-time optimizations are quite challenging.<\/p>\n<p>It is reasonable to expect that using a statically typed language, for example, could provide type soundness and increased opportunities for ahead-of-time optimizations.<\/p>\n<p>So, if you would like a smooth incremental migration path, and want more from static typing, BuckleScript may be the tool for you. It emits readable JavaScript code, does not mangle function and variable names, provides module substitutability (an ES6 module can be literally replaced by an OCaml module), and more:<\/p>\n<ul>\n<li><strong>Type soundness and type based optimizations<br \/>\n<\/strong>Not just type-based refactoring, but also type soundness and type-based optimizations. In BuckleScript, the inferred types are proved to be correct. Therefore, the compiler can take advantage of this information for more aggressive optimizations; see <a href=\"https:\/\/github.com\/neonsquare\/bucklescript-benchmark\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a> and <a href=\"https:\/\/github.com\/bloomberg\/bucklescript#immutable-data-structures\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/li>\n<\/ul>\n<ul>\n<li>Additional code generation back-ends, including <a href=\"https:\/\/github.com\/ocaml\/ocaml\/#overview\">native platform<\/a> and <a href=\"https:\/\/github.com\/sebmarkbage\/ocamlrun-wasm\">WebAssembly<\/a>, and <a href=\"https:\/\/mirage.io\/\">Unikernel<\/a>, will be supported in the future.<\/li>\n<\/ul>\n<ul>\n<li><strong>Lightning fast builds<br \/>\n<\/strong>Imagine being able to complete clean builds of 60 modules in less than half a second! One\u00a0BuckleScript user had this to <a href=\"https:\/\/yawar.blogspot.ca\/2017\/01\/bucklescript-significant-new-ocaml-to.html\" target=\"_blank\" rel=\"noopener noreferrer\">say<\/a>:<\/li>\n<\/ul>\n<blockquote>\n<p style=\"text-align: left\"><em>BuckleScript&#8217;s compiler is insanely fast, because Bob Zhang (the project lead) has taken to heart the OCaml obsession with performance and routinely tries to optimise away millisecond-level delays. Once you get a taste of that speed (entire project compiled faster than you can blink), you&#8217;ll find it difficult to go back to something slower. It&#8217;s like getting to use Git after you&#8217;ve used Subversion all your life.<\/em><\/p>\n<\/blockquote>\n<ul>\n<li><strong>An industry-strength <a href=\"https:\/\/queue.acm.org\/detail.cfm?id=2038036\" target=\"_blank\" rel=\"noopener noreferrer\">functional language<\/a><\/strong><\/li>\n<\/ul>\n<p>I&#8217;m really happy that the JavaScript community has found BuckleScript useful and is contributing to its development. While <a href=\"https:\/\/github.com\/search?o=desc&amp;q=topic%3Abucklescript&amp;s=updated&amp;type=Repositories&amp;utf8=%E2%9C%93\" target=\"_blank\" rel=\"noopener noreferrer\">many companies<\/a> are using it in a wide variety of ways, here are two notable examples of its adoption in the broader JavaScript community:<\/p>\n<ul>\n<li>At <a href=\"https:\/\/youtu.be\/rMf3nDUfUpY?t=7h18m40s\" target=\"_blank\" rel=\"noopener noreferrer\">React Conference 2017<\/a> earlier this year, Facebook revealed that OCaml generated using Reason and BuckleScript powers 25 percent of messenger.com.<\/li>\n<li>Google\u2019s V8 team used BuckleScript to cross-compile a WebAssembly interpreter into a JavaScript library.<\/li>\n<\/ul>\n<p>Please do reach out to me on Twitter (<a href=\"https:\/\/twitter.com\/bobzhang1988\" target=\"_blank\" rel=\"noopener noreferrer\">@bobzhang1988<\/a>) and let me know of other noteworthy projects in which you\u2019re using BuckleScript.<\/p>\n\n<\/div>\n<div class=\"bb-separator\" data-color=\"\">\n\t<hr class=\"bb-separator__rule\">\n<\/div>\n<div class='bb-wysiwyg'>\n    \n    <h2>Challenges solved in <a href=\"https:\/\/github.com\/bloomberg\/bucklescript\/blob\/master\/site\/docsource\/Release.1.7.0.adoc\" target=\"_blank\" rel=\"noopener noreferrer\">this release<\/a>!<\/h2>\n<p>There are many tools which provide the ability to compile an existing language into JavaScript, and they take advantage of the tools and ecosystem around those languages (which would not exist if the creators had invented a new language). However, when compiling a language into JavaScript, if the runtime semantics of the languages do not match well, the results will be less efficient and less elegant. For example, when compiling Haskell into JavaScript, <a href=\"https:\/\/github.com\/ghcjs\/ghcjs\" target=\"_blank\" rel=\"noopener noreferrer\">GHCJS<\/a> suffers these problems due to Haskell\u2019s lazy evaluation semantics.<\/p>\n<p>In contrast, OCaml\u2019s runtime semantics match very well with JavaScript after performing <a href=\"https:\/\/en.wikipedia.org\/wiki\/Type_erasure\" target=\"_blank\" rel=\"noopener noreferrer\">type erasure<\/a>. Prior to this release of BuckleScript though, there were still a few semantic mismatches:<\/p>\n<h3><em>First class uncurried calling convention<\/em><\/h3>\n<p>As a functional language, OCaml only provides curried function calls, and BuckleScript employs fairly <a href=\"https:\/\/bloomberg.github.io\/bucklescript\/js-demo\/#Curry_Optimization\" target=\"_blank\" rel=\"noopener noreferrer\">advanced optimizations<\/a> for the curried calling convention. However, the most efficient code is code which does not rely on optimizations.<\/p>\n<p>With this release, we provide first class support for the uncurried calling convention, and all toolchains provided by BuckleScript can understand the uncurried calling convention.<\/p>\n\n<\/div>\n<figure class=\"image-figure\" data-animation=\"\">\n    <img loading=\"lazy\" decoding=\"async\" width=\"913\" height=\"514\" src=\"https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Uncurried-calling-convention.png\" class=\"attachment-large size-large image-figure__image image-figure__image--primary\" alt=\"\" srcset=\"https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Uncurried-calling-convention.png 913w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Uncurried-calling-convention.png 300w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Uncurried-calling-convention.png 768w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Uncurried-calling-convention.png 170w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&amp;type=webp&amp;url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Uncurried-calling-convention.png 140w\" sizes=\"(max-width: 913px) 100vw, 913px\" \/>\n    \n<\/figure>\n<div class='bb-wysiwyg'>\n    \n    <p>An additional benefit to this language extension is that it works when using the native platform back-end as well.<\/p>\n<h3><em>API documentation<\/em><\/h3>\n<p>Now that `ocamldoc` can\u00a0 understand `[@bs]` natively (instead of printing desugared output), we provide <a href=\"https:\/\/bloomberg.github.io\/bucklescript\/api\/\" target=\"_blank\" rel=\"noopener noreferrer\">API documentation<\/a> for the library shipped with BuckleScript. We plan to ship the documentation generator in the next release.<\/p>\n<h3><em>Additional features<\/em><\/h3>\n<ul>\n<li>More bindings including `Js.Promise.t`<\/li>\n<li><a href=\"https:\/\/bloomberg.github.io\/bucklescript\/Manual.html#_unicode_support_with_string_interpolation_since_1_7_0\" target=\"_blank\" rel=\"noopener noreferrer\">Unicode string and interpolation support<\/a><\/li>\n<li><a href=\"https:\/\/bloomberg.github.io\/bucklescript\/Manual.html#_exception_handling_between_ocaml_and_js_since_1_7_0\" target=\"_blank\" rel=\"noopener noreferrer\">Ability to catch exceptions raised in JavaScript code<\/a><\/li>\n<li><a href=\"https:\/\/bloomberg.github.io\/bucklescript\/Manual.html#__code_bs_open_code_type_safe_external_data_source_handling_since_1_7_0\" target=\"_blank\" rel=\"noopener noreferrer\">Mixed data sources<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/bloomberg\/bucklescript\/issues\/1465\" target=\"_blank\" rel=\"noopener noreferrer\">ES6 support in Safari<\/a><\/li>\n<li><a href=\"https:\/\/bloomberg.github.io\/bucklescript\/docson\/#build-schema.json\">`bs-dev-dependencies` support in the build system<\/a><\/li>\n<li><a href=\"https:\/\/bloomberg.github.io\/bucklescript\/Manual.html#_fixed_arguments_with_arbitrary_json_literal_since_1_7_0\" target=\"_blank\" rel=\"noopener noreferrer\">`bs.as` accepts JSON literals<\/a><\/li>\n<li>Bug fixes, performance improvements, and stress tests (including single files with more than 50K lines of code)<\/li>\n<\/ul>\n\n<\/div>\n\n<\/div>\n\n\n\t\t\n\t<\/div>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"At the Compose Conference 2017 in New York City later this week, BuckleScript author Hongbo Zhang, a senior programmer here at Bloomberg, will deliver his first formal conference presentation about BuckleScript and how this optimizing compiler makes functional programming more accessible to JavaScript developers. Ahead of his talk at the conference, we wanted to let [...]","protected":false},"author":313,"featured_media":19676,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1466],"tags":[1786,1572,1490,1464,1678,1693,1598],"class_list":["post-20722","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech-at-bloomberg","tag-chief-technology-officer","tag-cto","tag-javascript","tag-open-source","tag-programmer","tag-programming","tag-typescript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.11 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Release 1.7 and the story behind BuckleScript | Bloomberg LP<\/title>\n<meta name=\"description\" content=\"BuckleScript is an optimizing compiler that makes functional programming more accessible to JavaScript developers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Release 1.7 and the story behind BuckleScript | Bloomberg LP\" \/>\n<meta property=\"og:description\" content=\"BuckleScript is an optimizing compiler that makes functional programming more accessible to JavaScript developers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/\" \/>\n<meta property=\"og:site_name\" content=\"Bloomberg L.P.\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/bloomberglp\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-18T14:58:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-05T04:12:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"akelber5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@bloomberg\" \/>\n<meta name=\"twitter:site\" content=\"@bloomberg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"akelber5\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/\",\"url\":\"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/\",\"name\":\"Release 1.7 and the story behind BuckleScript | Bloomberg LP\",\"isPartOf\":{\"@id\":\"https:\/\/www.bloomberg.com\/company\/#website\"},\"datePublished\":\"2017-05-18T14:58:21+00:00\",\"dateModified\":\"2022-03-05T04:12:33+00:00\",\"author\":{\"@id\":\"https:\/\/www.bloomberg.com\/company\/#\/schema\/person\/09c9e1a38b7f345ce5c0b4bbde1656a6\"},\"description\":\"BuckleScript is an optimizing compiler that makes functional programming more accessible to JavaScript developers.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":\"1\",\"name\":\"Home\",\"item\":\"https:\/\/www.bloomberg.com\/company\/\"},{\"@type\":\"ListItem\",\"position\":\"2\",\"name\":\"Release 1.7 and the story behind BuckleScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.bloomberg.com\/company\/#website\",\"url\":\"https:\/\/www.bloomberg.com\/company\/\",\"name\":\"Bloomberg L.P.\",\"description\":\"Bloomberg L.P. is the leader in global business and financial information, enabling customers to make smarter, faster, more informed business decisions.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.bloomberg.com\/company\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.bloomberg.com\/company\/#\/schema\/person\/09c9e1a38b7f345ce5c0b4bbde1656a6\",\"name\":\"Bloomberg L.P.\",\"url\":\"https:\/\/www.bloomberg.com\/company\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Release 1.7 and the story behind BuckleScript | Bloomberg LP","description":"BuckleScript is an optimizing compiler that makes functional programming more accessible to JavaScript developers.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/","og_locale":"en_US","og_type":"article","og_title":"Release 1.7 and the story behind BuckleScript | Bloomberg LP","og_description":"BuckleScript is an optimizing compiler that makes functional programming more accessible to JavaScript developers.","og_url":"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/","og_site_name":"Bloomberg L.P.","article_publisher":"https:\/\/www.facebook.com\/bloomberglp\/","article_published_time":"2017-05-18T14:58:21+00:00","article_modified_time":"2022-03-05T04:12:33+00:00","og_image":[{"width":1024,"height":768,"url":"https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg","type":"image\/jpeg"}],"author":"akelber5","twitter_card":"summary_large_image","twitter_image":"https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg","twitter_creator":"@bloomberg","twitter_site":"@bloomberg","twitter_misc":{"Written by":"akelber5","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/","url":"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/","name":"Release 1.7 and the story behind BuckleScript | Bloomberg LP","isPartOf":{"@id":"https:\/\/www.bloomberg.com\/company\/#website"},"datePublished":"2017-05-18T14:58:21+00:00","dateModified":"2022-03-05T04:12:33+00:00","author":{"@id":"https:\/\/www.bloomberg.com\/company\/#\/schema\/person\/09c9e1a38b7f345ce5c0b4bbde1656a6"},"description":"BuckleScript is an optimizing compiler that makes functional programming more accessible to JavaScript developers.","breadcrumb":{"@id":"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.bloomberg.com\/company\/stories\/release-1-7-story-behind-bucklescript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":"1","name":"Home","item":"https:\/\/www.bloomberg.com\/company\/"},{"@type":"ListItem","position":"2","name":"Release 1.7 and the story behind BuckleScript"}]},{"@type":"WebSite","@id":"https:\/\/www.bloomberg.com\/company\/#website","url":"https:\/\/www.bloomberg.com\/company\/","name":"Bloomberg L.P.","description":"Bloomberg L.P. is the leader in global business and financial information, enabling customers to make smarter, faster, more informed business decisions.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bloomberg.com\/company\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.bloomberg.com\/company\/#\/schema\/person\/09c9e1a38b7f345ce5c0b4bbde1656a6","name":"Bloomberg L.P.","url":"https:\/\/www.bloomberg.com\/company"}]}},"featured_image_rendered":"<img srcset='https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&type=webp&url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 5023w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&type=webp&url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 300w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&type=webp&url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 768w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&type=webp&url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 1024w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&type=webp&url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 170w, https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&type=webp&url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg 140w' src='https:\/\/assets.bbhub.io\/image\/v1\/resize?width=auto&type=webp&url=https:\/\/assets.bbhub.io\/company\/sites\/51\/2017\/05\/Hangbo-Zhang523A9080-preferred.jpg' alt='' \/>","category_info":{"name":"Tech At Bloomberg","blog_landing_name":"Tech At Bloomberg"},"_links":{"self":[{"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/posts\/20722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/users\/313"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/comments?post=20722"}],"version-history":[{"count":1,"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/posts\/20722\/revisions"}],"predecessor-version":[{"id":21791,"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/posts\/20722\/revisions\/21791"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/media\/19676"}],"wp:attachment":[{"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/media?parent=20722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/categories?post=20722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bloomberg.com\/company\/wp-json\/wp\/v2\/tags?post=20722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}