This makes error-correcting the foundation of the universe, but I would prefer to have causality be fundamental, such as with the causal sets program. This is interesting though, especially for quantum computing.
The first question that comes to mind is, what is wrong with using the JVM or the CLR as a compilation target for such a language. The only thing that I can think of is that they want to exist on the Python platform, which makes some sense. Python is taking over the computing industry and programming education and it does have a lot of libraries. Perhaps Python should have a standard Python virtual machine, but that almost certainly is never going to happen, for multiple reasons. So here you are stuck with a transpiler. A transpiler whose purpose is to make a functional language compile to a language which was explicitly designed not to be functional at all.
The problem is that maintaining a browser engine is enormously expensive. There are so many features you need to maintain, security issues to deal with, etc. In the past Microsoft made money off of their operating system, and they made Internet explorer then Edge off of that, but now they make money off of the cloud and clients expect people to support Chrome. Microsoft was spending too much money they didn't need to for return. I think because of the expensiveness of maintaining a browser engine used by so many people, they were destined to be basically a natural monopoly operated by a few concerned actors. Of course, google as one of the two major internet giants, is the most concerned with supporting the development of a web browser.
> It also means exposure to paradigms like functional programming, or logic programming. I recommend Haskell, not because you need to learn yet another language, but because the knowledge ceiling in its ecosystem is really high and it's the current lingua franca for papers on functional programming.
Common Lisp is also ideal, it effectively supports paradigms other then functional, and has been or at least was the lingua franca for artificial intelligence for decades.
Guido Van Rossum and the development team didn't want the language to be functional. There is very little functional support in Python in general, besides not supporting first class functions over multiple lines.
One note about point (2) dealing with the versions and the languages object oriented features. I noticed the object-oriented support has been tacked on, before Python 2.2 the objects had their own type which was accessed by .__class__. The tacked on nature of the OOP support of the language is perhaps why there are these __identifiers__ which are hard to type using consecutive letters, needing shift to be held down, are still used in the language. Although Python fixed the problem partially, it only did so only by adding new style classes along the old style ones in order to avoid breaking compatibility, which only complicated the issue. Unfortunately, Python 2.7 is still around. As this post mentions, Python 2.7 & 3 are both installed on Linux machines and the default is still Python 2.7 when you type python.
> Lisp programmers tend to be ignorant of applied mathematics.
As a Lisp programmer and a mathematician myself I must disagree. I spent years working on mathematical applications using Lisp dialects, initially drawing inspiration from computer algebra systems like Axiom, Derive, Maxima, and Reduce and later drawing inspiration from ontologies and knowledge bases like SUMO and Cyc. All of these systems are heavily math based and they are based upon Lisp.
Does this person think that programming will suddenly be a breeze if it is done as a hobby rather then as a job? Even if you are programming in your own free time you will still have to deal with the perversions of internet exploder and other fatally flawed programming platforms. At least if you are doing it as a job you are getting paid for it!
> You misread me. What I said was that "set theory" is the general mathematical framework exactly equal to what we computer scientists call "type theory".
That makes more sense. I am coming from a mathematical background and not a computer science background myself.
> Mathematicians deal with sets, countable or otherwise, algebraic manipulations of them, bijective mappings, etc.
That is true. As a combinatorist I am one of those people who mainly focuses on countable sets. The isomorphism classes of sets (the counting numbers) are at the foundation of everything I do in combinatorics but other areas of mathematics (e.g topology) have very different approaches.
> Number theory/abstract algebra, which is the study of natural numbers among other things, is a form of set theory.
Let S be the set {a,b} and let T be the set {c,d}. There are two bijections S -> T between these two sets {(a,c),(b,d)} and {(a,d), (b,c)}. These two sets are isomorphic to one another because they have the same cardinality.
The isomorphism classes of sets are cardinalities which are themselves the natural numbers 0,1,2,3,... and infinity. In combinatorics we can just focus on the study of these isomorphism classes rather then sets themselves.
We can enumerate binary relations: ([],[0],[1],[[0 0],[0 0]],[[0 0],[0 1]],[[0 0],[1 0]],[[0 0],[1 1]],[[0 1],[0 0]],[[0 1],[0 1]],[[0 1],[1 0]],[[0 1],[1 1]]). Logical disjunction [[0,1],[1 1]] is equal to 10 in this enumeration.
Using the enumeration of binary relations the entire field of study of graph theory can be described in terms of natural numbers without any need for sets. As a result, graph theory is considered to be a branch of combinatorics. We only need to have sets mathematically when dealing with cardinalities like aleph one that emerge from uncountable sets.
Since analytic number theory deals with the uncountable set of real numbers and abstract algebra deals with operations on sets including the real numbers, these two fields are indeed founded on set theory. Algebraic combinatorics and combinatorial number theory are the branches of these two fields that focus on countable sets.
> And set theory is what mathematics calls type theory.
No it isn't. Just look up differences of type theory from set theory on wikipedia [1]. You almost never hear the word "type" spoken in math courses. According to John Shutt "I took some tolerably advanced math courses in college and graduate school. One thing I never encountered in any of those courses, nor that-I-recall even in the THUG talks, was a type. Sets aplenty, but not types" [2].
> The type system does quite a bit more than just describe cardinality. The single most important feature is typeclasses; you simply can't replicate some of what typeclasses can easily do without a similar type system.
In the C programming language types are mainly used to describe cardinalities. For example, char is the cardinality of the smallest addressable unit of memory of the machine (often 256). We don't need more then machine cardinalities as entire operating systems have been written in assembly and C. What advantages do type classes and GADTS have that make them worth adopting? Is there any evidence that they make programs more safe and reliable?
> My point with math is that Haskell libraries and code use mathematical abstractions (like various sorts of algebraic structures) far more than lisp; I was not taking about what people do with Haskell but rather how they do it.
I am building a computer algebra system with Lisp in my free time. There are many Lisp computer algebra systems that I have learned a lot from like Maxima, Reduce, and Axiom. One of my favorite computer algebra systems is GAP and it is written in C and not Haskell. I am not convinced that Haskell uses more mathematical abstractions and algebraic structures and I am not familiar with any well maintained computer algebra system written in Haskell.
> Having a flexible syntax that can look like math is far more important usually, and Haskell gets most of the way there without being too complicated.
Math doesn't look like anything. Mathematics is about abstract concepts (especially the natural numbers) not representations. You mean that Haskell is meant to look like math does on paper, but whats so important about using a paper syntax when we have keyboards?
> Type theory and accompanying first-order logic is the foundation upon which mathematics is built.
Since when? Mathematics was originally founded on the study of the natural numbers. The mathematics I find most valuable (eunmerative combinatorics) still uses the natural numbers as its foundation and not type theory.
I like having access to mathematical semantics, simple algebraic rules, and all the other things you mentioned but combining these features with a non-homoiconic syntax spoils the whole thing for me.
> Not only is the community particularly nice and welcoming, it's also special in not being afraid of a bit of math.
The Lisp community has never been afraid of math. John McCarthy had a PHD in mathematics and the earliest computer algebra systems were developed in Lisp. The Macysma computer algebra system (now developed as Maxima) predates Haskell by decades.
> Haskell has an incredible but also surprisingly simple type system. You can't just ignore that. There is nothing in lisp--not even typed Racket--that even comes close to Haskell's type system.
The most important thing for me is having the ability to describe cardinality (especially in terms of machine bits such as 2^8, 2^16, etc) and enumerations (like the ASCII character encoding). What aspect of Haskells type system is that Lisps need to "come close to"?
> But of course people asking for more state will tell you that North Korea is not a good example of communism and that Argentina is not a good example of socialism.
The Workers' Party of Korea attends the International Meeting of Communist and Workers parties along with the ruling parties of China, Laos, Vietnam, Nepal, Cuba and many other international communist parties. The DPRK definitely is affiliated with communists but its ideology isn't communism it is a combination of Korean nationalism, Juche, and self-reliance.
Since you equate communism with statism you don't know what it really means. Communism is a broad category of societies that do not have classes of social relations to the means of production. Three of the most important types of communism are primitive communisms which existed before the development of means of production, collectivist communism which is based upon common ownership of the means of production, and individualist communism which is based upon personal ownership of the means of production such as 3D printers and distribution on a free market.
> In the spirit of healthy debate, Microsoft's control of the desktop is akin to Kleenex's control of the tissue market. It will always be there because no one really expects it to change.
The thing is that most software development is done on desktops and similar environments that Microsoft controls. Software development isn't usually done on mobile devices because they generally don't have keyboards. This means that developing an operating system that that doesn't alienate its users from production and that ultimately works to eliminate the user/producer distinction is something that remains out of our reach.
> Capitalism is intrinsic to certain innovations, so the need for closed designs is necessary.
When do you think it is okay to alienate consumers from the design process? Capitalism transforms peoples labour power into a commodity to be bought and sold in a competitive market. This alienates workers from their own productive lives and from one another. When is alienation which is intrinsic to capitalism ever essential to innovation?
Unfortunately, I don't share your optimism with regards to our immediate ability to liberate ourselves from computer systems with closed designs. The Microsoft hegemony has been here for decades and I don't see it going away anytime soon, so it looks like closed designs are here to stay for the foreseeable future.
> Most people aren't tinkerers. Lots of people aren't curious, and many people respond to freeform environments with indecision and frustration that's self-defeating.
They weren't born they way, these people lost their curiosity because they were put into a society that alienates them from the design process. Proprietary software alienates its users from the software design process and it thereby destroys the curiosity people have about the inner workings of computers. Nonetheless, proprietary software is heavily present in schools because companies like Microsoft give out free licenses to them.