FAQ (Frequently Asked Questions)

What is PPL?

Why PPL?

How does it work?

What's unique about PPL?

Which platform does PPL run on?

How much does PPL cost?

Which license is used?

How is PPL developed?

How is PPL funded?

How mature is PPL?

What can I do with PPL?

What do I need to develop applications with PPL?

Where can I find more information?


What is PPL?

PPL is an acronym for Practical Programming Language.

The the Macmillan dictionary defines 'practical' as follows:

  • intended to be useful or suitable, not just fashionable or attractive; able to make things with your hands in a skilful way.

PPL is a high level, object-oriented programming language with some functional extensions. It is portable, compiled and statically typed.

PPL is a work in progress - not yet ready to develop mission-critical applications.


Why PPL?

PPL addresses a software development problem that persists since decades and that can best be described by stating the following sad facts (excerpts from the highly praised book Code complete, second edition, ISBN 0-7356-1967-0, written by Steve McConnell):

You can easily find other sources stating similar data by searching the internet for terms like "number of bugs per line of code" or "costs of software bugs".

Here is another alarming statement:

According to recent Cambridge University research, the global cost of debugging software has risen to $312 billion annually. The research found that, on average, software developers spend 50% of their programming time finding and fixing bugs (source).


Desiderius Erasmus once said:

Prevention is better than cure.

The same principle is valid in the field of software development. Software defect prevention is obviously one of the most worthy goals to be pursuit.

One way to prevent defects is to use a programming language that eliminates whole classes of bugs by design, and that detects a maximum of the remaining bugs early in the development process.

PPL is a sincere attempt to achieve this and to mitigate the "many many bugs" situation. The main design goal of PPL is to find a maximum of bugs quickly. This helps to write more reliable and safe code in less time. Ultimately, it increases software quality and reduces time and costs for debugging and maintenance.


How does it work?

The best option to eradicate a class of bugs is to simply not permit it by design. For example, implicit type conversions and silently ignored arithmetic overflows can lead to nasty bugs that might stay undetected until an exceptional situation arises at run-time and produces a (possibly catastrophic) failure in production. A famous example is the explosion of the Ariane 5 rocket due to cramming a 64-bit number into a 16-bit space. Such unsafe operations are therefore prohibited in PPL.

The next best option is to automatically detect bugs by the compiler or by static analyses tools. At the time of writing, the PPL compiler detects over 450 different kinds of bugs, and this number is meant to increase in the future. For example, compile-time null-safety is built into PPL. This means that the most common bug popping up in languages like C# and Java (namely the unfamous null pointer error) can't occur in PPL code.

If a bug cannot be found at compile-time, then it should reveal itself as early as possible at run-time. Design by Contract is an example of a very effective technique to detect bugs quickly at run-time. It is therefore fully supported in PPL.

There are many more Fail fast! features built into PPL. They are explained in the PPL documentation and illustrated with source code examples.


What's unique about PPL?

To achieve its goal (helping to write reliable and safe code), PPL incorporates a unique combination of proven and innovative Fail fast! concepts not found or only partially found in other programming languages.

From the outset PPL was designed with these concepts in mind. They are part of the language and therefore lead to the following benefits:

Besides features for more reliability, PPL also provides modern and helpful programming techniques such as string interpolation, lambdas/closures, streams (with filter, map and reduce functionality), and union (sum) types. Idiomatic support for parallel processing is currently very limited, but any Java library or framework can be used if necessary.

There are also special instructions and operators to make run-time error handling (e.g. file not found) as painless and non-obstructive as possible.


Which platform does PPL run on?

The PPL compiler generates Java binaries (.jar or .class files). Hence, applications written in PPL run on any platform that supports a Java Virtual Machine (JVM), such as Linux, Mac OS X, Unix, Windows, etc.

Other target code could be produced in the future, because the code generation part of the compiler has been designed with this flexibility in mind.


How much does PPL cost?

PPL is free of charge for everybody.


Which license is used?

PPL's standard libraries are licensed under the terms of the GNU Affero General Public License (AGPL) version 3.

The current compiler implementation (included in the distribution) is currently not licensed under the AGPL. For more information please contact the author.

The license model might change in the future.


How is PPL developed?

PPL is developed by me: Christian Neumanns - a passionate programmer from Luxembourg, still dreaming of
number_of_bugs = 0

The intention is to create an open-source-community project.

Everybody is very welcome to participate.


How is PPL funded?

PPL is currently not funded and there are no revenues (neither in form of money nor other values).

I develop PPL in my free time.


How mature is PPL?

PPL (i.e. the compiler, the development environment and the libraries) is itself entirely written in PPL.

PPL is also used in the development of an ERP application.

Hence the language has been tested and debugged to a certain extent.

However, PPL is a work in progress and should not yet be used to develop mission-critical enterprise applications.

The syntax and semantics may slightly change in the future, and backward compatibility is currently not guaranteed.

The standard libraries available in PPL are incomplete and not yet tested thoroughly. However, you can always use existing Java packages if some functionality is missing or not mature enough in PPL.

The documentation is not finished yet.

Moreover, there is currently no support for an Integrated Development Environment (IDE). IDE support is planned to be added in the future. Some basic support for the IntelliJ IDEA is under construction.

Developers are encouraged to send feed-back to contact {at} practical-programming {dot} org. Bug reports and requests for improving or adding Fail fast! features are always handled with highest priority.


What can I do with PPL?

You can develop any kind of application that runs on a Java Virtual Machine.

You can develop on Unix (Linux), Mac OS X and Windows platforms and then deploy to anyone of these platforms (e.g. develop on Windows and deploy to Linux, or vice-versa).

PPL's development environment provides specific support to simplify the following common tasks:

You can also easily combine PPL and Java code in your application. For example, you can:

The advantage of using PPL to write an application is that you can benefit from PPL's specific support for more reliable code. At the same time, you can rely on the very popular, robust and successful Java technology, and you can easily embed existing Java libraries and frameworks in your PPL projects.


What do I need to develop applications with PPL?

You just need:

You can then download PPL (a single compressed file), read the documentation, and start developing.

You can deploy your application to any computer or device that supports a Java Virtual Machine (JVM).


Where can I find more information?

Documentation is available at www.practical-programming.org

If you need more information then please write a message to 'contact {at} practical-programming {dot} org'.