Difference between revisions of "Talk:Open research problems"

From HaskellWiki
Jump to: navigation, search
(Left comment about the I/O problem and denotative languages)
(I/O-related content relocated to "Talk:The I/O quandary")
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Denotative languages and the I/O problem ==
There is currently no text in this page.
You can <span style="color:brown;">search for this page title</span> in other pages,
<span style="color:brown;">search the related logs</span>,
Let's assume:
or <span style="color:brown;">create this page</span>.
* a denotative language exists - here, it's called <i>DL</i>.
* the implementation of <i>DL</i> is written in an imperative language - let's call that <i>IL</i>.  
Let's also assume:
* <i>DL</i> is initially successfull.
* solid-state Turing machines remain in use, so <i>IL</i> is still needed.
As time goes on, technology advances which means an ever-expanding list of hardware to cater for. Unfortunately, the computing architecture remains mired in state and effects - supporting the new hardware usually means a visit to <i>IL</i> to add the extra subroutines/procedures (or modify existing ones) in the implementation.
<i>DL</i> will still attract some interest:
* Parts of the logic required to support hardware can be more usefully written as <i>DL</i> definitions, to be called by the implementation where needed - there's no problem with imperative code calling denotative code.
* periodic refactoring of the implementation reveals suitable candidates for replacement with calls to <i>DL</i> expressions.
* <i>DL</i> is occasionally extended to cater for new patterns of use - mostly in the form of new abstractions and their supporting libraries, or (more rarely) the language itself and therefore its implementation in <i>IL</i>.
...in any case, <i>DL</i> remains denotative - if you want a computer to do something new to its surroundings, that usually means using <i>IL</i> to modify the implementation of <i>DL</i>.
So the question is this: which language will programmers use more often, out of habit - <i>DL</i> or <i>IL</i>?
Here's a clue:
<div style="border-left:1px solid lightgray; padding: 1em" alt="blockquote">
They [monadic types] are especially useful for structuring large systems. In fact, there's a danger of programming in this style too much (I know I do), and almost forgetting about the 'pure' style of Haskell.
<tt>Noel Winstanley, 1999.</tt>
Instead of [http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm looking at the whole system in a consistently denotational style (with simple & precise semantics)] by using <i>DL</i> alone, most users would be working on the implementation using <i>IL</i> - being denotative makes for nice libraries, but getting the job done means being imperative. Is this an improvement over the current situation in Haskell? No - instead of having the denotative/imperative division in Haskell by way of types, users would be contending with that division <i>at the language level</i> in the forms of differing syntax and semantics, annoying foreign calls, and so forth.
But if you still think being denotative is worth all that bother (or you just want to prove me wrong :-) [https://www.ioccc.org/2019/lynn/hint.html this] could be a useful pace to start:
<div style="border-left:1px solid lightgray; padding: 1em" alt="blockquote">
* <tt>OneHundredPercentPure</tt>: Gone is the catch-all lawless <code>IO</code> monad. And no trace of those scary <code>unsafeThisAndThat</code> functions. All functions must be pure.
&mdash; [[User:Atravers|Atravers]] Fri Oct 22 06:36:41 UTC 2021

Latest revision as of 07:30, 3 March 2022

There is currently no text in this page. You can search for this page title in other pages, search the related logs, or create this page.