Main Page: Difference between revisions

From NEOSYS Dev Wiki
Jump to navigationJump to search
 
(118 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]]
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.


Simple Command line to check is:
=== Exodus: The Next Revolution in Multivalue? ===


svn co http://svn.neosys.com/svn/trunk exodus
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.


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


Exodus is a way to do traditional pick-basic programming in C++.
=== FREE-DOM! ===


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.
*no proprietary/legacy database
*no proprietary/legacy language/compiler
*no proprietary/legacy runtime engine


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.
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.


Exodus is released under the modified BSD licence following the example of Postgres.
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.


== Key Points ==
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.


=== Language ===
=== Universal Programming Style ===


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.
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.


=== Storage ===
=== Sematic Cloning ===


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.
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.


== Supports both classic Pick syntax style AND modern OO syntax.==
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.


=== Classic Pick "Global function" style syntax available ===
=== List/English/Access Clone ===


print(convert(extract(c,1,2,3),"abc","xyz")));
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.


This is Exodus's C++ syntax. The trailing ; gives it away as C++
=== SQL Perspective ===


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.
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.


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.
=== Unicode ===


=== Classic OO  "Method Chaining" syntax available too ===
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.


xyz.extract(1,2,3).convert("abc","xyz").print();
=== Portability ===


This is standard C++ code. The trailing ; gives it away. xyz is one of Exodus' "Mv" objects ... with a method extract ... which just produces another Mv object which is then processed by the following method.
Exodus has a binary installer for Windows and OSX. Unix/Linux/Mac can be installed using configure/make/make install.


Which means: from variable xyz, extract field 1, multivalue 2, subvalue 3 from variable xyz, convert characters abc to xyz in the result and then print it.
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+.


The pick variable object has all the various pick functions as methods so you can use oo like method chaining syntax which is often the way people think in oo languages and (arguably) easier to understand since read from left to right 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.
Exodus's command line utilities are all written in Exodus/C++ providing both portability and samples of real programming using Exodus.


==Why not just Python or PHP?==
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".


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.
=== Cross Platform Development ===


no because python variables dont BEHAVE like pick variables in too many cases.
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.


Look at the php * operator. 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.
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.


"100"*10 in php is "100100100100100100100100100100"
The massive range of commercial and open source tools is available to assist development in C++.


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
=== Deployment of Applications ===


if you have thousands of lines of old code you dont have time to sort out all the subtle bugs caused by these differences
In the standards-based world that Exodus inhabits, there is a huge variety of tools to deploy applications.


generally the objective is to convert often hundreds of thousands of lines of pick basic fairly accurately into another language
=== Technical Agility ===


changing syntax is laborious but reliable and doesnt require highly skilled programmers. however any subtle changes in semantics (how operators and functions work) mean ports are unreliable which is worse.
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.


this does NOT mean that the syntax cannot change .. but it does mean that the sematics must remain almost identical
=== Genesis - Looking Back ===


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
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.
due to nuances in how the basic principles of how variables behave.


Look at the php concat operator. 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. php concat operator is
=== Roadmap - Looking Forward ===


== Concat operator ==
Remaining development


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.
* 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


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
Possible future development


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.
* 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


== Why Postgres? ==
=== Random Notes ===


Open source and technically very open and easy to extend with new datatypes etc.
[[What is Exodus]]?


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
Announcement and discussion of project [[http://groups.google.com/group/comp.databases.pick/browse_thread/thread/dff87b745d02b79e/eaea73f5be63c249#eaea73f5be63c249]]
.


[[Keyword changes]]


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.
[[How does Exodus handle Unicode]]


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


Best of breed and is the prime place that C++ standards are worked out.
[[Why does Exodus use autotools and not Cmake?]]


== Why Visual Studio? ==
[[Wishlist]]


Only because the project is currently primarily developed in Windows. Previously it was primarily developed in Eclipse/Cygwin.
[[Getting the right to commit to the subversion repository]]


Visual Studio is prime development environment in Windows although there are perfectly good other ones eg Eclipse/Cygwin, Codeblocks (add more here).
[[Unorganised notes about programming in Exodus]]


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
[http://www.theregister.co.uk/2011/05/19/cloud_storage/|A Comparison of "Key/Value" databases v. SQL databases]


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
include\exodusfuncs.h lists the functions that simulates pickish syntax as close as can be achieved. The functionality however should be identical.


the postgres C driver is in subverwsion under pgneosys
include\exodusmacros.h lists a few keywords to simplify programming for application programmers not interested in programming in a more OO style.


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.
include\mv.h lists the massive var class definition that defines how to write pick in oo object.method() style syntax.

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.