Why yet another programming language?

The aims of Arplan are multiple and varied. Taking profit of the technical revolutions happening before our eyes, coping with the ever increasing complexity, productivity and enjoyement, robustness, ...

 

 

Parallel

Nowadays, multi-core processors are the default and the number of cores is expected to rise continuously. In a dozen of years, processors with hundreds of cores will be common. However, current software can hardly take advantage of it: current programming languages are by essence sequencial and not easely parallelizable. In other words, they use a single core. With Arplan, sequentiality must be specifically stated. Therefore, by default, statements can be executed in parallel, harnessing the power of multiple cores.

More details...

 

 

Network oriented

Internet and networking are everywhere in today's computer world. You must be "connected". Arplan aims at simplifying many of current problems faced when handling this. By introducing agents and conversations, interaction with the outside world becomes natural. Local and remote ressources/services are treated the same way while performance is kept thanks to asynchronous message-passing.

More details...

 

 

Sub-languages

In order to be able to express elegantly the implementation of problems, it is important to do so at the right level of abstraction. Arplan enables one to use customized syntax extensions to be even more expressive/productive. It is possible to use and mix sub-languages in the language itself. As simple example, you could at some place in the code start a HTML block and in its scope write any valid HTML code. Moreover, you could reference language constructs in this HTML block and vice-versa. HTML was taken as an example but it can be applied to any sub-language, which could be blocks of SQL, XML, or whatever custom domain specific language. In other words, you have the ability to make different languages cohabit and interact.

More details...

 

Expressivity & simplicity

The syntax aims to be both natural and intuitive. It aims at being easy to read and understand, even by people not knowing the language. There are many high-level features like built-in data structures, pattern matching, flexible typing, assertions and many others which provides the developer a high degree of expressivity.

More details...

 

 

Genericity

Are you sick of boiler-plate generic code? ...For example, to write a custom method for each data type to be translated in XML and vice-versa? To pretty print it a special way, to transform it in a given format,... Basically, operations that apply to any data type.

...In mainstream programming languages, you would often end up writing such boiler-plate functions for each single class ...except if you use advanced reflection techniques which are usually not trivial to use. On the opposite, Arplan plans to make this differently by making symbols themselves as part of the language. You can pass around symbols, combine them, "instanciate them", and so on. Data structures are then simply a list of symbols linked to some values and writing generic functions become more natural.

 

Dataflow

Do you find event listeners everywhere and huge chains of events a bit heavy? Using dataflow, this event listeners are not necessary anymore. Changing values are simply and directly propagated under the hood.

A good example to illustrate the use of dataflow are GUIs. Assume you have a text field A as input and a label B. If you want to always show the double of B in A, you need to register an event listener, to call it inside B, to write an update method for A, etc. With dataflow, you simply state 'B.value = 2 * A.value' and that's it. The previous statement is a definition, not an assignation. Any change made to 'A.value' will automatically be reflected in B. The whole view becomes a function of the state.

More details...

 

 

Integration

One practical aim of Arplan is also to integrate well with other technologies & protocols. Calling a java jar should be as easy as reading from a file, sending a html request or a DLL call.

More details...

 

 

Documentation centric

What do we mean with this? That the program is like a big documentation connected code pieces and not the opposite. Everything starts by a description of an initial problem. The latter one is divided in sub-problems, each associated to corresponding description pages and so on recursively. The code is then attached to the description pages, they are merely a more formal and detailed way to express/implement the problem.

 

 

Interactive

As a development system/environment, it should be easy to play with parts of the system independently. For example, interactively trying some input on a function to watch the output, having visual representations of data that you can explore and modify, etc.
This ability to easely check/experiment/run subsets of the program makes it easier to understand, verify and continue on-going development.

 

 

Examples, examples, examples

Examples are meant to have 3 roles. First, they are very useful as documention. Then, they can automatically be used as test cases for unit testing. Lastly, they are always useful when experimenting interactively with program parts.

 

MVC

The language is articulated around 3 constructs: data, functions and agents. Each has a distinct and clear role.

  • Data is just data and contains no behavior. It is the model.
  • Functions are purely stateless contructs, they are functions in the mathematical sense and cannot modify any data. The view is equivalent to a function of the data model.
  • Actors are event-driven stateful entities communicating by message passing. These are the ones interacting with the environment and are the equivalent of the controller.

The clear separation among the roles of these constructs encourages better separation of concerns in the program and better design practices.

More details...

 

 

 

 

 

Abstraction

The core constructs of the language are both simple and powerful. Everything concept can be modelled efficiently using data, functions and agents. Moreover, like lego blocks, they can be combined in every possible way. Any construct can reference/manipulate any other construct. Despite roles of each constructs are usually clear, it is possible to think beyond. For example, you could:

  • a function which builds a customized function based on some data
  • an agent which sends a function across the network to another agent
  • a function which builds some customized agent based on whatever

More details...

 

 

Novel IDE

Planned for a later phase.

For now, let us only mention that the new paradigms open new and innovative ways of navigating the code and testing/debugging it.

 

 

Visual

Planned for a later phase.

The aim is to provide a view for all native data types. Compounds data-types are then simply compounds of views. It provides innovative ways to visualize and represent any kind of data instantly without anything to do.