Organisation and Methodology

Indus is a general purpose, object oriented, concurrent, network centric programming language. Indus draws a lot of its features from Java but adds new features, mostly related to representing and executing concurrent programs across a network.

It is probably very important to first understand the need for yet another programming language before going about learning how to program in it. In the case of Indus, this is more important as there are already a variety of programming languages that implement programming models across various paradigms.

The rationale for creating Indus is to address the following requirements

Concurrent processes and Collaborative execution
Indus is an object oriented programming language that supports massively scalable concurrent computing across a variety of target platforms. The language supports mechanisms of coordination among active concurrent processes to cooperatively execute tasks as well as mechanisms of composing and reusing static logic by active processes. Active processes are called Agents and Static logic or passive processes are called Components. Any application can therefore be modeled as a set of concurrently executing agents and that coordinate among each other and compose components to implement applications.

True Write once, Run everywhere
Indus has been designed and implemented to give more power to developers to implement applications that run across a variety of platforms, be it a 8 bit micro-controller based wireless sensor to a 16/32 bit multimedia products to 64 bit Servers and PC platforms. Existing programming languages are mostly PC centric that require monolithic virtual machines and libraries to execute applications or are very low level that does not support higher level functionality like service discovery, dynamic networking, intelligent message routing, etc. The result is a proliferation of programming languages, tools, middleware targeted at specific platforms. The economic cost of this is very high both in terms of time required and in terms of productivity benefits.

Network centric computing
In addition, the Indus programming language subsumes middleware functionality. Existing programming languages are host centric, Indus is network centric and therefore network middleware capabilities such as service discovery, run time connections, message routing, transaction management and policy management and available through a set of run time libraries collectively called the Container in Indus terminology. Indus programs deployed into a Container transparently provide them with the all services that are necessary for them to become network enabled.

In addition to the new language syntax and semantics in Indus for concurrent and distributed programming and the Container facilities for network enabling Indus programs by default, the adoption of the interpreted and compiled ports simply as tools by the Container is another innovation. Compilation and interpretation are both suitable in different application execution contexts. Indus therefore makes the Container the centerpiece of application execution that simply uses compilation and interpretation as the execution environment demands. For example, on operating platforms with a operating system and a virtual machine, Indus uses the virtual machine to interpret Indus programs to execute across the network. On platforms that do not have an operating system, the Container itself provides facilities for thread initialization, synchronization, prioritization and inter-process communication. In other cases, the Container uses a combination of interpretation to process Indus application logic and compiled code generated from base libraries that Indus applications use to optimize on code footprint and performance.

The Indus container thus becomes a ‘grid engine’ that can run network enabled, concurrent programs across a network composed of a variety of hosts ranging from 8 bit micro-controllers to 16/32 bit multimedia devices to 32/64 bit PCs and Servers.

Next : HelloWorld in Indus