I feel like you missed the first third of this article that was quite clear they are not saying there are no uses cases. They are saying there doesn't seem to be an economic model that makes sense.
As the article itself describes, programs that expose kids to fields they might otherwise not have a chance to interact with. A field trip for kids that focuses on creating more people in the future who are interested in the field from more diverse background.
Tell me you haven't read the article (or used racket) without telling me.
> I believe that an intro course should get students coding since the first major hurdle is learning how to construct any kind of program at all. The switch to a more "employable" language isn't going to make education worse.
None of this is the issue at hand. The switch to python is because industry uses it. The article correctly makes the point that racket was intentionally designed to get students coding as easily and quickly as possible. It has multiple steps of teaching languages for exactly that purpose, introducing concepts in ways that let students grapple with them one at a time in an interactive environment.
Meanwhile in python complex topics like duck typing, object oriented methods, exceptions, the distinction between iterables and lists, how to use a command line/terminal or how to configure an IDE, and so on must be covered before people can start writing code for the exercises. Racket is streamlined for beginners.
> Meanwhile in python complex topics like duck typing, object oriented methods, exceptions, the distinction between iterables and lists, how to use a command line/terminal or how to configure an IDE, and so on must be covered before people can start writing code for the exercises.
No, they dont have to be at all. You might as well suggest you need to learn the JVM before writing a line of Java.
Python supports imperative, OO and functional programming paradigms. And to start you can use any text editor, an IDE is not required. In fact you can start working in the REPL right away, in which case you need a terminal and the command “Python”.
To quote the above person: "tell me you haven't read the article without telling me".
You thought that supporting multiple "programming paradigms" is a nice thing, but it's the opposite for teaching beginning student. Experienced programmers want expressivity/customization/choices to do whatever they want. That's not what newbies need when they get stuck on an assignment.
I think the argument the poster is making is as root cause analysis.
The root cause of the messenger failing was the missing nail. Sure it could have been many other things, but in this case it was the nail. And if it was a pitched battle that was narrowly lost by one message, sure, they could have won or lost because of a dozen other factors, but in this case it was the missing message. There are likely many other important things to worry about, but in the system as it is today, it failed for want of a nail.
Plenty of large engineering outages were because of single keystroke typos. Should these systems be less prone to human error? Of course. Are they? Some of them are, but right now some of them aren't.
The point being made is that small things can be important if other things go wrong. We should fix the other things, but often they are much harder to fix than the small thing. And really, we should care about both, since humans are capable of that.
For me, this is the moral of horseshoe nail story. It's something I preach to my team - details matter. I’ll add that unfortunately we often don’t know which details will matter ahead of time.
If you look at the problem as a swiss cheese model and not just a teleological propagation from one root cause, then there are many things that need fixing, not just a cobbler being short one nail.
From an ergonomics perspective big-endian is the little-endian of stack based machines. Register truncation is the big reason why from an ergonomics perspective we prefer little-endian, but in stack based machines the equivalent is pop truncation. But the behavior between these is reversed between the two machine types. Big endian is the layout by which pop-ing one byte off the stack gives you the truncated number.
Co-routines can be a nebulous sort of concept because it means different things in different places and not all of them have the same features. But some of the big points are:
- Heap allocated call frame. Instead of being pushed onto the stack, co-routines tend to have their call frame (local variables, arguments, etc.) placed into heap memory (or at least may be place-able into heap memory). This often enables the other features.
- Control can leave co-routines in more ways than standard function calls. Generally this means returning (often called "yield") to the caller without completing the whole function. It can then be later resumed, returning to where the function originally left off. Generators are a common pattern enabled by co-routines that rely on only this part (and so many systems can optimize out the heap usage, for example).
- A co-routine is usually an object with an interface that allows you to move it around and resume it in different places than it was originally called. This can include on different threads, or depending on the sophistication of the system, different processes or machines.
Those are the three big points in my mind. I'd recommend trying lua coroutines, personally (I like minmalist engines like defold to use it in) to really get a feel for how these are on the edge between "language feature" and "library feature".
I think you are misapplying that paper? This as a library is the "batteries" to C++'s no-batteries-included standard library which does not implement asynchronous coroutines at all.
The paper is much more on the side of application and system performance. But you couldn't even write such a system without a library like this providing you the tools to do so. This is much more in the ___domain of "basic tool for ecosystem" than "library for specific tasks". It's on the user of the tool to address the paper's question, not the builder of the tools.
You are not incorrect in stating that the primary focus of the paper is more on the application side. However, I think providers of a parallel computation infrastructure would benefit from profiling a wide range of potential use cases across several work load sizes. This could then lead to a section in a README where the baseline overhead was broken down per workload/worksize measurements and a back of the envelope estimate by an application developer would be more particularly motivated when deciding which infrastructure tool may be the best fit for their application's specific requirements.
"Concurrency != parallelism" is an important distinction in this context. The base C++ coroutines feature is not about threads or parallel processing, but rather is a generalization of the concept of "subroutine" with respect to control flow and stack usage. An example using coroutines to service many tasks (if not otherwise involving threading features) is not much different (at the level of what the CPU sees) from a single threaded implementation using a loop or continuation passing to process concurrent tasks. Performance should be identical between both the language-supported coroutines code and the manually implemented single threaded loop if the work is batched the same.
I would tend to agree with your open assertion that Concurrency != Parallelism. However, I'm not sure that it is really germane in this situation. I am aware that library in question here uses C++ coroutines for 'task encapsulation' according to the developer; however, this library is being compared directly to TBB and OpenMP which are two of the 'go-to' implementations for parallel computation. So I don't think the focus on parallelism in this comment chain is in any way inaccurate or misapplied.
I mean yea, I read this as an idiom for "went to do something wholly unrelated to programming". Not as "I literally am going to begin farming". Like I would read anything from "restaurant owner" and "artist" to "flight trainer" and "corporate DJ" as all fitting under that.
To be fair, I suspect they meant it in a more idiomatic sense. Not that they literally went farming. Sort of like when one says "water under the bridge" they aren't commenting on bridges, nor water.
Eh, calling on a company to do a thing is some mix between public fact finding and threat here.
It allows the public to comment and maybe the senator will like the public support they are getting. Alternatively a pharma lobbyist will show up and toss them a few hundred thousand in campaign contribution promises. And they'll weight the relative value of those things. Depending on how that goes they (or another senator seeing this play out) will actually make an issue of it and it will start the more formal processes.