{"id":614,"date":"2022-07-27T16:00:57","date_gmt":"2022-07-27T16:00:57","guid":{"rendered":"https:\/\/fde.cat\/index.php\/2022\/07\/27\/programming-languages-endorsed-for-server-side-use-at-meta\/"},"modified":"2022-07-27T16:00:57","modified_gmt":"2022-07-27T16:00:57","slug":"programming-languages-endorsed-for-server-side-use-at-meta","status":"publish","type":"post","link":"https:\/\/fde.cat\/index.php\/2022\/07\/27\/programming-languages-endorsed-for-server-side-use-at-meta\/","title":{"rendered":"Programming languages endorsed for server-side use at Meta"},"content":{"rendered":"<p><em><span>\u2013 Supporting a programming language at Meta is a very careful and deliberate decision.<\/span><\/em><\/p>\n<p><em><span>\u2013 We\u2019re sharing our internal programming language guidance that helps our engineers and developers choose the best language for their projects.<\/span><\/em><\/p>\n<p><em><span>\u2013 Rust is the latest addition to Meta\u2019s list of supported server-side languages.<\/span><\/em><\/p>\n<p><span>At Meta, we use many different programming languages for a wide variety of platforms and use cases. Supporting a new language is not a decision we make lightly. It\u2019s important that every language we adopt is the best fit for a particular use case, so we do a high level of diligence whenever we evaluate a language. Language decisions tend to stick once they\u2019re made, so we want to be deliberate from the onset to give our engineers the best tools to work with.\u00a0<\/span><\/p>\n<p><span>Today, we\u2019re sharing insights into our internal guidance on the various languages that play an important role at Meta \u2014 and specifically our server-side programming languages, to which Rust is the latest addition.\u00a0<\/span><\/p>\n<h2><span>What is a supported language at Meta?<\/span><\/h2>\n<p><span>Before we get into the individual details, here\u2019s what <\/span><span>supported<\/span><span> means (and doesn\u2019t mean) within Meta:\u00a0<\/span><\/p>\n<p><span>If a language is <\/span><span>supported<\/span><span>, developers can count on getting a good experience with code editing, debugging, build, and deployment, as well as core libraries and interoperability. Developers can also count on that experience not going away \u2014 they won\u2019t be asked to move off a supported language. For most cases, Meta recommends choosing a supported language for new projects and services.\u00a0<\/span><br \/>\n<span>Fully supporting a language is a major investment for Meta, so \u201clong tail\u201d languages are <\/span><span>community supported<\/span><span>. For those languages, there are far fewer guarantees, and teams adopting them will have to take on the maintenance burden. In most cases, teams should avoid using them for new applications, unless a team already has a significant investment in the language.\u00a0<\/span><\/p>\n<p>Meta\u2019s primary supported server-side languages are Hack, C++, Rust, and Python<span>.\u00a0<\/span><\/p>\n<p><span>For performance-sensitive back-end services, we encourage C++ and Rust. <\/span><span>Rust is a new addition to this list<\/span><span>. There\u2019s a rapidly increasing Rust footprint in our products and services, and we\u2019re committing to Rust long-term and welcome early adopters.\u00a0\u00a0<\/span><br \/>\n<span>For <\/span><span>CLI tools<\/span><span>, we recommend Rust. This is a new recommendation for this year.\u00a0\u00a0<\/span><br \/>\n<span>For business logic and relatively stateless applications, the Hack ecosystem has the highest level of automation and support at Meta and is the recommended language.\u00a0<\/span><br \/>\n<span>Finally, Meta continues to heavily support our Python developers. For data science, ML applications, and Instagram, Python continues to be the language of choice, and we continue to invest in the experience with this ecosystem.\u00a0\u00a0<\/span><br \/>\n<span>For specific use cases, we support other languages, including Java, Erlang, Haskell, and Go. These languages are currently not widely supported outside of specific use cases.\u00a0\u00a0<\/span><\/p>\n<h2><span>How did we arrive at our list of supported languages?\u00a0<\/span><\/h2>\n<p><span>Let\u2019s explain why we have a supported language list and why we\u2019re generally reluctant to add languages to that list (although Rust is a new addition). The main reason is that it takes a significant engineering investment to support a programming language at Meta scale, and that cost is broadly distributed \u2014 not just borne by its users. Some examples:\u00a0<\/span><\/p>\n<p>Support for core libraries.<span> There are very few isolated services, and the fewer languages we have, the less burden there is on core libraries.\u00a0<\/span><br \/>\n<span>Security and privacy. A fragmented stack raises the complexity of building important security and privacy features into our services. <\/span><br \/>\nOperational risk.<span> If some service encounters a critical issue, it will require immediate assistance. We\u2019ve built up incredible amounts of expertise in diagnosing and resolving production issues, and our incident response relies on being able to read, understand, and debug services to help in a major incident. Avoiding fragmentation reduces operational risk.\u00a0<\/span><br \/>\nExpertise.<span> We build and maintain a critical mass of engineers with expertise in each of these languages.\u00a0<\/span><br \/>\nDeveloper experience.<span> Supported languages have teams working on improving areas like IDE support, build speed, debugging experience, and more.\u00a0\u00a0<\/span><\/p>\n<p><span>Choosing a suboptimal language for a project can be costly in terms of time, efficiency, and productivity. So, it\u2019s worth putting every language we evaluate under a heavy amount of scrutiny. The examples above demonstrate just how much investment we put into supporting a language.<\/span><\/p>\n<h2><span>Rust is the latest server-side language at Meta<\/span><\/h2>\n<p><span>Since we <\/span><a href=\"https:\/\/engineering.fb.com\/2021\/04\/29\/developer-tools\/rust\/\" target=\"_blank\" rel=\"noopener\"><span>began our journey with Rust<\/span><\/a><span>, the number of projects using Rust inside Meta has increased at an accelerated rate. We\u2019re excited to see Rust added to this list of server-side supported languages, giving our engineers more tools, flexibility, and support for their work. Meta is committed to provide long-term support for programming languages used by our developer, and this move signals Meta\u2019s long-term commitment and support for the Rust language ecosystem. <\/span><\/p>\n<p>The post <a href=\"https:\/\/engineering.fb.com\/2022\/07\/27\/developer-tools\/programming-languages-endorsed-for-server-side-use-at-meta\/\">Programming languages endorsed for server-side use at Meta<\/a> appeared first on <a href=\"https:\/\/engineering.fb.com\/\">Engineering at Meta<\/a>.<\/p>\n<p>Engineering at Meta<\/p>","protected":false},"excerpt":{"rendered":"<p>\u2013 Supporting a programming language at Meta is a very careful and deliberate decision. \u2013 We\u2019re sharing our internal programming language guidance that helps our engineers and developers choose the best language for their projects. \u2013 Rust is the latest addition to Meta\u2019s list of supported server-side languages. At Meta, we use many different programming&hellip; <a class=\"more-link\" href=\"https:\/\/fde.cat\/index.php\/2022\/07\/27\/programming-languages-endorsed-for-server-side-use-at-meta\/\">Continue reading <span class=\"screen-reader-text\">Programming languages endorsed for server-side use at Meta<\/span><\/a><\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-614","post","type-post","status-publish","format-standard","hentry","category-technology","entry"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":751,"url":"https:\/\/fde.cat\/index.php\/2023\/08\/22\/how-is-einstein-gpt-shaping-the-future-of-salesforce-development-and-unleashing-developer-productivity\/","url_meta":{"origin":614,"position":0},"title":"How is Einstein GPT Shaping the Future of Salesforce Development and Unleashing Developer Productivity?","date":"August 22, 2023","format":false,"excerpt":"By Yingbo Zhou and Scott Nyberg In our \u201cEngineering Energizers\u201d Q&A series, we examine the professional life experiences that have shaped Salesforce Engineering leaders. Meet Yingbo Zhou, a Senior Director of Research for Salesforce AI Research, where he leads the team to develop the model for Einstein GPT for Developers\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":791,"url":"https:\/\/fde.cat\/index.php\/2023\/08\/22\/how-is-einstein-shaping-the-future-of-salesforce-development-and-unleashing-developer-productivity\/","url_meta":{"origin":614,"position":1},"title":"How is Einstein Shaping the Future of Salesforce Development and Unleashing Developer Productivity?","date":"August 22, 2023","format":false,"excerpt":"By Yingbo Zhou and Scott Nyberg In our \u201cEngineering Energizers\u201d Q&A series, we examine the professional life experiences that have shaped Salesforce Engineering leaders. Meet Yingbo Zhou, a Senior Director of Research for Salesforce AI Research, where he leads the team to develop the model for Einstein for Developers, a\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":776,"url":"https:\/\/fde.cat\/index.php\/2023\/10\/23\/5-things-you-didnt-know-about-buck2\/","url_meta":{"origin":614,"position":2},"title":"5 Things you didn\u2019t know about Buck2","date":"October 23, 2023","format":false,"excerpt":"Meta has a very large monorepo, with many\u00a0 different programming languages. To optimize build and performance, we developed our own build system called Buck, which was first open-sourced in 2013.\u00a0 Buck2 is the recently open-sourced successor. In our internal tests at Meta, we observed that Buck2 completed builds approximately 2x\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":170,"url":"https:\/\/fde.cat\/index.php\/2020\/12\/14\/infer-powering-microsofts-infer-a-new-static-analyzer-for-c\/","url_meta":{"origin":614,"position":3},"title":"Infer powering Microsoft\u2019s Infer#, a new static analyzer for C#","date":"December 14, 2020","format":false,"excerpt":"What it is: Infer# brings the Infer static analysis platform to developers who use Microsoft\u2019s C# programming language. It can already detect null-pointer dereference and resource leak bugs, thanks to bi-abduction analysis. Detection of race conditions based on RacerD analysis is also in the works. Infer# has been used to\u2026","rel":"","context":"In &quot;External&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":777,"url":"https:\/\/fde.cat\/index.php\/2023\/10\/24\/automating-dead-code-cleanup\/","url_meta":{"origin":614,"position":4},"title":"Automating dead code cleanup","date":"October 24, 2023","format":false,"excerpt":"Meta\u2019s Systematic Code and Asset Removal Framework (SCARF) has a subsystem for identifying and removing dead code. SCARF combines static and dynamic analysis of programs to detect dead code from both a business and programming language perspective. SCARF automatically creates change requests that delete the dead code identified from the\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":302,"url":"https:\/\/fde.cat\/index.php\/2021\/08\/31\/a-brief-history-of-rust-at-facebook\/","url_meta":{"origin":614,"position":5},"title":"A brief history of Rust at Facebook","date":"August 31, 2021","format":false,"excerpt":"Facebook is embracing Rust, one of the most loved and fastest-growing programming languages available today. In addition to bringing new talent to its Rust team, Facebook has announced that it is officially joining the nonprofit Rust Foundation. Alongside fellow members including Mozilla (the creators of Rust), AWS, Microsoft, and Google,\u2026","rel":"","context":"In &quot;Technology&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts\/614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/comments?post=614"}],"version-history":[{"count":0,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/posts\/614\/revisions"}],"wp:attachment":[{"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/media?parent=614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/categories?post=614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fde.cat\/index.php\/wp-json\/wp\/v2\/tags?post=614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}