Main Page: Difference between revisions

From NEOSYS Dev Wiki
Jump to navigationJump to search
 
(112 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Installing & Building all Components for Exodus]]
[irc://irc.freenode.net/exodusdb Help/IRC] - [http://groups.google.com/group/exodus-users/topics?hl=en Forum] - [[Manual]] - [[Special:RecentChanges|What's New]] - [http://code.google.com/p/exodusdb/downloads/list?q=label:Featured Download] <br>
Install: [[Linux]], [[Windows]], [[Mac]] <br>
Build: [[LinuxBuild|Linux]], [[Building on Windows|Windows]], [[Building on Mac|Mac]],
[http://code.google.com/p/exodusdb/source/browse/#svn/trunk Source],
[http://code.google.com/p/exodusdb/source/checkout Checkout], [[Doxygen]]


[[Installing and Using Tortoise Subversion]] (or a simple subversion command to checkout is "svn co http://svn.neosys.com/svn exodus")
News: Exodus now has alpha version bindings for nearly all major application languages.  Specifically php, perl, python, java and C#. Server-side Javascript may be added later. This means that Exodus no longer requires a C++ compiler. Functions are identical on all platforms but numerical and logical operators are not.


== What is Exodus? ==
=== Exodus: The Next Revolution in Multivalue? ===


Exodus is a way to do traditional pick-basic programming in C++.
Many people have dreamed of migrating their classic multivalue database applications and/or skills into mainstream programming environments. Until now however, it has been impossible. Where migration has actually been done, it has always meant that applications and skills have had to be redeveloped. The usual result is that multivalue applications are simply kept in operation and interfaces added to other systems. This isn't migration though, it is co-existence.


It was conceived and created by Steve Bush of NEOSYS Software as a way to move classic pick/multivalue basic into a classic industry standard environment with the minimum of upheaval.
Exodus is freely licenced implementation of a unique concept that completely reincarnates multivalue database technology in a mainstream environment with:


Many people would like to migrate their classic pick/mv based applications into industry standard environments however they have so much code that relies on the nuances of pick/mv, or their programmers are so used to pick-basic, that it is virtually impossible to move.
=== FREE-DOM! ===


Exodus is released under the modified BSD licence following the example of Postgres.
*no proprietary/legacy database
*no proprietary/legacy language/compiler
*no proprietary/legacy runtime engine


== Key Points ==
For those who know the history of the multivalue database world, Exodus promises its next revolution. First, multivalue stopped providing an operating system, next its data store became replaceable with mainstream databases. Now, with Exodus, even the Basic language/compiler has been eliminated.


=== Language ===
Using only widely accepted tools should ease adoption of Exodus (and therefore multivalue based applications) by the vast majority of companies and individuals who are not familiar with multivalue technology and are more comfortable investing in mainstream products.


Use C++'s operator overloading feature to make C++ behave (if not look) almost exactly like pick-basic programmers expect and therefore be usable for classic pick-basic style application programming.
Exodus faithfully mimics classic multivalue Basic behaviour, down to the last detail, by implementing a simple and practical kind of "Javascript version of DataBasic" that can be compiled by a standard C++ compiler. Exodus provides an exact one-for-one translation for every classic multivalue Basic operator, statement and function. It does this by providing C++ library and a Postgresql database plugin.


=== Storage ===
=== Universal Programming Style ===


Use standard SQL databases (currently Postgres) transparently as a pick style storage mechanism ensuring full SORT/SELECT functionality including dictionary items (columns) that invoke routines written in the pick-basic style CC++ environment.
Only a basic knowledge of the near universal "curly bracket syntax" used by C/C++/C#/Java/Javascript/PHP is required to program in Exodus. The move into the new syntax provides many practical and pleasurable ways to write code. Exodus code also be seamlessly integrated with C/C++ by including their libraries.


== Supports both classic Pick syntax style AND modern OO syntax.==
=== Sematic Cloning ===


=== Classic Pick "Global function" style syntax available ===
To enable a smooth migration of an application, all the underlying principles of multivalue databases must be retained and the code must be as readable and as writable as is was before. This is what Exodus provides. A change of syntax is unavoidable since Exodus uses a mainstream compiler, but it does not take long to learn and large bodies of existing code can be converted reliably and routinely.


print(oconv(extract(c,1,2,3),"MD20")));
Exodus uses PostgreSQL for all data storage while making it appear just like a completely traditional multivalue database - and without requiring any knowledge of SQL. All data definition is done in what appear to programmer/dba to be classic multivalue dictionary files.


This is Exodus's C++ syntax. The trailing ; gives it away as C++.
=== List/English/Access Clone ===


Pick programmers are used to this syntax and many will want to stay with this style for their own reasons which it is not the job of Exodus to gainsay.
Exodus supports various dictionary formats, the commonest iconv/oconv functions and has a complete LIST/ENGLISH/ACCESS replacement that can output either text or html.


It is a pity that C++ syntax doesnt allow the easy-to-write and easy-to-read pick-like array extract/replace like xxx<1,2,3> or    x<3>="x". A great shame but not a killer.
=== SQL Perspective ===


=== Classic OO  "Method Chaining" syntax available too ===
In the very near future all multivalue data will also be *readable* via Postgresql's standard SQL interfaces. This is without any additional work on behalf of the programmer/dba beyond the maintenance of classic multivalue dictionary files.


xyz.extract(1,2,3).oconv("MD20").print();
=== Unicode ===


This is Exodus standard C++ code.
All Exodus strings are Unicode and ordering is done using operating system collators. Internally, Exodus is UCS-2 on Windows 32bit and UTF-32 on Unix/Linux/Mac/Win64. All file i/o is locale/codepage based or UTF-8.


Variable xyz is one of Exodus' "Mv" objects ... with a method called "extract" ... which just produces another Mv object which is then processed by the oconv method and then printed.
=== Portability ===


What this actually does is: From variable xyz, extract field 1, multivalue 2, subvalue 3 then oconv it, then print it.
Exodus has a binary installer for Windows and OSX. Unix/Linux/Mac can be installed using configure/make/make install.


More C++ish style is also acceptable:
Exodus has no dependencies other than the obvious. If you want to write programs in Exodus, you need a C++ compiler. If you want to access or update multivalue data, you need Postgresql 8.1+, 9.0+.


cout<<xyz.extract(1,2,3).oconv("MD20");
Exodus's command line utilities are all written in Exodus/C++ providing both portability and samples of real programming using Exodus.


So a "pick variable" object (or class) Mv has all the various pick functions as methods. This means that you can use OO-like method chaining syntax. This is often the way people think in OO languages. In OO it is considered easier to understand code if you can simply read from left to right and it gives you the operations in the order that they are performed. As much as some people may not like OO method syntax, the many more people today are more comfortable with it than global function style.
If you want to build Exodus from source, you need Boost libraries. Portability to other platforms is forecast to be high. The code base is quite small and comprehensible being mostly implementation of a single class called "var".


== Why not just Python or PHP? ==
=== Cross Platform Development ===


Both of these are great languages to start new projects and many people using Pick language will have looked at the possibilities of porting to them.
To ease the life of Exodus programmers on all platforms, Exodus provides edic and other commands to edit/compile/catalog programs from any standard operating system command console. edic wraps the ubiquitous nano editor with color coding of exodus/c++ syntax and "jump to first error" after compilation errors. You can configure your own editor where desired. The Windows installer includes nano.


If you have thousands of lines of old code you dont have time to sort out all the subtle bugs caused by these differences
For traditional multivalue programmers, Exodus remains in the familiar world of "compiling" source code and executing "object code".  Modern C++ compilers and debuggers are very sophisticated these days. When compiled in the default debug mode, Exodus provides a source level backtrace for run-time errors like "variable not assigned", "non-numeric data" etc. All exodus programs can be interrupted/resumed.


Generally the objective is to convert often hundreds of thousands of lines of pick basic fairly accurately into another language
The massive range of commercial and open source tools is available to assist development in C++.


Changing syntax is laborious - but doesnt require highly skilled programmers.  However any subtle changes in semantics (how operators and functions work exactly) means that ports are unreliable which is far more costly.
=== Deployment of Applications ===


This means that the syntax can be changed when porting as long as not too bad then we will all get used to the new syntax. It also means that the sematics must remain almost identical otherwise people will be hunting down bugs forever. Anybody who has looked at replacing pick will have come to the same conclusion. porting needs meticulous rewriting into the new language mentality due to nuances in how the basic principles of how variables behave.
In the standards-based world that Exodus inhabits, there is a huge variety of tools to deploy applications.


Python and PHP operators and variables just dont BEHAVE like pick operators and variables in too many cases.
=== Technical Agility ===


Most modern dynamically typed languages suffer from the catastrophically inappropriate carry over of the concept of operator overload from statically typed languages. This means that you cannot trust what operators like + and * will actually do. Pick-basic, although dynamically typed, does not suffer from this. Pick's + will always do an arithmetic plus and fail if non-numeric strings are presented to it. Pick's * will always do an arithmetic multiply and fail if non-numeric strings are presented to it.
Exodus has a tiny footprint, is thread-safe and can produce standalone programs or be linked into utilities, libraries or embedded projects - with or without database functionality. The possibilities are very broad. The Exodus library can be maintained by any average C++ programmer, there is nothing particularly difficult about its implementation. The best things are always simple, like the original Pick database - which looks like living on in yet another incarnation in Exodus.


You just cannot trust dynamically typed languages that do operator overloading based on dynamic type. Accidents waiting to happen and frequently do.
=== Genesis - Looking Back ===


=== Example PHP problems ===
Exodus has been developed to date by NEOSYS to serve as the new back-end platform for the next generation of their vertical market package. It is nominally 90% complete and the input of multivalue professionals is sought before the API is frozen and put into production.


==== PHP * operator ====
=== Roadmap - Looking Forward ===


If you give it a variable that happens to contain a string then, instead of converting it to a number to multiply numerically, it will repeat the string n times! This is fine for php people who are used to it ... but cause chaos when converting and maintaining pick code in php.
Remaining development


"100"*10 in php is "100100100100100100100100100100"
* Completion of [[Exodus Programmer's Manual]]
* mv-programmer-friendly way of doing labelled common
* Sorting and indexing on multivalues
* oconv/iconv of dates, time and numbers in any locale


of course it isnt written as "100"*10 in code .. it is written as mynumber*10 ... BUT what happens depends on what data type happens to be in mynumber during execution
Possible future development


==== PHP concat operator (dot) ====
* Complete data visibility via SQL (automatic from multivalue dictionary)
* Binary build for main Linux distros
* Move everything onto sourceforge
* Move unit tests into subversion
* mv programmer friendly db management utils file/account-create/save/restore/
* Ease to use dictionary editor instead of plain edit?
* F correlatives
* Port the Postgres plugin to other databases


It is very clever of php to have special concat operater (even if it seems almost impossible to read to pickies used to a : for concat) (the dot). Most other languages dont have proper concat operator at all. But then from the point of view of Pick-basic it has the wrong precedence.
=== Random Notes ===


== Concat operator ==
[[What is Exodus]]?


The ability to concat variables in precisely the same way as pick is very important if you are going to move pick applications into any other language.
Announcement and discussion of project [[http://groups.google.com/group/comp.databases.pick/browse_thread/thread/dff87b745d02b79e/eaea73f5be63c249#eaea73f5be63c249]]


eg in pick if you concat two variables using the pick ":" operator that happen to be numbers you will still get a string out. ie concat in pick means concat. it DOESNT means add if the arguments happen to be numeric. the concat operator missing in c++ because it is strongly typed and it (and you) can tell from arguments whether it will add or concat
[[Keyword changes]]


in exodus, "variables" are a c++ class that behaves like a pick variable very very closely so you can port pick basic without being nervous of subtle bugs due to differences in mentality of the original language designers.
[[How does Exodus handle Unicode]]


== Why Postgres? ==
[[Why is Exodus dependent on Boost and not Qt?]]


Open source and technically very open and easy to extend with new datatypes etc.
[[Why does Exodus use autotools and not Cmake?]]


Postgres is widely available and well supported on all major platform. There has been very strong interest in and development of Postgres since Oracle bought up the MySQL's underlying database
[[Wishlist]]
.


[[Getting the right to commit to the subversion repository]]


Postgres licence in BSD so can be used in anyway you like whatsoever including using bits of the source code in your own code without GPL restrictions.
[[Unorganised notes about programming in Exodus]]


== Why Boost? ==
[http://www.theregister.co.uk/2011/05/19/cloud_storage/|A Comparison of "Key/Value" databases v. SQL databases]


Best of breed and is the prime place that C++ standards are worked out.
include\exodusfuncs.h lists the functions that simulates pickish syntax as close as can be achieved. The functionality however should be identical.


== Why Visual Studio? ==
include\exodusmacros.h lists a few keywords to simplify programming for application programmers not interested in programming in a more OO style.


Only because the project is currently primarily developed in Windows. Previously it was primarily developed in Eclipse/Cygwin.
include\mv.h lists the massive var class definition that defines how to write pick in oo object.method() style syntax.
 
Visual Studio is prime development environment in Windows although there are perfectly good other ones eg Eclipse/Cygwin, Codeblocks (add more here).
 
there is a windows dependency in this project at the moment about pipes for ipc with postgres but I will be removing that and using the portable boost shared memory
 
there is also a C driver that you install in postgres ... this is assuming that you want database operations read/write/delete etc which is almost certain
 
the postgres C driver is in subverwsion under pgneosys
 
the project isnt setup very flexibly - ie hard coding lib folder locations whereas they should have a macro to ease modification if you have installed the various dependencies in non-standard locations.

Latest revision as of 12:14, 28 December 2021

Help/IRC - Forum - Manual - What's New - Download
Install: Linux, Windows, Mac
Build: Linux, Windows, Mac, Source, Checkout, Doxygen

News: Exodus now has alpha version bindings for nearly all major application languages. Specifically php, perl, python, java and C#. Server-side Javascript may be added later. This means that Exodus no longer requires a C++ compiler. Functions are identical on all platforms but numerical and logical operators are not.

Exodus: The Next Revolution in Multivalue?

Many people have dreamed of migrating their classic multivalue database applications and/or skills into mainstream programming environments. Until now however, it has been impossible. Where migration has actually been done, it has always meant that applications and skills have had to be redeveloped. The usual result is that multivalue applications are simply kept in operation and interfaces added to other systems. This isn't migration though, it is co-existence.

Exodus is freely licenced implementation of a unique concept that completely reincarnates multivalue database technology in a mainstream environment with:

FREE-DOM!

  • no proprietary/legacy database
  • no proprietary/legacy language/compiler
  • no proprietary/legacy runtime engine

For those who know the history of the multivalue database world, Exodus promises its next revolution. First, multivalue stopped providing an operating system, next its data store became replaceable with mainstream databases. Now, with Exodus, even the Basic language/compiler has been eliminated.

Using only widely accepted tools should ease adoption of Exodus (and therefore multivalue based applications) by the vast majority of companies and individuals who are not familiar with multivalue technology and are more comfortable investing in mainstream products.

Exodus faithfully mimics classic multivalue Basic behaviour, down to the last detail, by implementing a simple and practical kind of "Javascript version of DataBasic" that can be compiled by a standard C++ compiler. Exodus provides an exact one-for-one translation for every classic multivalue Basic operator, statement and function. It does this by providing C++ library and a Postgresql database plugin.

Universal Programming Style

Only a basic knowledge of the near universal "curly bracket syntax" used by C/C++/C#/Java/Javascript/PHP is required to program in Exodus. The move into the new syntax provides many practical and pleasurable ways to write code. Exodus code also be seamlessly integrated with C/C++ by including their libraries.

Sematic Cloning

To enable a smooth migration of an application, all the underlying principles of multivalue databases must be retained and the code must be as readable and as writable as is was before. This is what Exodus provides. A change of syntax is unavoidable since Exodus uses a mainstream compiler, but it does not take long to learn and large bodies of existing code can be converted reliably and routinely.

Exodus uses PostgreSQL for all data storage while making it appear just like a completely traditional multivalue database - and without requiring any knowledge of SQL. All data definition is done in what appear to programmer/dba to be classic multivalue dictionary files.

List/English/Access Clone

Exodus supports various dictionary formats, the commonest iconv/oconv functions and has a complete LIST/ENGLISH/ACCESS replacement that can output either text or html.

SQL Perspective

In the very near future all multivalue data will also be *readable* via Postgresql's standard SQL interfaces. This is without any additional work on behalf of the programmer/dba beyond the maintenance of classic multivalue dictionary files.

Unicode

All Exodus strings are Unicode and ordering is done using operating system collators. Internally, Exodus is UCS-2 on Windows 32bit and UTF-32 on Unix/Linux/Mac/Win64. All file i/o is locale/codepage based or UTF-8.

Portability

Exodus has a binary installer for Windows and OSX. Unix/Linux/Mac can be installed using configure/make/make install.

Exodus has no dependencies other than the obvious. If you want to write programs in Exodus, you need a C++ compiler. If you want to access or update multivalue data, you need Postgresql 8.1+, 9.0+.

Exodus's command line utilities are all written in Exodus/C++ providing both portability and samples of real programming using Exodus.

If you want to build Exodus from source, you need Boost libraries. Portability to other platforms is forecast to be high. The code base is quite small and comprehensible being mostly implementation of a single class called "var".

Cross Platform Development

To ease the life of Exodus programmers on all platforms, Exodus provides edic and other commands to edit/compile/catalog programs from any standard operating system command console. edic wraps the ubiquitous nano editor with color coding of exodus/c++ syntax and "jump to first error" after compilation errors. You can configure your own editor where desired. The Windows installer includes nano.

For traditional multivalue programmers, Exodus remains in the familiar world of "compiling" source code and executing "object code". Modern C++ compilers and debuggers are very sophisticated these days. When compiled in the default debug mode, Exodus provides a source level backtrace for run-time errors like "variable not assigned", "non-numeric data" etc. All exodus programs can be interrupted/resumed.

The massive range of commercial and open source tools is available to assist development in C++.

Deployment of Applications

In the standards-based world that Exodus inhabits, there is a huge variety of tools to deploy applications.

Technical Agility

Exodus has a tiny footprint, is thread-safe and can produce standalone programs or be linked into utilities, libraries or embedded projects - with or without database functionality. The possibilities are very broad. The Exodus library can be maintained by any average C++ programmer, there is nothing particularly difficult about its implementation. The best things are always simple, like the original Pick database - which looks like living on in yet another incarnation in Exodus.

Genesis - Looking Back

Exodus has been developed to date by NEOSYS to serve as the new back-end platform for the next generation of their vertical market package. It is nominally 90% complete and the input of multivalue professionals is sought before the API is frozen and put into production.

Roadmap - Looking Forward

Remaining development

  • Completion of Exodus Programmer's Manual
  • mv-programmer-friendly way of doing labelled common
  • Sorting and indexing on multivalues
  • oconv/iconv of dates, time and numbers in any locale

Possible future development

  • Complete data visibility via SQL (automatic from multivalue dictionary)
  • Binary build for main Linux distros
  • Move everything onto sourceforge
  • Move unit tests into subversion
  • mv programmer friendly db management utils file/account-create/save/restore/
  • Ease to use dictionary editor instead of plain edit?
  • F correlatives
  • Port the Postgres plugin to other databases

Random Notes

What is Exodus?

Announcement and discussion of project [[1]]

Keyword changes

How does Exodus handle Unicode

Why is Exodus dependent on Boost and not Qt?

Why does Exodus use autotools and not Cmake?

Wishlist

Getting the right to commit to the subversion repository

Unorganised notes about programming in Exodus

Comparison of "Key/Value" databases v. SQL databases

include\exodusfuncs.h lists the functions that simulates pickish syntax as close as can be achieved. The functionality however should be identical.

include\exodusmacros.h lists a few keywords to simplify programming for application programmers not interested in programming in a more OO style.

include\mv.h lists the massive var class definition that defines how to write pick in oo object.method() style syntax.