Ultimate++

From Wikipedia, the free encyclopedia

Ultimate++
Developer: Ultimate++ team
Latest release: 605 / June 06, 2006
OS: Cross-platform
Use: application framework
License: most parts BSD
Website: Ultimate++ Homepage

Contents

[edit] What is Ultimate++?

In computer programming, Ultimate++ is at least 3 things:

  1. A cross-platform graphical widget toolkit for the development of GUI programs.
  2. A set of C++ (and U++) libraries (called packages in Ultimate++):
    1. "Core" is the base for all other Ultimate++ libraries.
    2. "CtrlCore" - a base for widgets (or controls).
    3. "CtrlLib" - actual widgets (or controls).
    4. Other libraries (full list available on request from maintainers).
  3. An IDE called theIDE.

Those 3 main things together make Ultimate++ an application framework comparable to Java or .Net framework.

[edit] History and design fundamentals

Ultimate++ design fundamentals were laid down in 1998 by its authors and current maintainers Mirek Fidler and Tomas Rylek from the Czech Republic as a result of several major dissatisfactions with:

  1. Oracle Forms;
  2. MS MFC;
  3. the existing C++ STL library containers limitations (See Reference "NTL vs. STL");
  4. value transfer semantics in C++ (See Reference "C++/U++ Value Transfer Semantics");
  5. general "lack of effective C++ libraries"

Ultimate's U++ "oldest" classes (Value, Date, Time, Nuller, Ref, Sql, OracleSession) started gaining shape as a supplement to MS MFC for Oracle GUI applications. At that time already Ultimate's authors were using (and improving) NTL containers as a replacement for STL containers.

As Ultimate++ has been constantly expanding since, a lot of older classes (including containers) have been completely rewritten in a quest to become what Ultimate's authors describe as "the most effective set of C++ libraries."

[edit] Structure and features of Ultimate's "Core"

The following list reflects some parts which Ultimate's "Core" package provides:

  • Vector, VectorMap
  • Convert
  • Segtor
  • Index
  • BiVector
  • BiArray
  • Array, ArrayIndex, ArrayMap
  • Algorithms
  • AIndex
  • AMap
  • Ptr and Pte (kind of smart pointers classes templates)
  • Date formatting and scanning
  • One
  • Any
  • Value
  • Streams, Stream utilities
  • Path
  • Buffer
  • Serialization utilities
  • CParser
  • XML and Xmlize
  • Miscellaneous (e.g exception handling string)
  • mathutil
  • Callbacks
  • Color
  • GTypes (Rect, Point, Size)
  • MT, Thread
  • heap
  • Debug, Log
  • Format
  • Uuid
  • Topic
  • CharSet, Language, i18

Ultimate's "Core" package extends the functionality of C++ with extensive use of templates, similar to the Boost libraries.

The fundamental difference between Ultimate++ and other C++ "container based" libraries is Ultimate's use of "NTL" instead of STL.

There are at least 2 fundamental innovations in Ultimate's NTL:

  1. NTL avoids copy requirement for elements stored, using different means to solve the problem.
  2. Index is array-like container with fast search of element with specific value. It serves as ideal building block for any associative structure (e.g. Index - Vector composition forms a map) and it also brings possibility to use indices instead of iterators for maps.

[edit] Ultimate's GUI toolkit as a base for RAD tool:

[edit] Programming specifics of U++ GUI

  • Minimal U++ GUI "Hello world" application:
  #include <CtrlLib/CtrlLib.h>
  GUI_APP_MAIN {
    PromptOK("Hello world");
  }

(macro GUI_APP_MAIN hides platform specific differences).

  • More complex example:
 #include <CtrlLib/CtrlLib.h>
 
 class MyApp : public TopWindow {
    Button button;
 
    void Click(String s) {
       button.SetLabel("I was clicked, YOHOO!");
       PromptOK(s);
       button <<= THISBACK1(Click, "Button was clicked once again!");
    }
 
 public:
    typedef MyApp CLASSNAME;
 
    MyApp() {
       Title("Testing of Ultimate++");
       button.SetRect(100, 100, 200, 50);
       button.SetLabel("Click me!");
       button <<= THISBACK1(Click, "Button was clicked for the first time.");
       Add(button);
    }
 };
 
 GUI_APP_MAIN
 {
    MyApp().Run();
 }
  • Use of members instead of pointers:
  struct MyDialog {
     Option     option;
     EditField  edit;
     Button     ok;
 };

  • Dialogue templates are C++ templates:
 template <class T>
 struct WithMyDialogLayout : public T {
     Option option;
     EditField edit;
     Button ok;
 };
 template <class T>
 void InitLayout(WithMyDialogLayout<T> *layout, ...);
 // implementation details omitted

(See Reference U++ GUI Overview and U++ GUI tutorial)

[edit] Ultimate++ as a RAD tool

Ultimate's way of C++ use leads to GUI code reduction. Futher development speed improvements can be achieved with the use of Ultimate's templating system and "C++ friendly" - Layouts (forms) and Icons designers. With the existing libraries (packages) and theIDE, Ultimate++ is classified as a Rapid Application Development tool.

[edit] Cross Platform

Programs created with Ultimate++ can be compiled and run on various operating systems:

  • Microsoft Windows: Mature and "production quality"
  • Linux: Stable. (Development version includes many improvements over latest stable version)
  • FreeBSD: Port has been submitted and FreeBSD users exist.

Support has been planned for the following platforms:

The use of "Chameleon technology" helps programs to look native on any platform.

[edit] "Chameleon technology" of U++ GUI

One of the distinctive features of the Ultimate++ GUI toolkit is the so called "Chameleon technology." Chameleon is a platform independent painting (skinning) mechanism which allows adjustment of a widget's look (skin) to the programmer's wishes or tastes. Chameleon can also detect and use the operating system or platform's look and feel (or "theme"). Full implementation of Chameleon is expected at the end of 2006.

[edit] Structure and features of Ultimate's theIDE

  • Modular concepts:

With packages and assemblies - an original system to manage projects - Ultimate's theIDE introduces modular concepts to C++ programming. At the heart of which is a philosophy - "everything belongs somewhere".

  • Fast switching between compilers and configurations:

Ultimate's theIDE can work with GCC, MinGW and Visual C++ 7.1 or 8.0 compilers (including free Visual C++ Toolkit 2003 and Visual C++ 2005 Express Edition) and different configurations (like console, multi-threaded, GUI application, dll etc.)

  • BLITZ-build technology:

Ultimate's theIDE BLITZ-build technology enables to speedup C++ rebuilds up to 4 times.

  • Debugger:

Ultimate's theIDE also contains its own fully-featured debugger.

  • Layout (or forms) designer.
  • Code assistant:

Ultimate's theIDE Assist++ is a C++ code analyzer which provides features like customizable code colorization, completion, navigation, transformation, selectively filtered inheritance etc.

  • Documentation tool:

Ultimate's theIDE Topic++ enables programmers to use it as a help system and, at the same time while programming, create or expand code documentation in rich text format which later can be exported into PDF format with Ultimate's own editor called UWord.

  • Translation tool.
  • Application templating system:

Ultimate's theIDE has its own built-in interpreter called Esc which can be used to program templates of files or entire projects.

TheIDE can also be used to develop non-U++ applications. That makes Ultimate's theIDE comparable to such products as MS Visual Studio, CodeBlocks, DevC++ etc.

[edit] Language bindings

None yet.

[edit] References

[edit] See also

[edit] External links

[edit] Applications developed using U++