September/October 2018 issue of acmqueue The September/October issue of acmqueue is out now

Subscribers and ACM Professional members login here



Programming Languages

  Download PDF version of this article PDF

Error 526 Ray ID: 47c042625938218c • 2018-11-19 05:25:58 UTC

Invalid SSL certificate

You

Browser

Working
Newark

Cloudflare

Working
deliverybot.acm.org

Host

Error

What happened?

The origin web server does not have a valid SSL certificate.

What can I do?

If you're a visitor of this website:

Please try again in a few minutes.

If you're the owner of this website:

The SSL certificate presented by the server did not pass validation. This could indicate an expired SSL certificate or a certificate that does not include the requested domain name. Please contact your hosting provider to ensure that an up-to-date and valid SSL certificate issued by a Certificate Authority is configured for this domain name on the origin server. Additional troubleshooting information here.

acmqueue

Originally published in Queue vol. 12, no. 4
see this item in the ACM Digital Library


Tweet


Related:

David Chisnall - C Is Not a Low-level Language
Your computer is not a fast PDP-11.


Tobias Lauinger, Abdelberi Chaabane, Christo Wilson - Thou Shalt Not Depend on Me
A look at JavaScript libraries in the wild


Robert C. Seacord - Uninitialized Reads
Understanding the proposed revisions to the C language


Carlos Baquero, Nuno Preguiça - Why Logical Clocks are Easy
Sometimes all you need is the right language.



Comments

(newest first)

Displaying 10 most recent comments. Read the full list here

Aron T | Wed, 11 Apr 2018 13:13:00 UTC

First most of the responses against the author boil down to following:

1/ "Haskell is obtuse to read and write." This is plainly false. Haskell is actually quite simple, clean and relatively easy to learn, especially in contrast to the most "popular" language out there Javascript. 2/"Nobody uses Haskell in real world". This is plainly false and a simple online search will indicate. 3/"I can use imperative programming and everything works for me" Maybe you are that top 1% programmer, but the rest of us need tools that help us be better. 4/ "Haskell is slow for important stuff." I don't have enough information to know if this is true or not. Neither do you. "Some example algorithm you saw on line is not proof"

This is where the second option mentioned in the article's conclusion needs to be expanded The author is too aggressive in his demands. No, not all your code can be written in Haskell and we need to be pragmatic. But Haskell has many ways to interoperate with frameworks and functions written in other programming languages. e.g. if ML is your concern, Haskell can easily interoperate with Spark or R. So while one language can't pragmatically rule them all, Haskell is definitely something with learning and using as much as possible.


Mel pullen | Sun, 06 Dec 2015 12:19:39 UTC

I come from a hardware background, and also have problems with this pure software view of concurrency. With limited experience of co-design I have come to see there is duality between functions in hardware and software.

In my duality view, a gate is a decision and a counter is a loop. Am I supposed to do without registers in case I store a side effect?


Gabriel Claramunt | Tue, 29 Sep 2015 04:23:18 UTC

Yeah, a lazy Lang with GC is a very bad choice for an airplane control system. Heck, probably Java using only stack allocation will be a better option, but I'll probably stick with Ada :)


Naise Dikotomie | Sun, 26 Jul 2015 05:11:45 UTC

@Jesse the one coded in Ada or a formally verifiable subset of C.


David Clark | Wed, 24 Jun 2015 13:00:02 UTC

I am a language designer and your accolades for functional programming are ridiculous (I was thinking of the anti-spell from Harry Potter).

The language/database system I am creating has been written in C. It has many hundreds of "purely functional" functions (the same input always returns the same values). I have hundreds/thousands of functions that change only the object structure that is passed to it (OOPS anyone!). I have other functions that don't fall into either of these categories. Does this mean that C is functional? Object oriented? Partly functional? If I want lazy execution (I have a byte code interpreter in my program), I can delay any expression or function I want to any time I want it executed. Funny thing is, I appreciate my programs executing when they are told so, so I rarely invoke my right to lazy evaluation (values tend to take a lot less space than functions).

