# DRAKON

DRAKON (Russian: Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность, lit. 'Friendly Russian Algorithmic language, Which Provides Clarity') is a free and open source algorithmic visual programming and modeling language developed as part of the defunct Soviet Union Buran space program in 1986 following the need in increase of software development productivity. The visual language provides a uniform way to represent processes in flowcharts.
There are various implementation of the language specification that may be used to draw and export actual flowcharts. Notable examples include free and open source DRAKON Editor (September 2011).

## History

The development of DRAKON started in 1986 to address the emerging risk of misunderstandings - and subsequent errors - between users of different programming languages in the Russian space program. Its development was directed by Vladimir Parondzhanov with the participation of the Russian Federal Space Agency (Academician Pilyugin Center, Moscow) and Russian Academy of Sciences (Keldysh Institute of Applied Mathematics).
The language was constructed by formalization, ergonomization and nonclassical structurization of flowcharts described in the ISO 5807-85 standard and Russian standard «Гост 19.701-90».
The goal was to replace specialized languages used in the Buran project with one universal programming language. Namely PROL2 (ПРОЛ2), used for developing inflight systems software for the computer system Biser-4 (Бисер-4), DIPOL (ДИПОЛЬ), used for developing software for the ground maintenance computer systems) and LAKS (ЛАКС), used for modelling.
The work was finished in 1996 (3 years after the Buran project was officially closed), when an automated CASE programming system called "Grafit-Floks" was developed.
This CASE is used since 1996 in: an international project Sea Launch, Russian orbit insertion upper stage Fregat (Russian: Фрегат, frigate) for onboard control systems and tests, upgraded heavy launch vehicle (carrier rocket) Proton-M.

## Overview

The name DRAKON is the Russian acronym for "Дружелюбный Русский Алгоритмический [язык], Который Обеспечивает Наглядность", which translates to "Friendly Russian Algorithmic [language] that illustrates (or provides clarity)". The word "наглядность" (pronounced approximately as "na-GLYA-dnost") refers to a concept or idea being easy to imagine and understand, and may be translated as "clarity".
Unlike UML's philosophy, DRAKON's language philosophy is based on being augmented if needed, by using a hybrid language, which can be illustrated as "incrustating code snippets from text language used into shape DRAKON requires". This way, DRAKON always remains a simple visual language that can be used as an augmentation for a programmer who is interested in making their own project code easier to support or other long-term needs for example improving the ergonomics of the coding process or to making code easier to review and understand.
The DRAKON language can be used both as a modelling/"markup" language (which is considered a standalone "pure DRAKON" program) and as a programming language (as part of a hybrid language).
Integration of a stricter, "academic", variant of a markup language into programming, such as provided by DRAKON, adds syntactic sugar allowing users of different programming languages to comprehend each other's contributions to the overall project and even provide commentary if needed.

## Family of DRAKON languages

DRAKON (Russian: ДРАКОН; meaning "dragon" in English) is designed with the intent of allowing for easy understanding and legibility, as usage of multiple languages in a single project can lead to confusion.
DRAKON is a family of hybrid languages, such as DRAKON-C, DRAKON-ASM, DRAKON-Java, etc. All languages of the DRAKON-family share a uniform, graphical syntax based on flowcharts. The standard graphical syntax provides similarity of drakon-charts for different hybrid languages. The text language uses its own syntax.
The basis of the graphical syntax is a graphical alphabet. Graphical elements ("letters") of the DRAKON alphabet are called icons (not symbols). DRAKON also has macroicons. Macroicons are the graphical words of the DRAKON language; they consist of icons. There are 27 icons and 21 macroicons in the DRAKON language.
Drakon-charts are constructed out of icons and macroicons.
The important parts of maсroiсons are valence points (in the illustration depicted as black circles). Into these points, icons or microicons can be successively entered and arranged by the drakon-editor into columns.

## Design

DRAKON was created as an easy to learn visual language to aid the comprehension of computer programs written in different programming languages for illustrative, planning and strategy purposes.
DRAKON uses drakon-chart, which is a formalization of traditional flowcharts to depict the overall structure of the program. Code snippets of a programming language are added to the DRAKON icons. The combination of visual elements with code helps with the creation and maintenance of readable flowcharts alongside the development of the program in question.
DRAKON rules for creating diagrams are cognitively optimized for easy comprehension, making it a tool for intelligence augmentation.
Drakon-charts of big multi-purpose programs can be complex and hard to comprehend. A set of smaller programs, that together serve the same purpose, are often easier to understand when depicted as drakon-charts. A similar problem exists in maintaining code of large programs. This problem is occasionally referred to as "rule of 30 [lines of code]" among programmers.

