Harbor-xBaseファミリーの新しい顔

参考:xBaseは、dBase(1980)に由来するDBMSのプログラミングシステムのファミリです。 これらは、共通のプログラミング言語(もちろん、特定の実装に固有のバリエーションを持つ)と、この言語に組み込まれたDBF形式のリレーショナルデータベースへのアクセス手段によって結合されます。 実際、dBaseはデータベースを提供するために設計された言語を備えたDBMSとして始まりました。 これは手続き型プログラミング言語であり、インタープリター言語のグループに属し、すべてではないとしても多くの、たとえば動的な型付けなどの一般的な機能を備えています。



Harbourの直接の前身であるClipperは、dBase IIIのパフォーマンス向上を目的として1985年に作成されました。 これを行うために、プログラムのソースコードはコンパイル段階でバイトコードに変換され、このバイトコードを実行するように設計された仮想マシンとともに実行可能ファイルに埋め込まれました。 したがって、クリッパーは、dBaseまたはFoxBase(別の一般的なxBase製品)の場合のように、実行および実行に外部インタープリターを必要としないスタンドアロンのexeファイルを出力しました。



80年代後半から90年代初頭に、Clipperは非常に人気があり、主に経理、管理、銀行などのデータベース関連アプリケーションの主要なプログラミングツールの1つでした。 言語がバージョンからバージョンにアップグレードされ、新しいサブシステムが追加されました。 後者の中で、Extend SystemとRDDは特に注目に値します。 拡張システム(拡張システム)は、Cで記述されたモジュールと通信するように設計されています-関数の呼び出し、パラメーターの受け渡し、戻り値の受け取り。 RDD-交換可能なデータベースドライバー(交換可能なデータベースドライバーの技術)-標準的な別の特別なライブラリの代わりに、単一行のコードを変更せずに異なるタイプのデータベースと連携できるようにする技術。 これは、たとえば、NovellのBtrieveでClipperアプリケーションが動作する方法とまったく同じです(誰か覚えているなら、そのようなクライアントサーバーの非SQL DBMSがありました)。



XBaseシステムは、主にデータベースを操作することを主な目的として常に認識されてきたため、おそらくSQLの人気が高まるにつれて、トレンドから外れ始めました。 そして、すべてがフォックスで多かれ少なかれ成功した場合-それを購入したMicrosoftは、数年前(2006年、Wikipediaによると)、人気のあるVisual Foxpro製品をベースにして、 TIOBEリストの名誉ある12位になりましたクリッパーはずっと悪くなった。 90年代初頭から所有していたComputer Associatesは、他の製品に依存しています。 一方、Clipperはメインルートから離れたままであり、差し迫った問題は解決されませんでした.1997年にComputer Associatesはさらなる開発の終了を発表し、MS-DOS環境で使用するために設計された16ビットプログラミングシステムのみをプログラマーに残しています。



将来について考えた人の多くは他のプラットフォームに移行しましたが、現代のプログラミング環境で実装されているClipperの利点がさらに求められると信じている人もいました。 このような実装がいくつか作成されました(xBase ++、Clip、Harbor)。そのうちの1つは、この日で最も成功したものです。これについてお話しします。



だからハーバー。 このプロジェクトは1999年に開始され、公式Webサイトはwww.harbour-project.orgです。 現在のバージョンは3.0(安定)、3.2(開発)です。



Clipperと同様に、Harborはプログラムのソースコードをバイトコードに変換しますが、その前身とは異なり、Harborコンパイラはオブジェクトファイルを作成せず、コンパイラに供給する必要のあるファイルを作成します。 たとえば、コンソールに挨拶を表示する単純な関数は次のとおりです。



Function Hello ? "Hello" Return Nil
      
      







次のように翻訳されます(コメントは私のものです):



 // HB_FUNC  : // #define HB_FUNC( funcname ) HB_EXTERN_C_ HB_EXPORT HARBOUR HB_FUN_##funcname ( void ) HB_FUNC( HELLO ) { // - static const HB_BYTE pcode[] = { 36,2,0,176,2,0,106,6,72,101,108,108,111,0, 20,1,36,3,0,100,110,7 }; //    ( - )   - hb_vmExecute( pcode, symbols ); }
      
      







