Programming languages. Where are we going comrades. Another little-known but very powerful language

My observations on the development of programming languages ​​leave a strange sense of impasse. Recently, a lot of new languages ​​have appeared. But there is no progress in this area. It seems that development in this area is marking time. The capabilities of languages ​​differ little from each other. An explicit confrontation is seen in the field of typing variables.

On the one hand, these are data typing languages ​​such as C, C ++, Pascal, Fortran, Java, on the other hand, JavaScript and its clones. In JavaScript, proponents and opponents of typing are waging an open war. New JavaScript standards reinforce typing in this language. Strong typing by programming theorists is considered a great blessing. Languages ​​with weak typification did not appear by chance, and this is not a flaw in the creators of the language, but a necessity. Weak typing languages ​​are easier to write. But I am not in favor of declaring variables and typing them as current in my opinion a huge disaster. In my opinion, the declaration of variables was generated by the needs of the first translators. And then, as usual, theorists turned into a fetish for which now everyone is praying. A striking example of the problems generated by typification is the library of Pascal, C, C ++ where functionally identical programs are created for different types of variables. Declaring variables is not necessary at all. For a subject area, it is not important whether a variable is the whole or the actual value. What value the user entered from the keyboard is what it is. The task of the program is to manipulate such values ​​without delving into how they are stored in memory. This should be controlled by the translator.
Another problem in typical programming languages ​​is memory management. Here, languages ​​with manual memory management such as C, C ++, Pascal, Fortran are opposed by memory management languages ​​using garbage collectors such as Java.
There are intermediate options such as Object C. The disadvantages of all of these methods are well known. No other memory management methods are known to traditional programming languages.
When designing an information system to display relationships, data must be stored in complex structures. Such structures are made out of languages ​​and are usually found in libraries. These are lists, maps, hash tables. Using all this arsenal is inconvenient.
Why am I writing all this? What to understand about the imperfection of the structure of the world? Not at all. There is simply a programming language that does not have all of these drawbacks. It seems to be there and it seems to be gone. He lives on his own the rest of the world on his own. He is known to a narrow circle of writing programmers. The creators of languages ​​do not see him point blank. They create languages ​​ala Algol collecting all his problems and then heroically overcoming them. And they are very proud of it. And it doesn’t occur to anyone to just create problems so as not to overcome them in the future. Maybe I'm talking about some little-known homemade product? Not at all. This is a long-known language born at the turn of the 60-70s. Unlike many others, it was immediately standardized. The standard for this language becomes the third after Fortran and Kobol. In 1995, the standard for this language was updated. And the main producers of environments in this language almost adhere to this standard. It remains to name this language. I think the vast majority of this name will not say anything, but his name is MUMPS.
Let's see how he copes with the above problems.
Declaration and, as a consequence, typification in this language is absent as such. Variables always exist in 3 persons. Any variable always has a numeric, logical, and string value. The interpretation of the variable that is necessary for this operation is used. The variable occurs immediately in 3 persons at the time of its recording. This is either the location of the variable to the left of the equal sign or when reading it from external devices. There is a special command to destroy variables. A variable has not only meaning but also structure. Any variable is a logical tree. Both lists and hash tables are easily displayed on such a structure. The language has another unique feature. The variable can be in read-only memory and therefore the need for files is very limited. This ability of the language to arrange hierarchical data in files is widely used and often this language is interpreted as a database. Although this property of the language is not basic.
The language has many unique properties that are not available in other languages. The language has full database support. This data is on a permanent medium, support for transactions and logging. The language supports distributed data. Your data can be located anywhere in the world, but for you it will be just a standard hierarchical tree. Multitasking is built into the language with the creation of independent threads for execution and synchronization. The language has its own built-in input output, including asynchronous input.
Memory management is done very elegantly. The programmer does not control the distribution of memory at all; he works only with logical variables, and he does not even have the opportunity to find out where they are. And the location of the data in the memory is not defined; it can be in different places at different points in time. Data in memory and on external media is stored in the form of a B-tree and, by definition, does not need garbage collection.
For all its merits, it is a very compact language. In terms of the standard, it is an easily portable language. Programs on it are very compact, easily debugged and incredibly reliable. Thanks to fully automatic data management errors in RunTime are an exception.
Personally, this language gives me a purely aesthetic pleasure. When I have to program in traditional languages ​​after MUMPS, I feel as if weights were tied to my legs and forced to run. Although you can run with weights.

But in this world, everything is not so simple. The last standard of this language was developed in 1995 and it did not make fundamental changes to the previous standard. And to date, this language is somewhat archaic. I decided to develop a new language built on the ideology of MUMPS that would take into account the current state of languages. But about the shortcomings of MUMPS and about the language I propose next time if it comes to that.
It came: An article about MSH

Also popular now: