Upl_2
Upl_1 project design is very simple. This makes it difficult to use it for the new generation of upl project. A new replacement was proposed as upl_2. It is an enhanced version of upl_1. It promise to be more stable, powerful, flexible and with no disadvantages.
Upl_2 goal is to be the first complete universal programming language. It aims to fulfill the three main conditions. They are:
- Written by any language
- Produce any application
- Run on any platform
Analysis
To achieve a correct analysis results we must analyze the three main conditions separately. Then make a connection between them.
Condition 1 _ Any Language
This part is held in the language engine. So the improvement should be in the language engine and the language definition file.
"Any language" can be divided to two types:
- Existing programming language
- Customized programming language
Language engine will deal with the second type. Since the first type can be handled by the available corresponding compilers and interpreters.
In order to deal with customized programming language we will need some tools and methods from the compilers topic such as parsers, lexical analyzers, etc.
There is uncountable number of possible customized programming language. It will be impossible to make a compiler for each language. Possible solution is to make a backbone programming language where any customized programming language must depend on it.
Dynamic parser can be used to create links between the backbone and the customized programming languages. Adding those links to the upl_1 language definition files will be the last step for creating the upl_2 language definition files. In the other side a Dynamic parser should be included in the language engine to work as translator between the backbone and the customized programming languages.
Possible scenario can be like this:
Parser1: verb,sp+,Keyword,sp+,name,sp+,operand,sp+,value
cpl code1: declare integer I = 0
Parser2: verb,sp+,name,sp+,Keyword,sp+,operand,sp+,value
cpl code2: put I as int equal 0
| backbone language definition | customized language definition |
| put | Declare |
| Int | Integer |
| Equal | = |
| Space = { nt} Name !={!@#$%^&*()-+/[]{}?<>`'";:,.} Value ={0-9}+{0{{.}1{}+}1} Keyword = {as} keyword | Space = { nt} Name !={!@#$%^&*()-+/[]{}?<>`'";:,.} Value ={0-9}+{0{{.}1{}+}1} keyword = keyword |
Condition 2 _ any application:
A problem arise that there is no one programming language that can create all type of applications. But Upl_2 designers believe that it is not the end of the dreams.
An imaginary design was proposed as a solution for this problem. They summarized it in one phrase:
“If you cannot climb a mountain, still you can walk around it”.
Here goes the figure:

From the above figure, it is clear that upl engines will work as an intermediate level between the input and output codes. A possible scenario is as following:
- A code written by c++ in order to produce a java desktop application
- Using upl engines, it will be converted to java code. After that the code generated will be used to create the application
For such a dream it is a must that we link all available tools together. Let us assume the following condition:
- There exist a upl to java code convertor (ujc)
- There exist a java to c++ code convertor (jcc)
- There exist a c++ to c# code convertor (ccc)
A programmer who knows how to write in upl code wants to develop a c# program. A life cycle for his code could be as following:
- Upl code to java (using ujc)
- Java code to c++ (using jcc)
- C++ code to C# (using ccc)
- The program code is in c# code
Such scenario can be repeated in millions of different forms. Still all of them can be solved in the same way.
Condition 3 _ Any Platform
An interpreted language as java can be a convenient for this condition. Still most of programming languages are compiled ones. Different version of compilers and interpreters should be linked together in similar way as discussed in condition 2.
Conclusion
As the time goes, a lot of updates and enhancement will be add to the available programming language. Upl aim is to link all these programming languages together, which is almost impossible. From the proposed structures and designs, upl will face limitless obstacles. Those obstacles are belonging to time the ideas appear on, available technologies and most of all the desirable benefits will be gained from this project.
In the time being, making a Multilanguage programming language may be a good excuse for working on this project, where the target of the project are students and non it majored people. A more powerful designs and architectures should be proposed, if the project wanted to be continued in future as a real upl.