In recent few months, as a result of my thought and inspiration over the last two years, I scratched out the Ming Programing Language, which is basically a dialect PL of Racket that I translated parts of its keyword names to Chinese.
I’d already given out my motives for creating Ming-Lang in Chinese at here. In my mind, Chinese as a natural language is so efficient compared to other languages across the world, that it makes it much more suitable than English in terms of being the programming language interface for humans to interact with computers. I imagine a future world that everyone can understand Chinese Characters, and furthermore, they all hold the ability to create new Chinese Characters to abstract the human world’s objects.
I think I don’t need to mention the advantages of LISP, the virtue of its simplicity.
But eventually, programming languages need to serve the human’s realistic world, the complexity of the human world dictates the complexity of the API of programming languages. This dictation is especially noticeable for LISP because of the difference between the highly uniform appearance of each syntax and its slightly diverse usage.
For the real working space of a LISP language, all the functions and syntaxes looked as if they share and exist in a flattened world.
Let’s imagine an ideal world, all the names of functions and syntaxes are pictures, and those pictures graphicly depict how the arguments should be like and what the result would be like. Then, the LISP code would be much more readable than now.
But a less ideal and more realistic world I reckon could be, that all the namings obey a series of connectable and highly uniform rules so that the programmer can easily guess out the usage of syntaxes and function arguments and the produced results of them.
nowadays, all the programming languages are designed in English. As a natural language, English merits its simplicity, but as an interface of programming languages, as I can see, Chinese can be much more suitable and usable than it.
Chinese has hidden its simplicity under its complexity, it can outweigh other languages by below points:
Chinese has accumulated more than 80000 characters, frequently used 3500, through its more than 5000 years of historical use. Thus, it can be used to stand the slightest nuance of meanings.
Unlike English, words are the smallest unit to stand for meanings. Every single Chinese character stands for a standalone meaning, and characters can be arbitrarily put together to constitute words to stand for a more specific meaning. Thus, we can use a character for a connotation, and let all other related connotations share this character to imply they are related.
Unlike English and many other languages, there is almost no grammar in Chinese. Because of this, the usage of Chinese characters is very flexible and efficient. For example, the prominent feature of classical Chinese is its short and refined sentences.
As we all know, Chinese characters are derived initially from pictures, which makes them very graphic and understandable by reading them once you know them.
All characters have the same length and height, making the code very tight and neat.
Besides, Chinese is very special in the way it emphasizes its writing system. It might be the only natural language that separates its writing system and speaking system. In this way, all the nowadays Chinese dialects are just about the speaking system, they share the same writing system, which writing system is so stable that it actually already lasted many thousand years until about seventy years ago, influenced by the simplicity of English, there came out the simplified Chinese.
If we take a deep in the way how Chinese characters are created, it is actually a method of how to mapping the objects from the real world to a two-dimension picture with keeping the relationship between objects.
Let me take the core conceptions of Racket’s data structures as an example to illustrate it. Because some characters were created by myself without being included by official Unicode, I made my way to show it at this http://www.yanying.wang/ming/naming-rules.html#%28part._character._creating._rules%29.
From the chart table in the link above, we can see that all the main data structures of Racket are stood as Chinese Characters, which characters are all partly made with the character "又" to imply the relationships between them. Such as:
"pair" has two "又’ in the Chinese character we created, which implies a pair of two values. "list" has a "辶" as an addition to "又", which implies values in the parentheses. "vector" has an additional "矢" to the Chinese character of "list", which implies this is a vector because "矢" means vector in Chinese. Besides, the "矢" is also used as part of "vector-length" to imply the usage of "vector-length". "association list" has two "又" in contrast to “list", with apparently means this is a list of pairs.
Even though I haven’t implemented this part to the language I’m designing, we can imagine how this method could possibly take the namings of the conception of programming languages to a higher understandable level.
Following my initial thought, I have implemented the beta version of the language, named https://github.com/yanyingwang/ming. The language is already usable, all I need to do next is constantly translate Racket’s procedures and syntaxes and built the naming rules.