{"id":843,"date":"2014-05-02T14:44:04","date_gmt":"2014-05-02T14:44:04","guid":{"rendered":"http:\/\/sdi.thoughtstorms.info\/?p=843"},"modified":"2014-05-02T14:44:04","modified_gmt":"2014-05-02T14:44:04","slug":"are-languages-still-evolving-towards-lisp","status":"publish","type":"post","link":"https:\/\/sdi.thoughtstorms.info\/?p=843","title":{"rendered":"Are Languages Still Evolving Towards Lisp?"},"content":{"rendered":"<p>My <a href=\"https:\/\/www.quora.com\/Programming-Languages\/Is-it-still-reasonable-to-say-mainstream-languages-are-generally-trending-towards-Lisp-or-is-that-no-longer-true\/answer\/Phil-Jones\">Quora answer<\/a> to the question &#8220;<em>Is it still reasonable to say mainstream languages are generally trending towards Lisp, or is that no longer true?<\/em>&#8220;<\/p>\n<p>Based on my recent experiments with Haskell and Clojure.<\/p>\n<p>Lisp is close to a pure mathematical description of function application and composition. As such, it offers one of the most concise, uncluttered ways to describe graphs of function application and composition; and because it&#8217;s uncluttered with other syntactic constraints it offers more opportunities to eliminate redundancy in these graphs.<br \/>\nPretty much any sub-graph of function combination can be refactored out into another function or macro.<br \/>\nThis makes it very powerful concise and expressive. And the more that other programming languages try to streamline their ability to express function combination, the more Lisp-like they will get.<br \/>\nEliminating syntactic clutter to maximize refactorability will eventually make them approximate Lisp&#8217;s &quot;syntaxlessness&quot; and &quot;programmability&quot;.<br \/>\nIn that sense, Paul Graham is right.<br \/>\nHOWEVER, there&#8217;s another dimension of programming languages which is completely orthogonal to this, and which Lisp doesn&#8217;t naturally touch on : the declaration of types and describing the graph of type-relations and compositions.<br \/>\nTypes are largely used as a kind of security harness so the compiler or editor can check you aren&#8217;t making certain kinds of mistakes. And can infer certain information, allowing you to leave some of the work to them. Types can also help the compiler optimise code in many ways : including safer concurrency, allowing the code to be compiled to machine-code with less of the overhead of an expensive virtual machine etc.<br \/>\nResearch into advanced type management happens in the ML \/ Haskell family of languages and perhaps Coq etc..<br \/>\nUltimately programming is about transforming input data into output data. And function application and composition is sufficient to describe that. So if you think POWER in programming is just about the ability to express data-transformation, then Lisp is probably the most flexibly expressive language to do that, and therefore still is at the top of the hierarchy, the target to which other programming languages continue to aspire.<br \/>\nIf you think that the job of a programming language is ALSO to support and protect you when you&#8217;re trying to describe that data-transformation, then POWER is also what is being researched in these advanced statically-typed languages. And mainstream languages will also be trying to incorporate those insights and features.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>My Quora answer to the question &#8220;Is it still reasonable to say mainstream languages are generally trending towards Lisp, or is that no longer true?&#8220; Based on my recent experiments with Haskell and Clojure. Lisp is close to a pure mathematical description of function application and composition. As such, it offers one of the most [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[67,199,248,356],"class_list":["post-843","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-clojurescript","tag-haskell","tag-lisp","tag-programming-languages"],"_links":{"self":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts\/843","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=843"}],"version-history":[{"count":0,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts\/843\/revisions"}],"wp:attachment":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=843"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=843"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}