バイトコードをより詳細に検討してください。



  static const HB_BYTE pcode[] = { 36,2,0, // 36 - ,      //  ,    - 2 176,2,0, // 176 -     ,  //  ,    106,6,'H','e','l','l','o','\0', // 106 -      20,1, // 20 -       //  , 1 -   36,3,0, // 36 - ,      //  ,    - 3 100, // 100 -  Nil    110, // 110 -        7 // 7 -     };
      
      







プロジェクトには、ハーバー( * .prg )、C、特別なオブジェクトファイルおよびライブラリのソースが含まれる場合があります。 Cコードはprgファイルに埋め込むこともできます。 pragma BEGINDUMP ... #pragma ENDDUMPで囲む必要があり、もちろんEXTEND SYSTEM規則に準拠する必要があります(Clipperについて説明したときに言及しました)。 以下は、そのような共生の例です。



 Function Main ? Sinus( 30 ), Sinus( 60 ) ? Return Nil #pragma BEGINDUMP #include <math.h> #include "hbapi.h" #include "hbapiitm.h" #define PI 3.14159265 //   ,    HB_FUNC( SINUS ) { // hb_parnd( n ) -  EXTEND SYSTEM,  n-   //  double  Harbour  // hb_retnd( d ) -  EXTEND SYSTEM,  double  d //   Harbour  hb_retnd( sin( hb_parnd( 1 ) * PI / 180 ) ); } #pragma ENDDUMP
      
      







ハーバーのCにあまり注意を払ったのは偶然ではありませんでした。 CコードからHarbor内部構造、変数、配列、オブジェクトへのアクセスを提供するClipper、Extend System、Item APIと比較して、Extended(非自発的なトートロジーではごめんなさい)は2つの言語の共生について話すことができます。これはHarborの最も重要な機能の1つだと思います。 これにより、Harborはすでに多数のモジュールで「成長」しています。CAPIを備えたさまざまな製品のシェルと、オープンソースと商用の両方のモジュールのリストが常に成長しています(現在、OpenCVについて考えています)。 もちろん、CはHarborで完成品のシェルを作成するためだけでなく、独立した開発(新しいRDD、GUIライブラリなど)にも使用されます。時々、アプリケーションによっては、HarborをCコードのシェルと見なし、ユーザーインターフェイスの実装を容易にします、データベースへのアクセスなど。



xBaseのこの汎用機能であるデータベースへのビルトインアクセスは、特別な注意を払いたいもう1つのトピックです。 実際、これは非常に便利です。外部DBMSを使用せずに、組み込み言語ツールのみを使用して、データベースで必要なすべての操作(作成、変更、更新、編集、検索)を実行できます。 データベースに格納されている情報の量が比較的少ない場合、外部DBMSの使用は完全に冗長に思えます。そのようなアプリケーションでは、MySQLも怪物のように見えます(MS SQLを入れるものもあります)。 ただし、大規模なデータベースの場合、Harborは非常にうまく適用できます(そして適用されます)。



これまでにxBase言語に出会ったことのない人向けに、典型的なデータアクセス構造を示す小さなコードスニペットを提供します。 もちろん、Harborのデータベースを操作するためのツールは、これらの数行で使用されているものよりもはるかに豊富です。



 Function Test Local aStru := { {"FAMILY","C",16,0}, {"IMYA","C",16,0}, {"OTCHES","C",16,0}, ; {"TELEFON","C",10,0} } //    mytable      dbCreate( "mytable", aStru ) //  mytable USE mytable //        INDEX ON FAMILY TAG FAMILY INDEX ON TELEFON TAG TELEFON //   APPEND BLANK REPLACE FAMILY WITH "", IMYA WITH "", OTCHES WITH "", ; TELEFON WITH "9101682020" ... //     ,   ordSetFocus( "TELEFON" ) IF dbSeek( "9101682020" ) //   ,   REPLACE TELEFON WITH "9102875555" ENDIF ... Return Nil
      
      







データベースへのアクセス手段は標準のものに限定されません。 DBF(Sybaseの商用Advantage Database ServerおよびオープンソースLetoDb)とSQLの両方に基づいた、クライアントサーバーDBMS用に記述されたRDDがあります。 ODBCとADOを介したアクセスを提供するモジュールがあり、これらのDBMSのC APIを使用するMySQL、PostgreSQL、SQLiteのモジュールがあります。



Clipperのすべての機能はHarborでさらに開発され、プログラミングに便利な高レベル言語になりました-自動メモリ割り当てと割り当て解除、ガベージコレクター、いわゆるraw配列、ランタイムでコードフラグメントをコンパイルして実行する機能、ダイナミクス。 OOPの完全な実装が追加されました。 Clipperのすべてのパワーを保持しているプリプロセッサは、Cからのいくつかの設計により拡張されています。ただし、ここではすべての革新をリストするのではなく、単にハーバー初心者向けサイトのセクションを参照します。



はい、ハーバーはオープンソースのクロスプラットフォームシステムであると言うのを忘れていたようです。 32ビットおよび64ビットのプラットフォーム、Windows、Linux、Unix、Mac OS X、QNX、OS / 2に存在し、Androidにあるようです。



この記事が興味を起こさせてくれたら嬉しいです。 この場合、いくつかの側面をより詳細に検討することができます。



All Articles