Main Page: Difference between revisions

From NEOSYS Dev Wiki
Jump to navigationJump to search
No edit summary
 
(120 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 represent pick basic in c++ while retaining the essential character of pick basic making it easy to convert and maintain applications
=== FREE-DOM! ===


Conceived and created by Steve Bush of NEOSYS Software as a way to move from classic MV basic into classic open development environment.
*no proprietary/legacy database
*no proprietary/legacy language/compiler
*no proprietary/legacy runtime engine


Lots of people would like to migrate their pick-based applications away from the various classic mv platforms to industry standard environments. However they have so much code and rely on the nuances of pick for a variety of reasons that it is virtually impossible without rewritting almost from scratch.
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 bsd licence in order to attract the broadest possible base of people to the project. This is a unique selling point for people with an interest in replacing their pick based applications with standard industry tools.
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++ overloading to make C++ behave almost exactly like pick programmers expect and therefore usable for application level 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.


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


=== Storage ===
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 ===


Use standard sql databases (currently Postgres) transparently as a pick storage mechanism ensuring full SORT/SELECT functionality including even on calculated dictionary items (columns) written in the pick style c++ environment.
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.


== Supports both classic Pick syntax style AND modern OO syntax.==
=== SQL Perspective ===


=== Classic Pick "Global function" style syntax available ===
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.


print(convert(extract(c,1,2,3),"abc","xyz")));
=== Unicode ===


This is Exodus's C++ syntax. The trailing ; gives it away as C++
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.


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


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.
Exodus has a binary installer for Windows and OSX. Unix/Linux/Mac can be installed using configure/make/make install.


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


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


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


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


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


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


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.
The massive range of commercial and open source tools is available to assist development in C++.


no because python variables dont BEHAVE like pick variables in too many cases.
=== Deployment of Applications ===


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.
In the standards-based world that Exodus inhabits, there is a huge variety of tools to deploy applications.


"100"*10 in php is "100100100100100100100100100100"
=== Technical Agility ===


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


if you have thousands of lines of old code you dont have time to sort out all the subtle bugs caused by these differences
=== Genesis - Looking Back ===


generally the objective is to convert often hundreds of thousands of lines of pick basic fairly accurately into another language
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.


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.
=== Roadmap - Looking Forward ===


this does NOT mean that the syntax cannot change .. but it does mean that the sematics must remain almost identical
Remaining development


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
* Completion of [[Exodus Programmer's Manual]]
due to nuances in how the basic principles of how variables behave.
* mv-programmer-friendly way of doing labelled common
* Sorting and indexing on multivalues
* oconv/iconv of dates, time and numbers in any locale


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


== Concat operator ==
* 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


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.
=== Random Notes ===


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
[[What is Exodus]]?


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


== Why Postgres? ==
[[Keyword changes]]


Open source and technically very open and easy to extend with new datatypes etc.
[[How does Exodus handle Unicode]]


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
[[Why is Exodus dependent on Boost and not Qt?]]
.


[[Why does Exodus use autotools and not Cmake?]]


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.
[[Wishlist]]


== Why Boost? ==
[[Getting the right to commit to the subversion repository]]


Best of breed and is the prime place that C++ standards are worked out.
[[Unorganised notes about programming in Exodus]]


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


Only because the project is currently primarily developed in Windows. Previously it was primarily developed in Eclipse/Cygwin.
include\exodusfuncs.h lists the functions that simulates pickish syntax as close as can be achieved. The functionality however should be identical.


Visual Studio is prime development environment in Windows although there are perfectly good other ones eg Eclipse/Cygwin, Codeblocks (add more here).
include\exodusmacros.h lists a few keywords to simplify programming for application programmers not interested in programming in a more OO style.


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