NyktOP Project Homepage

Welcome to the NyktOP Homepage!


Goals

Short: NyktOP is a source code generator package. It is based on (runtime) support libraries/modules for different languages.

NyktOP shall simplify prototyping (with tcl, perl, smalltalk or C++) and support structured programming. It's advantages are: standardized (ascii) File-I/O (via SLANG) and easy modelling of datastructures.

The idea is to offer the possibility to select a certain implementation language for a certain problem of interest, and to re-use the same data-model with another language in another problem of interest. E.g. use Tcl as a language for a very interactive application and C++ for a very time-consuming backend application on the same data model.

The first version had simple reasons:

  1. In some projects the internal code generator of MOOSE had to be used. But since MOOSE was in a very rapdidly changing state, we had to build a generator for RODEO/II, that produced similar C++ code and that was that independent, that we wouldn't get problems while MOOSE was changing.
  2. MOOSE was never meant to support static (C++ verb) or class (smalltalk verb) attributes. However in certain situations such attributes are very handy.
  3. .SLANG Files - and MOOSE currently only supports that file format - versioning and revision control via RCS is just impossible, b/c object order usually differs between each two write-outs.
  4. .SLANG files (see 3) in fact cannot be edited manually, b/c references are written with key-values calculated from memory addresses of referenced objects. (for this reason our main input source for the (old) generator are ascii .pre-files; for the new perl-based generator we use .input files)

Tools

To achieve our goal we supply different tools:


Supported languages

First we support all languages that are also supported by MOOSE (not only since there is an export-function to but also since we try generate very similar output):

Furthermore we support some other generation:

(converters exist from .input to .pre (and vice versa) and from .pre to MOOSE's .slang format (and vice versa). Thus from an existing file, every generator can be fed (with interim steps))


Problems

A slight problem is the fact, that currently the different generator parts (and also their templates) operate upon different dataset syntax... (the younger perl-, smalltalk- and tcl-generators try to use a completely other .input syntax than the .pre syntax of the older C++ generator)

On the other hand for the elder .pre format used w/ C++-generators we have a bigger template base. For example the C++ code-generator allowed to build a complete application with functions and additional methods, while perl, Smalltalk and tcl codegenerators do just generate data-structures, their I/O and std access methods.

Besides the elder templates are more sophisticated; we had e.g. certain templates for several flags and for arrays and different non-class types, that are not yet supported in newer generators

Since there are now converters between the different formats (at least from .pre to .input and from .input to .pre) this should be not that urgent any more.

Biggest problem however is the fact, that NyktOP is still a single-user/ single-developer system: as long as no-one but the creator uses it, there will be no progress. This problem covers especially the template-expander, which acts as the main c++ code generator and which is a really dirty & buggy old C hack. Another - perhaps even worse - example is the missing documentation. Due to the fact, that every function is used only by its writer, there was 'no need' to produce any documentation.


Existing Projects using NyktOP

NyktOP code generators have already been used in different own projects.

stat (.pre for C++)
A simple statistical evaluation system to calculate netlength of designed chips in order to check, if they follow certain stochastic distributions (gauss, exp; check via chi-square)

(job, finished)

RODEO/II (.pre for C++)
Reuse Of Design Objects: a system to support eCAD by supporting reuse of elder design parts. Possibility to use customized comparison functions to search for the best matching desgin-case in a database.

(Project thesis, finished)

sdlparser (.pre for C++)
Converter from SDL into SLANG

(Part of master thesis, finished)

nykditor (tcl/tk)
simple editor to input structured designs. customable via different configs (current configs: EER, Statecharts)

(Statecharts part of master thesis, finished) (EER: just a joke, incompatible replacement for MOOSE)

...


Portability

All used tools are known to work on HP/UX 9.x, 10.0 and Linux (SuSE 5.2, SuSE 6.1), however there is no aid for installation. If U encounter problems during installation, plz send an EMail to the author.


Author

SnailMail:
Bernd Noll,
Zu den Eichen 8,
D-56567 Neuwied, Germany;
Phone:
+49 / -631 / 311 2005
EMail
mailto:noll@email.com
WWW
http://noll.xsilon.de/
IRC
`0` @ IRCnet (Sorry, but I have not been to the IRC for years)

Download

The complete project is split into different archives, which may be used independently of each other. This has been done, b/c a perl-programmer will surely not use the Tcl or Python runtime modules. Thus putting 'em all into one archive might have caused a lot of unneccessary data.

Some files in the download directory now have got revision numbers. The links below do not show those numbers (There are softlinks from the unnumbered files to the numbered ones). The only purpose of this numbering is to show, if a file has been changed. So do not try to interpret something else with the numbers.

There are installation scripts supported for tcl, python and perl related modules and also for the newer perl based generator; use via
'bash INSTALL.bash (destinationdirectory:=/usr/local)'.
The elder template-expander based generator has no installation support.


History

Due to the fact, that the archives currently don't have any consistent version numbering (no release-number neither in name nor intern), it is suggested to have a look at the History page, which should name at least the most important changes.


The name of the game

Νυκτοσ Οφταλμοι - λαμπαδεσ λειπων

Nyktos ophtalmoi - lampades leipon. Eyes of the night, lights for the left.

This is a very pathetic name for just a small little collection of prototyping tools, but the name was born, when we heard the news, that CBM* had dropped Amiga*.


References

MOOSE
the Model-based Object Oriented Software generation Environment, is an internal project of AG Zimmermann at University of Kaiserslautern. More information on it can be found below homepage of AG Zimmermann.
Perl
is a nice semi-interpreted language, mainly used for scripting and conversion. It's main site is Perl.com.
TCL
is another interpreter language; it is usually used in connection with TK (TCL/TK) for smaller GUI oriented applications. It's main site is Scriptics.com.
AWK
is an elder scripting language merely for filtering scripts. There are newer versions of this language: mawk, nawk and gawk. We do only refer to gawk (GNU-awk), which can be found at the HP of the Free software foundation. Differences to other awk implementations are not known to the author (but surely exist).
Python
is just another interpreter language; straightforeward, quite strongly oo. (Unfortunately it depends on indentation for block structuring, which is sometimes quite annoying.) It's main site is Python.org.
Visual Basic
by M$ is a popular (?) hacking language in the M$ Windooze world. The language lives from its integrated environment and embedding into M$'s office applications (VBA). U'll find more information at M$ home.
JavaScript
is an interpreter language developed for Netscape navigator. Since it has been copied in M$IE, there have been tries for standardisation of that language. The language has a very nice, unusual oo behaviour: every object may be augmented w/ additional attributes and methods, and thus may be used as a prototype for a new class. More information is available at javascript.org.

Summary of Links


* We use different registered or trademarked expressions in this file, without explicitely showing the properties.


Best viewed with probably any Browser;
if U want to see a 'beautiful' page with dynamic elements, frames and lots of gfx, U'll have to go somewhere else.