What is Pluk?

Pluk Language is a general-purpose programming language. It is independent of any particular operating system and designed to be used on various software and hardware platforms (e.g. Windows, UNIX).

In the hierarchy of contemporary languages, Pluk represents the third generation of languages. Pluk is an object-oriented interpreter (a ‘lazy’ compiler). Syntactically it is similar to C++. Like C++, it contains all means of procedure-oriented programming, which allows the ‘old school’ programmers to switch to object-oriented programming pretty easily. Frankly, the concept of object-oriented programming, in its ‘pure’ form, sometimes requires unnecessary and non-productive operations, such as development of classes, whose only purpose being to introduce procedures into the language.

read more

class HelloWnd : GWnd { }; event WND_UPDATE, HelloWnd::OnUpdate; event WND_SIZE, HelloWnd::OnSize; new HelloWnd::HelloWnd(void) = <| self->GWnd("HELLO_WND"); self->AllowEvent(WND_UPDATE); self->AllowEvent(WND_SIZE); self->Open(); self->SetPos(Rand(100), Rand(100)); self->Show(); |>; new HelloWnd::~HelloWnd(void) = <| end; |>; new HelloWnd::OnUpdate(void) = <| new mdc = instance MDC(self); mdc->OpenDC(); new WndSize = self->GetClientSize(); new StrRect = mdc->GetStringRect("Hello World!"); mdc->OutText((WndSize[0] - StrRect.right) / 2, WndSize[1] / 2, "Hello World!"); mdc->CloseDC(); |>; new HelloWnd::OnSize(int, int, int) = <| self->Invalidate(TRUE); |>; new HelloWnd::Cleanup(void) = <| delete self; |>; global MainWnd = instance HelloWnd;

Historical overview

Pluk language was developed in the collaboration of Laboratory of Medical Imaging of the Nuclear Physics Institute and Institute of Physical and Chemical Biology of Moscow State University in the 1994-1995. The original goal of project was creation of platform for analysis experimental data in the biophysical research. Experience of authors in analysis of experimental data and algorithm prototyping was formulated in the following desiderata.

Desiderata:

  • Language has to be fast interpreter which allows convenient manipulation of code and data from the integrated development environment (IDE). The IDE has to include integrated debugger
  • Language has to support object-oriented and procedural programing styles
  • The stop-on-error condition has to preserve the current data.
  • The structure of data (class specification) can be changed (e.g. new data fields could be added/removed to/from the class specification) runtime. The existed at the moment of changes variables must be modified in accordance with new specification. The content of variables, which is compatible with new specification, must be preserved.
  • The code can be changed any time and calculation must continue with new code
  • Object-oriented architecture has to support multiple inheritances. The structure of inheritances could be modified runtime.
  • Language has to support dynamic typing (typeless variables) as well as overloaded methods discriminated by parameter types.
  • Simple and transparent interface to the C/C++ libraries
  • Easy way to move prototype algorithms to production: Simple interface to create classes where methods are partially implemented on Pluk and partially implemented on C/C++. Support a simple way to move Pluk methods on C/C++ level
  • Basic mathematical library has to include state-of-art deconvolution of experimental curves on sum of exponents, sum of Gaussians etc.

Later this list was expanded by:

  • Seamless call of remote procedure and converting local objects into the proxy for remote one, in order to support distributed calculation. The conversion to the remote objects and back must be supported runtime to simplify debugging of the program.
  • Automatic generation of second order languages to generate as declarative specification as simplified scripts on base of Backus-Naur-specifications.
  • Automatically generate mapping of object-oriented data scheme into relational database with generation appropriate declarative specification
  • Automatically generate code to decompose object-oriented OSQL queries into multiple standard SQL queries as well as a code for assembly-disassembly Pluk object into relational database
  • Automatic synchronization of objects in the program memory with relational database presentation.

On basis of Pluk platform were developed:

  1. Medical image analysis stations (Ultrasound3D, Multivox2D/Multivod3D), PACS servers and medical automated information systems (AIS) (1994-2004). This packages were installed in more than 60 hospitals ( http://www.multivox.ru, http://techheim.com/kor/main/index.html )
  2. Mathematical libraries and utilities for biophysical data analysis (1994-2015)
  3. Fluorescent microscopy image analysis software MotionTracking (2001-2015) / Kalaimoscope (2007-2011)
  4. FitModel software for fitting kinetic model (based on system of non-linear ODEs) to the experimental data (1998-2015)
  5. FitModelPDE_2 software for fitting kinetic model (based on system of non-linear PDEs) to the experimental data (2012-2014)


Projects built with PLUK

© 1995-2024 Yannis Kalaidzidis, Imprint