Simorgh Programming Language

Simorgh programming language is a general purpose, English and Non-English-based programming language developed by Khalil Torabi in 1994.

The aim of this paper is to introduce the most recent developments of Simorgh Programming Language (SPL). SPL is a part of Simorgh environment project that started at 1993. SPL has been invented with the aim that non-technical people would be able to produce their own portable applications which can be written in their own native language. These applications can be combined together to create large and interconnected applications. The main advantage of SPL is to build applications that are capable of communicating with each other without additional programming. This feature of SPL helps Simorgh applications to share objects and their possibilities. Hence, programming with SPL is simple, quick and concise. SPL can randomly generate new type of objects without human intervention that will be used in Simorgh applications. With SPL, a new generation of applications can be produced by other applications even without using programmers as well.

Introduction

Nowadays, science is greatly dependent on computer applications; however, there are some limitations in developing applications that are able to fulfill different goals. Ideas for applications may be proposed by any individual. However, only programmers are able to turn the ideas into actual applications. Unfortunately, due to the limited number of skilled programmers, not all ideas will become practical applications and many will be forgotten.

Although, the methods of programming have been evolved and various programming languages exist, but applications development requires certain expertise; a considerable effort is needed to achieve the goals of different sciences through computer applications.

Programming languages, software development modeling and even software optimizing [1], cannot use the potentials of a complete application. To develop an application, a programmer needs to write great many lines of codes while, more than likely, a considerable part of the code might have been developed and used by other programmers in other applications.

Therefore, by reusing the existing objects of an application and extending them to fulfill more requirements, non-professional developers will gain the opportunity to develop new applications by combining different objects to achieve different goals without requiring a deep knowledge of programming. If the applications with such characteristics will be able to communicate through a network such as internet, even more sophisticated and larger applications can be developed. This characteristic will enable us to share the hardware across the network, and distribute and run the commands in a parallel fashion on several hardware’s.

Considering the fact that a user is able to combine different objects of different applications to develop a new one, it should also be possible that an application can perform this task without any human interference. To accomplish this purpose, fundamental changes in the structure of the existing products is required.

Simorgh programming language is a general purpose language which is able to generate structured applications. Such applications can share their objects, data, pointers, and commands among themselves. Simorgh allows users to develop new objects in their native languages.

Simorgh Applications

Simorgh application is a set of objects, pointers, data and commands that are independently placed in Sardines. Sardines in applications are similar to files and folders in computers; they keep access information such as size, location, etc. Using different type, number and arrangement of Sardines and their access methods would enable us to construct a structured application very similar to classifications of large number of files in various folders. Each object turned into smaller parts and each part is placed in its Sardine.

Some Sardines create structure of the application and some others are scanned when events occur. In fact, when an event occurs, Simorgh first checks place of Sardines, if a Sardine contains an object, data pointer or commands, an appropriate Sardine will be used accordingly. It should be noted that when running an application null (empty) sardines are ignored.

Compiling an application with Simorgh is not the end of the programming, but this process will continue in a different way. Sardines that produce the same type of applications can communicate and share resources and their objects, or replace objects and data with more recent objects or data.

As an example, consider that the picture of the user on a social networking site is updated, if a Sardine share the address/location of this picture with similar picture in another social network then, the picture in that social network will be updated as well. Sardines and instructions for data and objects work in the same way.

The communication and content sharing applications continually helps a Sardine to complete by itself or by information obtained from users. The Simorgh applications can be generated in every place like the internet, mobile phones, personal computers, etc. These programs can share objects and features through the network. The objects and features by users develop to a larger Simorgh called “SANA” which is a set of applications.

SANA is a Simorgh application that is able to identify objects and features of other applications to run series of commands in the parallel processing format.

Simorgh applications are always in standby to run the SANA commands. It is interesting that higher number of related applications would increase SANA processing speed and its implementation is similar to human muscles that split the work to thousands of muscle cells. SANA also can make use of several different types of applications by assigning different roles to each. Each task is sent to the groups containing same applications and then the results are combined, similar to human brain that controls various parts of body such as heart, muscle, and so on. If SANA needs to communicate with an application that does not exist or connection with applications related to disconnected, then SANA will take initiation to continue the process.

SANA can transfer its objects temporarily to applications that are currently not working (standby) and it wants to be part of the process data or execute commands using their hardware.

Each SANA could be like a normal application as part of a larger project that is managed with another SANA. This is one of the main advantages of SANA that enables large SANA programs to be repaired and extended by themselves. . As an example and due to its characteristics, users can manage their own date-to-date activities using SANA. SANA can also be used on the internet or Cloud [2] in large-scale.

The SPL applications cannot be directly executed on hardware, and must be interpreted [3] by the Co-Os application at run time to be executed.

SPL seeks to find a compromise among a purely compiled language (with no portability) and a purely interpreted language (that is significantly slower).

Co-Os is an application interface that eases communication among OS and Simorgh applications and fast processing executed by CO-OS too. So SPL applications are portable on any OS and machines.

