<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>ACM Queue - Programming Languages</title>
    <link>http://queue.acm.org/listing.cfm?item_topic=Programming Languages&amp;qc_type=topics_list&amp;filter=Programming Languages&amp;page_title=Programming Languages&amp;order=desc</link>
    <description />
    <item>
      <title>Uninitialized Reads</title>
      <link>http://queue.acm.org/detail.cfm?id=3041020</link>
      <description>Most developers understand that reading uninitialized variables in C is a defect, but some do it anyway. What happens when you read uninitialized objects is unsettled in the current version of the C standard (C11).3 Various proposals have been made to resolve these issues in the planned C2X revision of the standard. Consequently, this is a good time to understand existing behaviors as well as proposed revisions to the standard to influence the evolution of the C language. Given that the behavior of uninitialized reads is unsettled in C11, prudence dictates eliminating uninitialized reads from your code.</description>
      <category>Programming Languages</category>
      <pubDate>Mon, 16 Jan 2017 17:07:44 GMT</pubDate>
      <author>Robert C. Seacord</author>
      <guid isPermaLink="false">3041020</guid>
    </item>
    <item>
      <title>Why Logical Clocks are Easy</title>
      <link>http://queue.acm.org/detail.cfm?id=2917756</link>
      <description>Any computing system can be described as executing sequences of actions, with an action being any relevant change in the state of the system. For example, reading a file to memory, modifying the contents of the file in memory, or writing the new contents to the file are relevant actions for a text editor. In a distributed system, actions execute in multiple locations; in this context, actions are often called events. Examples of events in distributed systems include sending or receiving messages, or changing some state in a node. Not all events are related, but some events can cause and influence how other, later events occur. For example, a reply to a received mail message is influenced by that message, and maybe by prior messages received.</description>
      <category>Programming Languages</category>
      <pubDate>Tue, 12 Apr 2016 20:37:21 GMT</pubDate>
      <author>Carlos Baquero, Nuno Pregui&amp;#231;a</author>
      <guid isPermaLink="false">2917756</guid>
    </item>
    <item>
      <title>Spicing Up Dart with Side Effects</title>
      <link>http://queue.acm.org/detail.cfm?id=2747873</link>
      <description>The Dart programming language has recently incorporated a set of extensions designed to support asynchrony and generator functions. Because Dart is a language for Web programming, latency is an important concern. To avoid blocking, developers must make methods asynchronous when computing their results requires nontrivial time. Generator functions ease the task of computing iterable sequences.</description>
      <category>Programming Languages</category>
      <pubDate>Thu, 19 Mar 2015 15:43:01 GMT</pubDate>
      <author>Erik Meijer, Kevin Millikin, Gilad Bracha</author>
      <guid isPermaLink="false">2747873</guid>
    </item>
    <item>
      <title>META II: Digital Vellum in the Digital Scriptorium</title>
      <link>http://queue.acm.org/detail.cfm?id=2724586</link>
      <description>Some people do living history -- reviving older skills and material culture by reenacting Waterloo or knapping flint knives. One pleasant rainy weekend in 2012, I set my sights a little more recently and settled in for a little meditative retro-computing, ca. 1962, following the ancient mode of transmission of knowledge: lecture and recitation -- or rather, grace of living in historical times, lecture (here, in the French sense, reading) and transcription (or even more specifically, grace of living post-Post, lecture and reimplementation).</description>
      <category>Programming Languages</category>
      <pubDate>Wed, 21 Jan 2015 14:10:58 GMT</pubDate>
      <author>Dave Long</author>
      <guid isPermaLink="false">2724586</guid>
    </item>
    <item>
      <title>Design Exploration through Code-generating DSLs</title>
      <link>http://queue.acm.org/detail.cfm?id=2626374</link>
      <description>DSLs (domain-specific languages) make programs shorter and easier to write. They can be stand-alone - for example, LaTeX, Makefiles, and SQL - or they can be embedded in a host language. You might think that DSLs embedded in high-level languages would be abstract or mathematically oriented, far from the nitty-gritty of low-level programming. This is not the case. This article demonstrates how high-level EDSLs (embedded DSLs) really can ease low-level programming. There is no contradiction.</description>
      <category>Programming Languages</category>
      <pubDate>Thu, 15 May 2014 17:20:11 GMT</pubDate>
      <author>Bo Joel Svensson, Mary Sheeran, Ryan Newton</author>
      <guid isPermaLink="false">2626374</guid>
    </item>
    <item>
      <title>Domain-specific Languages and Code Synthesis Using Haskell</title>
      <link>http://queue.acm.org/detail.cfm?id=2617811</link>
      <description>There are many ways to give instructions to a computer: an electrical engineer might write a MATLAB program; a database administrator might write an SQL script; a hardware engineer might write in Verilog; and an accountant might write a spreadsheet with embedded formulas. Aside from the difference in language used in each of these examples, there is an important difference in form and idiom. Each uses a language customized to the job at hand, and each builds computational requests in a form both familiar and productive for programmers (although accountants may not think of themselves as programmers). In short, each of these examples uses a DSL (domain-specific language).</description>
      <category>Programming Languages</category>
      <pubDate>Tue, 06 May 2014 13:38:13 GMT</pubDate>
      <author>Andy Gill</author>
      <guid isPermaLink="false">2617811</guid>
    </item>
    <item>
      <title>The Curse of the Excluded Middle</title>
      <link>http://queue.acm.org/detail.cfm?id=2611829</link>
      <description>There is a trend in the software industry to sell "mostly functional" programming as the silver bullet for solving problems developers face with concurrency, parallelism (manycore), and, of course, Big Data. Contemporary imperative languages could continue the ongoing trend, embrace closures, and try to limit mutation and other side effects. Unfortunately, just as "mostly secure" does not work, "mostly functional" does not work either. Instead, developers should seriously consider a completely fundamentalist option as well: embrace pure lazy functional programming with all effects explicitly surfaced in the type system using monads.</description>
      <category>Programming Languages</category>
      <pubDate>Sat, 26 Apr 2014 18:00:11 GMT</pubDate>
      <author>Erik Meijer</author>
      <guid isPermaLink="false">2611829</guid>
    </item>
    <item>
      <title>Intermediate Representation</title>
      <link>http://queue.acm.org/detail.cfm?id=2544374</link>
      <description>Program compilation is a complicated process. A compiler is a software program that translates a high-level source language program into a form ready to execute on a computer. Early in the evolution of compilers, designers introduced IRs (intermediate representations, also commonly called intermediate languages) to manage the complexity of the compilation process. The use of an IR as the compiler's internal representation of the program enables the compiler to be broken up into multiple phases and components, thus benefiting from modularity.</description>
      <category>Programming Languages</category>
      <pubDate>Fri, 22 Nov 2013 10:29:52 GMT</pubDate>
      <author>Fred Chow</author>
      <guid isPermaLink="false">2544374</guid>
    </item>
    <item>
      <title>The Challenge of Cross-language Interoperability</title>
      <link>http://queue.acm.org/detail.cfm?id=2543971</link>
      <description>Interoperability between languages has been a problem since the second programming language was invented. Solutions have ranged from language-independent object models such as COM (Component Object Model) and CORBA (Common Object Request Broker Architecture) to VMs (virtual machines) designed to integrate languages, such as JVM (Java Virtual Machine) and CLR (Common Language Runtime). With software becoming ever more complex and hardware less homogeneous, the likelihood of a single language being the correct tool for an entire program is lower than ever. As modern compilers become more modular, there is potential for a new generation of interesting solutions.</description>
      <category>Programming Languages</category>
      <pubDate>Tue, 19 Nov 2013 18:48:49 GMT</pubDate>
      <author>David Chisnall</author>
      <guid isPermaLink="false">2543971</guid>
    </item>
    <item>
      <title>A New Objective-C Runtime: from Research to Production</title>
      <link>http://queue.acm.org/detail.cfm?id=2331170</link>
      <description>The path from the research prototype (Étoilé runtime) to the shipping version (GNUstep runtime) involved a complete rewrite and redesign. This isn't necessarily a bad thing: part of the point of building a prototype is to learn what makes sense and what doesn't, and to investigate what is feasible in a world where you control the entire system, but not necessarily in production.</description>
      <category>Programming Languages</category>
      <pubDate>Wed, 11 Jul 2012 11:58:52 GMT</pubDate>
      <author>David Chisnall</author>
      <guid isPermaLink="false">2331170</guid>
    </item>
  </channel>
</rss>

