{"id":719287,"date":"2021-01-25T09:35:05","date_gmt":"2021-01-25T17:35:05","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/?p=719287"},"modified":"2021-01-26T01:03:55","modified_gmt":"2021-01-26T09:03:55","slug":"lambda-the-ultimatae-excel-worksheet-function","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/research\/blog\/lambda-the-ultimatae-excel-worksheet-function\/","title":{"rendered":"LAMBDA: The ultimate Excel worksheet function"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/Lambdas_Hero_updated.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>Ever since it was released in the 1980s, Microsoft Excel has changed how people organize, analyze, and visualize their data, providing a basis for decision-making for the millions of people who use it each day. It\u2019s also the world\u2019s most widely used <em>programming language<\/em>. Excel formulas are written by an order of magnitude more users than all the C, C++, C#, Java, and Python programmers in the world combined. Despite its success, considered as a <em>programming language<\/em> Excel has fundamental weaknesses. Over the years, two particular shortcomings have stood out: (1) the Excel formula language really only supported scalar values\u2014numbers, strings, and Booleans\u2014and (2) it didn\u2019t let users define new functions.<\/p>\n\n\n\n<p>Until now.<\/p>\n\n\n\n<p>The <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/calc-intelligence\/\">Calc Intelligence<\/a> project at Microsoft Research Cambridge has a long-standing partnership with the Excel team to transform spreadsheet formulas into a full-fledged programming language. The fruits of that partnership are starting to appear in the product itself. At the 2019 ACM SIGPLAN Symposium on Principles of Programming Languages (POPL 2019), we <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/blog\/influencing-mainstream-software-applying-programming-language-research-ideas-to-transform-spreadsheets\/\">announced two significant developments<\/a>: <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/watch?v=gbImc7A8_Q8\">data types<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> take Excel beyond text and numbers and allow cells to contain first-class records, including entities linked to external data, and <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/techcommunity.microsoft.com\/t5\/excel-blog\/preview-of-dynamic-arrays-in-excel\/ba-p\/252944\">dynamic arrays<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> allow ordinary formulas to compute whole arrays that spill into adjacent cells. These changes are a substantial start on our first challenge: rich, fully-first-class structured data in Excel.<\/p>\n\n\n\n<p>In December 2020, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/techcommunity.microsoft.com\/t5\/excel-blog\/announcing-lambda-turn-excel-formulas-into-custom-functions\/ba-p\/1925546\">we announced LAMBDA<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, which allows users to define new functions written in Excel\u2019s own formula language, directly addressing our second challenge. These newly defined functions can call other LAMBDA-defined functions, to arbitrary depth, even recursively. With LAMBDA, Excel has become<em> Turing-complete<\/em>. You can now, in principle, write <em>any <\/em>computation in the Excel formula language. LAMBDA is available to members of the Insiders: Beta program. The initial release has some implementation restrictions that we expect to lift in the future. We discussed LAMBDA and some of our research on spreadsheets in a sponsored video presented at <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/event\/popl-2021\/\">POPL 2021<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Microsoft Research sponsors POPL 2021\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/tfz4jdwsEaQ?feature=oembed&rel=0\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 id=\"the-power-of-lambda\">The power of LAMBDA<\/h2>\n\n\n\n<p>Researchers have known since the 1960s that Church\u2019s lambda notation is a foundation for a wide range of programming languages and hence is a highly expressive programming construct in its own right. Its incorporation into Excel represents a qualitative shift, not just an incremental change.<\/p>\n\n\n\n<p>To illustrate the power of LAMBDA, here\u2019s a function written using the notation to compute the length of the hypotenuse of a right-angled triangle:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>=LAMBDA( X, Y, SQRT( X*X+Y*Y ) )<\/code><\/pre>\n\n\n\n<p>LAMBDA complements the March 2020 release of LET, which allows us to structure the same example like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>=LAMBDA( X, Y, LET( XS, X*X, YS, Y*Y, SQRT( XS+YS ) ) )<\/code><\/pre>\n\n\n\n<p>The function takes two arguments named <em>X<\/em> and <em>Y<\/em>, binds the value of <em>X*X <\/em>to the name <em>XS, <\/em>binds the value of<em> Y*Y<\/em> to <em>YS<\/em>, and returns<em> SQRT( XS+YS) <\/em>as its result.<\/p>\n\n\n\n<p>The existing Name Manager in Excel allows any formula to be given a name. If we name our function PYTHAGORAS, then a formula such as PYTHAGORAS(3,4) evaluates to 5. Once named, you call the function by name, eliminating the need to repeat entire formulas when you want to use them.<\/p>\n\n\n\n\n\t<div class=\"border-bottom border-top border-gray-300 mt-5 mb-5 msr-promo text-center text-md-left alignwide\" data-bi-aN=\"promo\" data-bi-id=\"1141385\">\n\t\t\n\n\t\n\t<div class=\"row pt-3 pb-4 align-items-center\">\n\t\t\t\t\t\t<div class=\"msr-promo__media col-12 col-md-5\">\n\t\t\t\t<a class=\"bg-gray-300 display-block\" href=\"https:\/\/ai.azure.com\/labs\" aria-label=\"Azure AI Foundry Labs\" data-bi-cN=\"Azure AI Foundry Labs\" target=\"_blank\">\n\t\t\t\t\t<img decoding=\"async\" class=\"w-100 display-block\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2025\/06\/Azure-AI-Foundry_1600x900.jpg\" \/>\n\t\t\t\t<\/a>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"msr-promo__content p-3 px-5 col-12 col-md\">\n\n\t\t\t\t\t\t\t\t\t<h2 class=\"h4\">Azure AI Foundry Labs<\/h2>\n\t\t\t\t\n\t\t\t\t\t\t\t\t<p id=\"azure-ai-foundry-labs\" class=\"large\">Get a glimpse of potential future directions for AI, with these experimental technologies from Microsoft Research.<\/p>\n\t\t\t\t\n\t\t\t\t\t\t\t\t<div class=\"wp-block-buttons justify-content-center justify-content-md-start\">\n\t\t\t\t\t<div class=\"wp-block-button\">\n\t\t\t\t\t\t<a href=\"https:\/\/ai.azure.com\/labs\" aria-describedby=\"azure-ai-foundry-labs\" class=\"btn btn-brand glyph-append glyph-append-chevron-right\" data-bi-cN=\"Azure AI Foundry Labs\" target=\"_blank\">\n\t\t\t\t\t\t\tAzure AI Foundry\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div><!--\/.msr-promo__content-->\n\t<\/div><!--\/.msr-promo__inner-wrap-->\n\t<\/div><!--\/.msr-promo-->\n\t\n\n\n\n<p>Moreover, LAMBDA is the true lambda that we know and love: a lambda can be an argument to another lambda or its result; you can define the Church numerals; lambdas can return lambdas, so you can do currying; you can define a fixed-point combinator using LAMBDA and hence write recursive functions; and so on. (Additionally, since lambdas can be named, they can directly call themselves recursively, which is much more convenient than using a fixed-point combinator.)<\/p>\n\n\n\n<h2 id=\"examples-recursively-reversing-a-string-and-fixed-point-combinator\">Examples: Recursively reversing a string and fixed-point combinator<\/h2>\n\n\n\n<p>Reversing a string is beyond the built-in functions of Excel and could only previously be written outside the formula language, by using Visual Basic or JavaScript. Here is a definition of REVERSE as a recursive LAMBDA, which makes use of a couple of auxiliary functions\u2014HEAD and TAIL\u2014to compute the first character and everything but the first character, respectively.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/GIF_LAMBDAS.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p>Even without relying on a recursively defined name, the formula language is Turing-complete because we can encode recursive function definitions using the classic call-by-value fixed-point combinator. In fact, running this combinator was one of the early stress tests of LAMBDA in the Excel codebase. Here it is, applied to define a factorial function.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/Lambdas_GIF2.gif\" alt=\"\"\/><\/figure>\n\n\n\n<p>(In contrast, Felienne Hermans\u2019s <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.felienne.com\/archives\/2974\">lovely blog post about writing a Turing machine in Excel<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> doesn\u2019t, strictly speaking, establish Turing completeness because it uses successive rows for successive states, so the number of steps is limited by the number of rows.)<\/p>\n\n\n\n<h2 id=\"whats-next\">What\u2019s next?<\/h2>\n\n\n\n<p>There\u2019s plenty more to come. In the short term, we expect to see fully nestable arrays and efficient implementations of array-processing combinators, such as MAP and REDUCE, that take lambda functions as their arguments. Beyond that, we hope to define functions not just by a single formula but by a whole worksheet, so-called <em><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/a-user-centred-approach-to-functions-in-excel\/\">sheet-defined functions<\/a>,<\/em> or even <em><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/elastic-sheet-defined-functions-generalising-spreadsheet-functions-to-variable-size-input-arrays\/\">elastic sheet-defined functions<\/a>.<\/em> In practical terms, sheet-defined functions will \u201cgo with the flow\u201d of typical spreadsheet design by allowing users to define a larger function via multiple formulas spread out over multiple cells.<\/p>\n\n\n\n<h2 id=\"response-from-the-community\">Response from the community<\/h2>\n\n\n\n<p>A programming language is only successful if its user base can readily and effectively use its power. One might wonder whether LAMBDA might be good for programming language enthusiasts but just too hard for end users to make sense of. In releasing LAMBDA, Microsoft has effectively launched a global-scale experiment on end-user programming with higher-order functions.<\/p>\n\n\n\n<p>Early feedback is encouraging. Within 24 hours of LAMBDA\u2019s release in December, there were multiple videos, including one on <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/watch?v=o9UNfjol_Ok\">splitting data across columns<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> and one on using <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/watch?v=LoTXQogJtYs\">LAMBDA and LET to create single-cell reports<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, and blog posts, such as this one on <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/peltiertech.com\/calculate-nice-axis-scales-with-let-and-lambda\/\">calculating axis scales<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, from the Excel community describing applications of LAMBDA that we had never thought of. A trade article describes the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/www.techrepublic.com\/article\/microsoft-turning-excel-into-a-turing-complete-programming-language\/\">transition of Excel into a Turing-complete programming language<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n\n\n\n<p>Moreover, even if it takes greater skill and knowledge to <em>author <\/em>a lambda, it takes no extra skill to <em>call <\/em>it. LAMBDA allows skilled authors to extend Excel with application-domain-specific functions that appear seamlessly part of Excel to their colleagues, who simply call them.<\/p>\n\n\n\n<p>It will be interesting to see how users continue to experiment with and apply not only LAMBDA but also data types and dynamic arrays. We believe these new functional programming features will transform how people make decisions with Excel.<\/p>\n\n\n\n<h2 id=\"from-research-to-product-and-back-to-research\">From research to product and back to research<\/h2>\n\n\n\n<p>Our partnership with the product team exemplifies a symbiosis between research and practice. For example, like many long-lived programming systems, the only really precise documentation of Excel semantics is its source code. So to understand what Excel really does, we developed a written semantics for it and a reference implementation of formula evaluation in TypeScript, Calc.ts.<\/p>\n\n\n\n<p>We initially thought the Excel formula language was quite simple\u2014that is part of what makes it so attractive to end users\u2014but we found that it embodies a variety of interesting and little-known features. For example, in Excel, a <em>range<\/em>\u2014a rectangular area of the grid\u2014is a first-class value. The function ROW( <em>range <\/em>) returns the row number of the first row of the range, so ROW( A7:A99 ) returns 7. But since ranges are first class, they can be returned by functions: INDEX( A7:A99, 3 ), for instance, returns a <em>reference <\/em>to the third cell of the range A7:A99\u2014namely the range A9:A9\u2014and not the <em>value <\/em>of cell A9. So ROW( INDEX( A7:A99, 3 ) ) returns 9. Excel has quite a few functions that take or return ranges, including union and intersection operators. It even has an INDIRECT function, which takes a string and interprets it as a range: INDIRECT( \u201cA9\u201d & \u201c9\u201d) returns the range A99:A99 (here <em>&<\/em> is string concatenation).<\/p>\n\n\n\n<p>We also discovered that Excel has a mechanism for \u201cauto-lifting\u201d functions over arrays. For example, SUM( A2:A100 + 1 ) takes the range A2:A100, dereferences it to a vector of 99 values (since (+) doesn\u2019t accept references), then adds one to each element (lifting (+) over the array), and sums up the result. It took us some time to understand the precise rules that drive this behavior, but they turned out to be simple and systematic.<\/p>\n\n\n\n<p>The act of writing an independent semantics of the Excel formula language led to some extended dialogues with the Excel team, a lot of experimental validation, and\u2014on occasion\u2014conversations with Excel engineers, who checked the source code.<\/p>\n\n\n\n<p>Our independent reference implementation not only fleshed out and brought the semantics to life, but it also serendipitously turned out to be incredibly useful for the web version of Excel, which needs to evaluate formulas in the browser. Read the story of Calc.ts, which powers client-side calculations for the web version of Excel, on the <a href=\"https:\/\/www.microsoft.com\/en-us\/garage\/wall-of-fame\/calc-ts-in-excel-for-the-web\/\">Microsoft Garage Wall of Fame<\/a>. Beyond its product impact, Calc.ts is a fantastic research asset, too, as it allows variations of formula evaluation to be prototyped for rapid experimentation, for intern or university projects, for example. Let us know if you\u2019d like access to Calc.ts for research purposes.<\/p>\n\n\n\n<p>More broadly, we\u2019ve built on our partnership to develop a research program around the theme of end-user programming, specifically involving a research crossover between programming languages, human-computer interaction, and machine learning, as demonstrated by this selection of papers:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/end-user-probabilistic-programming\/\"><strong>End-User Probabilistic Programming<\/strong><\/a><strong> (QEST 2019):<\/strong> We examine how RAND() already allows probabilistic programming in spreadsheets and consider how sheet-defined functions and other features can enhance probabilistic modeling by end users.<\/li><li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/understanding-and-inferring-units-in-spreadsheets\/\"><strong>Understanding and Inferring Units in Spreadsheets<\/strong><\/a><strong> (VL\/HCC 2020):<\/strong> We combine a formal type system with machine learning to predict the units of numbers in spreadsheets.<\/li><li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/gridlets-reusing-spreadsheet-grids\/\"><strong>Gridlets: Reusing Spreadsheet Grids<\/strong><\/a><strong> (CHI 2020; late-breaking work):<\/strong> We present a new abstraction over calculation and presentation applicable to spreadsheet reuse.<\/li><li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/higher-order-spreadsheets-with-spilled-arrays\/\"><strong>Higher-Order Spreadsheets with Spilled Arrays<\/strong><\/a><strong> (ESOP 2020):<\/strong> We present a formal semantics for dynamic arrays and propose the grid calculus, an extension of formula evaluation to implement gridlets.<\/li><li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/spreadsheet-comprehension-guesswork-giving-up-and-going-back-to-the-author\/\"><strong>Spreadsheet Comprehension: Guesswork, Giving up and Going back to the Author<\/strong><\/a><strong> (CHI 2021):<\/strong> We examine how people go about understanding how an unfamiliar spreadsheet works, and we generalize to discover common problems.<\/li><li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/tweakit-supporting-end-user-programmers-who-transmogrify-code\/\"><strong>TweakIt: Supporting End-User Programmers Who Transmogrify Code<\/strong><\/a><strong> (CHI 2021):<\/strong> We investigate how live previews of code snippet output can support end users who copy and modify code from the web to process data in their spreadsheets.<\/li><\/ul>\n\n\n\n<h2 id=\"join-our-team\">Join our team!<\/h2>\n\n\n\n<p>Calc Intelligence is hiring. We aim to be a <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/careers.microsoft.com\/us\/en\/diversityandinclusion\">diverse and inclusive<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> team representing a range of disciplines, including human-computer interaction, machine learning, and programming languages. Your work in our team could have a real impact on the world\u2019s most popular programming language! Learn more about 2021 internship opportunities in <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fcareers.microsoft.com%2Fus%2Fen%2Fjob%2F950671%2FInternship-Opportunities-Designing-Intelligent-Experiences-for-Readable-Spreadsheet-Formulas&data=04%7C01%7Cv-alhage%40microsoft.com%7C294e5623d9814dcb1c9e08d8c14c0be2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637471879663015726%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=m02jIt9rnrbSLfr3iT6mGQ0mJjG8WVvBTGMlnn%2FKHiE%3D&reserved=0\">human-computer interaction<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> and in <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fcareers.microsoft.com%2Fus%2Fen%2Fjob%2F951501%2FInternship-opportunities-Schemas-for-Distributed-Data-Structures-Research&data=04%7C01%7Cv-alhage%40microsoft.com%7C294e5623d9814dcb1c9e08d8c14c0be2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637471879663025717%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Eph6IGZsXQqFZEpbSfJj2qJqXCPjcRGyzg54qKa4Wy8%3D&reserved=0\">programming languages<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> and about the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fresearch%2Fproject%2Fcalc-intelligence%2F&data=04%7C01%7Cv-alhage%40microsoft.com%7C294e5623d9814dcb1c9e08d8c14c0be2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637471879663035720%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=RakI45n9v9jMP3Ypz7Q76%2B82YnCmcrF55J3iYCxDB7Y%3D&reserved=0\">Calc Intelligence project<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ever since it was released in the 1980s, Microsoft Excel has changed how people organize, analyze, and visualize their data, providing a basis for decision-making for the millions of people who use it each day. It\u2019s also the world\u2019s most widely used programming language. Excel formulas are written by an order of magnitude more users [&hellip;]<\/p>\n","protected":false},"author":38838,"featured_media":720505,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","msr-author-ordering":[{"type":"user_nicename","value":"Andy Gordon","user_id":"30825"},{"type":"user_nicename","value":"Simon Peyton Jones","user_id":"33665"}],"msr_hide_image_in_river":0,"footnotes":""},"categories":[1],"tags":[],"research-area":[13560],"msr-region":[],"msr-event-type":[],"msr-locale":[268875],"msr-post-option":[],"msr-impact-theme":[],"msr-promo-type":[],"msr-podcast-series":[],"class_list":["post-719287","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-research-blog","msr-research-area-programming-languages-software-engineering","msr-locale-en_us"],"msr_event_details":{"start":"","end":"","location":""},"podcast_url":"","podcast_episode":"","msr_research_lab":[199561],"msr_impact_theme":[],"related-publications":[],"related-downloads":[],"related-videos":[],"related-academic-programs":[],"related-groups":[],"related-projects":[511097],"related-events":[716341],"related-researchers":[],"msr_type":"Post","featured_image_thumbnail":"<img width=\"960\" height=\"540\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-960x540.jpg\" class=\"img-object-cover\" alt=\"LAMBDA graphic\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-960x540.jpg 960w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-300x169.jpg 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-1024x577.jpg 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-768x432.jpg 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-1536x865.jpg 1536w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-2048x1153.jpg 2048w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-16x9.jpg 16w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-1066x600.jpg 1066w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-655x368.jpg 655w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-343x193.jpg 343w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-640x360.jpg 640w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-1280x720.jpg 1280w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2021\/01\/1400x788_Lambda_no_logo_still-1-1920x1080.jpg 1920w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/>","byline":"Andy Gordon and Simon Peyton Jones","formattedDate":"January 25, 2021","formattedExcerpt":"Ever since it was released in the 1980s, Microsoft Excel has changed how people organize, analyze, and visualize their data, providing a basis for decision-making for the millions of people who use it each day. It\u2019s also the world\u2019s most widely used programming language. Excel&hellip;","locale":{"slug":"en_us","name":"English","native":"","english":"English"},"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/719287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/users\/38838"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/comments?post=719287"}],"version-history":[{"count":13,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/719287\/revisions"}],"predecessor-version":[{"id":720742,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/719287\/revisions\/720742"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/720505"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=719287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/categories?post=719287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/tags?post=719287"},{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=719287"},{"taxonomy":"msr-region","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-region?post=719287"},{"taxonomy":"msr-event-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-event-type?post=719287"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=719287"},{"taxonomy":"msr-post-option","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-post-option?post=719287"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=719287"},{"taxonomy":"msr-promo-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-promo-type?post=719287"},{"taxonomy":"msr-podcast-series","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-podcast-series?post=719287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}