What is Co-Os?

Co-Os is an application interface that eases communication among OS and Simorgh applications based on "C" language.

Simorgh Co-OS is a platform-independent execution environment that converts commands into Simorgh codes. Simorgh source code files (files with a .sim extension) are compiled into applications (files with a .trb extension), This can then be executed by a Simorgh Co-OS interpreter. At present, Simorgh Co-OS exists for windows, but it can be produced for any other operating systems like UNIX, Macintosh, and Symbian.

"wsim.exe" is a Co-OS which communicates between Simorgh applications and windows. Simorgh applications in another operating system like Linux or Symbian is just efficient to execute its Co-OS instead of windows Co-OS, then these applications will be executable in the new environment without any need to change.

Simorgh for more portability tries to reduce its dependence to any OS, for this reason, Simorgh uses its own fonts and drawing tools, direct connection to internet, etc.

For example, the Co-OS need to show a loaded image that has been converted from that external format into an internal format. After all processing on image, data is placed in an array and then this array is directly sent to screen (connection to windows with using BitBlt [4] command).

If an application needs to have speed for executing some commands, it sends commands to Co-Os to be executed (compile mode), otherwise commands are interpreted by Co-Os.

Portability of Simorgh applications is an advantage, so we can say that Simorgh applications are “Write Once - Run, Debug and Re-program anywhere “model.

Programming levels in Simorgh

Simorgh has 4 levels of programming:

1- Making program (low level)

2- Writing program (mid level)

3- Choosing objects (high level)

4- Machine level

Making program (low level)

This level can be classified [5] lower than mid (like c language) and higher than low (like assembly language).

In this level the main, systematic applications and objects can be produced. Syntaxes in SPL are one byte in length, although some parameters require some numbers to be added to them. Simorgh is symbols based programming language. There are not separate levels with different syntaxes. The same basic syntaxes serve at multiple levels (as in Lisp [6]). You can write Simorgh programs with any text editor (program that lets you edit standard ASCII text files). Unlike programs written in C++ and many other languages, Simorgh programs do not compile to codes that can be executed directly. Instead, paste objects in the Sardines and then compile to “Simorgh code” can be executed by a native Co-OS. This level of SPL similar to Java[7].

Writing program (mid level)

Mid level helps users (that knows algorithm) to write some programs or re-program selected object with native language.

This level makes reviews easier, supports the idea of iterative refinement, makes changes easier, minimizes commenting effort and easier to maintain compared to other forms of design documentation.

Although you can build any application with this level, but its goal is to be used by choosing and machine levels and edit selected objects or edit a part of an application. So, this level cannot be considered as an ideal programming level by itself. This level is similar to pseudo code. The term of this level refers to an informal, native-like (not English-like) notation for describing how an algorithm or an object will work [8].

The big problem is that pseudo code tends to be very confusing to users. For skilled programmers, the cute natural-language stuff just gets in the way and obscures what is going on; for less skilled programmers, it is frustrating because they expect it to work like unrestricted natural language, and they are constantly running into restrictions. They write things that they expect to work, and then it doesn't work. So, unless you are making a serious attack on true natural-language, understanding and flexible human-like planning seems that pseudo English or pseudo Persian programming is a bad idea.

Choosing program (high level)

Simorgh has tools that help users to copy an object(s) from an application(s) or Simorgh Object Library (SOL) and paste to their Simorgh applications.

A copy of objects from source application created in the same Sardines in destination application.

Instead of copy of objects, user can use pointers. In this case, any changes that are made to the source object will affect destination. For each re-programming of copied objects user can use mid level.

Machine level

With SPL, a new generation of applications can be produced by other applications even without using programmers as well (without any algorithms and random).

If you use random text or objects in mid level, you will be sure that you have an application, but maybe this application does not work correctly.

If you have a good converter, after several attempts (maybe billions of times) and by checking the results, you might have an object with logic. This object or logic may be a step to creating new and more complex objects. In this level we try to design converters, and we do not do any programming.

SPL Network

With the progress expansion and developing of SPL, a new web with the name of Simweb has been created. Simweb is a structured web where the information rapidly and with high speed will be produced and managed.

The security of communications has been improved enormously.

Internet is a collection of interconnected computer networks[9] and the World Wide Web is an infinitely larger connection of interconnected documents and content, and they are not the same.

Simnet is a collection of computers that are connected to any network (like internet, mobile, Cloud ...). Simnet is a dynamic network and each time a user connects to the network, Simnet will be expanded, and every time a user is disconnected from the network, Simnet is shrunk. In Simnet, users can keep the documents and content in their devices (laptop, flash memory, mobile ...) and they can connect to the Simweb when they want to share them with others.

Simweb is a connection of interconnected documents and content in Simnet. In Simweb you can protect your private data from unwanted access and search, and you can share only your public data with others.

There is no web without internet, but in Simweb the storage, management, dissemination of documents and content organized between clients. Simnet helps Sardines to connect to other Sardines and SANA to create a network of Simorgh applications.