I can implement any level of "undo" I want, but I don't need that capability so it isn't included in my project yet (or never). I don't actually need to get rid of all the intermediate results because I have "varying variables" unlike "immutable variables" in Haskell. I can "pass" function pointers to other functions (higher order functions) but I only do so in a few special cases. I have implemented my own automatic memory manager (something like a GC but no global waits, pointer chasing or random pauses). I can't think of anything that can be done in Haskell that I can't do in just plain old C. Is C the "God" language? Did I also say I have created automatic multi core, concurrent execution with code that is exactly like single user code without any user level locks or any concurrency annotations in the programming language. I guess I don't need Haskell's immutability for concurrency after all.

All my global state is read only and available to all threads at all times. (Yes I mean in C. Once the threading starts the global data can't be changed because I say so.) The independent servers that run on concurrent threads have their own local memory managers and can change local state without any locks at all. Globally available functions have no side effects. All global resources have critical sections that make their code also mutable without any problems. My design minimizes the use of global resources or queues their requests and does the work asynchronously. Data can be passed from server to server using a message queue that can deliver millions of messages per second but most of the work is done concurrently at the local level.

I challenge your "real world experience" and your thesis that Mathematics should be the language that programs computers. Haskell was first made available in 1992, over 23 years ago, and according to Wikipeda, over 5,400 libraries and tools are available for Haskell programming. What language would be called a success that has more than 5,000 libraries of functions and not a single major program that was completely created in it? The only answer I know of is Haskell that was made and promoted by a group of publicly paid professors with next to no "real world experience" between them.

Purely functional programming is a small subset of the code that can be created in a language like C. Haskell should be compared to niche languages like APL or SmallTalk rather than real world languages like C, C++, Java, C# etc. If you are an academic and want to print a Fibonacci sequence, Haskell was made just for you.

I have completed over 1,000 programming projects (big and small) for over 65 different companies spanning 35 years. I have programmed in at least 20 languages for over 10,000 lines of code each and written 100,000's of lines of C and assembler. I designed and coded a language/database that sold over 30,000 copies in 1987 alone.


Jesse | Sun, 16 Nov 2014 05:47:05 UTC

To anyone who believes that "mostly functional" is good enough and that purity is overrated:

Please pick your preferred airplane that you will ride in: the one that has all its control systems written as multi-threaded Java, or the one that is written in multi-threaded Haskell.


Alex liddell | Mon, 26 May 2014 00:44:51 UTC

I think many ideas can be solved with proper research and understanding on almost any subject your choose from life, and improve how articles can react to social impacts


George | Tue, 13 May 2014 22:35:58 UTC

It's going to be hard to get programmers to switch to purely functional programming languages since this implies throwing out everything they learned in their algorithms course. Yes, there is "Purely Functional Data Structures" by Osaki but that doesn't mention how to do graph algorithms. Perhaps more importantly purely functional algorithms generally don't compete in asymptotic performance, please correct me if I am wrong. Finally, anybody who moves to a purely functional programming language is not going to want to rewrite all the existing libraries they need to get the functionality their application requires so won't using those libraries introduce imperative programming back into their purely functional code? Purely functional programming is very attractive but let's not minimize the barriers to using it in a commercial product.


Richard Hein | Fri, 09 May 2014 17:31:34 UTC

@Bernd: You're missing the point of the first example, it's not about whether the calculation gives the right results in the end, it's about when the functions are evaluated - the behavior is different than expected and with just a simple example; more complex examples compound various issues the paper discusses. The point is, if you try to be "mostly pure" with the first example, and even remove the Console.Writes from it, you will still get a side-effect that results in interleaving the functions instead of performing the filtering in the order written. Without the console output, the functions are pure, but yet things are wrong, because "mostly pure" doesn't actually work.


Bernd | Wed, 07 May 2014 20:44:56 UTC

Uh, I am not sure how that paper should help me.

Starting by the first example: of course I need to know when a method will be evaluated to put side effects in there. But if I don't care about debug output (or actually love the fact that I see when something was executed!) the resulting calculation is still correct, even when not using pure functional programs.

So this paper spends 3 ornate paragraphs to re-state an advice with no further proof in the rest of the paper. I would strongly recommend to rename or rescope the paper in "pitfalls of functional programming for the imperial soldier".

Greetings Bernd

PS How many EAL 7 systems do you use?


Displaying 10 most recent comments. Read the full list here
Leave this field empty

Post a Comment:







© 2018 ACM, Inc. All Rights Reserved.