### Visual syntax

The full-text article containing description of the visual syntax of the DRAKON language in English, 12 pages, free to download, pdf.

## Examples
### Tetris example

Simple example of a program in the DRAKON language
These examples are real code from an implementation of the Tetris game. The examples are in DRAKON-JavaScript language. The icons (visual primitives) of the DRAKON language define the overall structure of the algorithms. The code snippets inside the icons (primitives) are in JavaScript.

#### advanceStep

The advanceStep function implements the core logic of the game. advanceStep is a state machine represented as a decision tree. The game engine calls advanceStep periodically. This state machine has three states "playing", "dropping", and "finished". The game takes different actions depending on the current state. For example, in the "playing" state, when there is a falling projectile and the projectile can move down, it is moved down one step.
With DRAKON, the reader of the algorithm can visually trace all possible paths in the decision tree.
* JavaScript code generated from the DRAKON-chart:
* function advanceStep {
* var _sw_8;
* _sw_8 = module.state;
* if (_sw_8 === "playing") {
* if (module.projectile) {
* if (canMoveDown) {
* moveDown
* return getStepPeriod
* } else {
* freezeProjectile
* return noProjectile
* } else {
* return noProjectile
* } else {
* if (_sw_8 === "dropping") {
* if (canMoveDown) {
* moveDown
* return DropPeriod
* } else {
* freezeProjectile
* module.state = "playing"
* return getStepPeriod
* } else {
* if (_sw_8 === "finished") {
* } else {
* throw new Error("Unexpected Choice value: " + _sw_8);
* return undefined

#### noProjectile

The noProjectile function handles the specific situation when there is no falling projectile. If there is a filled row, that row is removed from the grid. Otherwise, the game tries to insert a new projectile. If there is no space for the projectile, the game is lost.
* JavaScript code generated from the DRAKON-chart:
* function noProjectile {
* if (clearRow) {
* return getStepPeriod
* } else {
* createProjectile
* if (isGameLost) {
* gameOver
* module.state = "finished"
* return undefined
* } else {
* return getStepPeriod

#### clearRow

The clearRow function scans all rows bottom-up until it hits a row with no gaps. In such case the row is removed from the grid, the score is increased, and the game's tempo goes up.
* JavaScript code generated from the DRAKON-chart:
* function clearRow {
* var row, rows;
* rows = module.glass.rows
* row = rows.length - 1;
* while (true) {
* if (row >= 0) {
* if (rowHasHoles(row)) {
* row--;
* } else {
* deleteRow(row)
* increaseScore
* increaseSpeed
* return true
* } else {
* module.addedScore = 0
* return false

### DRAKON execution animation

The picture below illustrated the execution of the silhouette DRAKON algorithm. The algorithm execution is animated by highlighting diagram elements in the running order.
The 'Fishing' silhouette consists of four trees:
* Preparing for fishing.
* Waiting for a bite.
* Fishing work.
* Way back.
The main path of each tree is shown by highlighting thick vertical line which is called a skewer.
The flow graph always has a path from the Headline icon to each vertex (node) of the control flow graph. Consequently, a silhouette can't have unreachable code in any conditions.

## Modern usage
### DRAKON in the German Aerospace Center

DRAKON language is used in the German Aerospace Center for implementation of some critical functions dictated by the safety regulations of the flight tests, where automation is important because of maximum distance to the ground station and the process needs quick automatic execution.
The DRAKON Editor software was used to graphically program flowcharts which were specially checked. C-code was generated from the drakon-charts, for instance, for a DRAKON representation of code for launch detection.

### Business processes modelling

The DRAKON language may be used as the language to model and visualize business processes. "The DRAKON language was applied as the basic language for constructing models of business processes, which makes it possible to obtain a prototype of a finite-state machine when building models of business processes. The visualization of business processes in the state space allows the decision maker to improve the efficiency of the decision-making".

### Uses outside of programming

While DRAKON is primarily designed as a tool for comprehending computer programs, drakon-charts can also be used to illustrate processes in fields not related to computing.
In the DRAKON editor pictures can be added to the DRAKON icons. This ability is used in some fields to easily create "flowchart like" infographics. In Russia the DRAKON editor is known for being used in the medical field as a tool for making 'instructional' charts for patients or medical personnel.