Unilang Comes Out — A New Programming Language from Deepin

Foreword

Deepin releases the self-developed new general-purpose programming language — Unilang, which has been developed for two years from 2020 to 2022!

Here is the creation process of Unilang:

April 2020: We decided to develop our “own language” to further develop a GUI framework;

June 2020: After research and analysis, we created the Unilang repository and submitted the first line of code;

March 2021: We started to generate the object code, and basically realized the main features designed in 2020;

September 2022: The new general-purpose programming language Unilang is published for all developers!

In the process, we analyzed a series of solutions such as Dart/Flutter, Swift/SwiftUI, and decided on requirements and development directions; to solve the conflict between rapid output and a perfect design, we tried different solutions and gave first priority to quality. Through the hard work of deepin teams, the little budding idea was finally realized

Today, Unilang comes out for you!

Why do we create Unilang?

In fact, there were already quite a few mature solutions for desktop application development. 0.png The C/C++ native application development solution as Qt is the mainstream solution for many Linux desktop applications. C/C++ has mature language standards and implementations, rich development resources, and is representative of the most portable industrial languages. But at the same time, it is difficult to learn; the project development cycle is often long; as statically typed languages, the type systems are not that powerful and they contribute little to the development experience. Most of these overall problems are difficult to improve in the short term.

The development solution based on the non-native and dynamic language runtime as Electron is another mainstream solution. Using popular dynamic languages can overcome the problem that some static languages are not flexible, but it is sometimes difficult to ensure quality. Most developers find it difficult to effectively optimize the runtime mechanism, and it is easy to cause problems such as memory leaking, which greatly affects the quality and development experience of GUI applications.

Is there a solution that can solve the problems of the above two options?

The hybrid solutions of native and dynamic languages such as PySide seem to be the “ideal answer”. However, it can not automatically solve the problems brought by native languages and dynamic languages themselves. At the same time, it requires developers to understand the basic scheme and does not guarantee that it is easier to use. Otherwise, once used improperly, it is possible to integrate the defects rather than the advantages of the two. Mobile app solutions as by Flutter are also migrating to the desktop, but it has problems similar to those in the solutions of other dynamic language runtimes, which is not really a perfect alternative.

From the perspective of higher-level structure, different types of GUI solutions also have different technical limitations in the sense of architecture. All in all, none of the existing solutions can solve all the problems, and become the unquestioned and well-received preferred solution for desktop development.

Therefore, after a comprehensive analysis of all the options, we are eager to have such a language:

It can solve all the above pain points as soon as possible;

It can greatly help developers who are forced to give up due to difficulties in the secondary development of the language;

It can truly achieve universality in a deeper way.

— That’s why we create Unilang.

What are the new features? Unilang is a brand-new, modern, general-purpose programming language, which makes desktop application development more efficient and flexible, and solves language disadvantages of new solutions. Compared with other languages, what are the new features of Unilang?

Unilang is a Turing-complete general-purpose computing language with innovative language features, which can build powerful and easy-to-use abstractions. Unilang’s emphasis on first-class objects makes it easier than ever to reuse almost any source program component if you want. The underlying design of Unilang’s base language and language extensions allows you to smoothly implement improvements to the language’s design in an unprecedented way while maintaining compatibility. The resource management model and abstraction capabilities of Unilang make the program performance on different computing resource platforms naturally consistent by default and easy to adjust. The language characteristics of Unilang determine that you are not bound to specific pragmatic paradigms. The minimalist design of Unilang’s core language features helps you get started faster and easier. Unilang is not a language that requires you to be well-versed and proficient in various features — If the language has no problems, lots of developers can pay more attention to solving issues beyond the language. It is worth mentioning that Unilang is designed at the level of language features to support different application development scenarios, but is neutral to these scenarios in principle. This means — it can support the development of both server-side and client-side applications without requiring users to switch their thinking paradigms or drastically change their language habits.

For the specific language design specification of Unilang, please visit: github.com/linuxdeepin/unilang/blob/master/..

Join Unilang team Currently, it is planned to support Qt-based binding libraries to bridge some existing desktop application projects. In the future, it is also planned to provide an execution engine generated by optimized JIT code after the stable implementation of the base language features of the interpreter. The new implementation can directly replace part of the core of the existing interpreter without changing the Unilang code that already uses the interpreter, obtaining a significant performance improvement “for free”.

Born for innovation — Unilang is just born, which needs continuous improvement and development. As for innovation , we need to actively absorb various experimental extensions, so as to take advantage of the advanced achievements of the programming language community and make it quickly grow into one of the much-anticipated root technologies.

Therefore, whether it is an individual or an organization, whether reporting an issue or contributing code, we sincerely look forward to your participation in the construction of Unilang to make it better together! Not only our work is needed, but also yours!

Project address: github.com/linuxdeepin/unilang

Follow US:

Twitter: twitter.com/linux_deepin

Reddit: reddit.com/r/deepin

Discord:discord.gg/xjjkcp6H2P