HN 日本語サマリー

← 一覧へ戻る
プログラミング

Microsoftは2007年にFoxProを終了させた。しかし、ここにFoxProが復活した

Microsoft killed FoxPro in 2007. Anyway, here's FoxPro revived (foxscript.org)

135 pointsby boredjohnny105 コメント

要約

FoxDev Studioは、Microsoftが2007年にサポートを終了したVisual FoxPro(VFP)アプリケーションを、書き換えや変換なしに現代の64ビット環境で実行可能にするプロジェクトです。VFPのIDE、言語、データ形式を忠実に再現し、当時のアプリケーションをそのまま動作させることができます。また、Webリクエストに応答するFoxScript機能も追加されています。

全文翻訳

あなたのFoxProアプリケーションが、現代のマシン上で快適に動作します。 FoxDev Studioは、あなたが既に持っているプロジェクト、フォーム、テーブルを開き、書き換え、変換、エクスポートのステップなしで、あなたが覚えている通りの方法で実行します。 ダウンロード 開始する 構築方法 顧客 会社 Western Trading Co. クレジット限度額 25,000.00 保存する 中断したところから再開 長年開いていないフォルダを指し示すだけで、そこにあるものがそのまま使えます。 あなたのプロジェクト、そのまま プロジェクト、フォーム、クラスライブラリ、メニュー、レポートは、あなたが既に持っているファイルから直接開きます。最初に移行されるものも、後に残されるものもありません。 使い慣れたデザイナー フォーム、クラス、メニュー、レポートは、プロジェクトマネージャー、コマンドウィンドウ、そして行で停止するデバッガーと共に、期待通りの場所で編集できます。 あなたのデータはあなたのデータとして残ります テーブル、インデックス、メモ、データベースは、その場で読み書きされます。後でディスクに残るのは、以前と同じ種類のファイルです。 何と通信していたか、それは今も通信します アプリケーションが依存しているシステムコール、オートメーションオブジェクト、古いアドインライブラリは引き続き機能するため、誰も触りたくない部分はそのまま残ります。 その見た目 Visual FoxPro自身のサンプルプロジェクトでのIDE。すべての画像は実際のセッションです。 Visual FoxPro自身のSolutionサンプルをインポートして実行中:画面タブのランチャーフォーム、エクスプローラーのプロジェクトの123個のフォーム、7つのメニュー、11個のクラスライブラリ、そしてイベントを待つランタイム。 エディタはランタイム自身のコンパイラを通してリントするため、下線が引かれたものは失敗するものです。 Solutionサンプルのメインプログラムのブレークポイントの1つ先のステップで停止:コールスタック、ローカル変数、ウォッチ、そして実行中の行。 テーブルブラウザでのデータベースコンテナ:8つのフィールド、17のレコード、クリックでアクセスできるメモ。 FoxScript:HTTPルートに応答するラムダ、その中で呼び出される32ビットライブラリ、8080でリッスンしています。 近似ではなく、一致するように構築 わずかな違いが古いアプリケーションを壊します:数字が1列幅広すぎる、イベントが1瞬遅れて到着する、間違った番号のエラーが出る。そのため、ここでは動作は、リファレンスページを読んで希望するのではなく、Visual FoxPro自身に尋ねてその回答に合わせることで決定されます。 その結果として、ゼロから書き直されたランタイムが生まれます:起動が速く、自己完結しており、まだ到達していないコーナーについて率直です。 Visual FoxPro 9言語リファレンスの1,722の要素がランタイムで認識されています それらのうち1,534は、製品の回答と比較するテストによって実行されています まだ会ったことのない3つの名前。それ以外はすべて実行されるか、意図的に無視されるか、名前で拒否されます。 Visual FoxPro 10がどうなっていたか Visual FoxProはバージョン9で、32ビットで停止しました。これは同じ言語ですが、2007年から凍結されていない基盤で再構築されています。それを可能にする4つの要素があります。 呼び出しが行く場所/32ビットの世界が停止する場所 64ビット 32ビット 画面上のフォーム 下のツリーから直接描画するReact フォーム全体ではなく、1つのコントロールを再描画します。 ライブオブジェクトツリー プロパティとイベントを持つすべてのコントロール THISFORM.lblGreeting.Caption = cMsg 仮想マシン バイトコードにコンパイルされ、WebAssemblyで実行されるあなたのコード リクエストを生成し、決してブロックしません。 ホスト プロセス内のファイル、テーブル、COM、および64ビットライブラリ SET LIBRARY TO fllhost.exe あなたの.fllを保持する32ビットプロセス 64ビット、エンドツーエンド 32ビットに伴う上限はなくなりました Visual FoxProは32ビットプログラムであり、それは見かけ以上に多くのことを決定します。テーブルが2ギガバイトで停止し、メモファイルが2ギガバイトで停止し、大きなレポートが十分な空き容量のあるマシンでメモリ不足になるのはそのためです。制限はファイル処理に埋め込まれた符号付き32ビット数であり、誰かが下したライセンス決定ではありません。 FoxDev Studioは全体として64ビットです。すべてのファイルオフセットは64ビットであり、テーブルはメモリにまったく読み込まれないため、かつて停止していた同じ.dbfが数百ギガバイトにまで拡張されます。それに頼る前に知っておくべきこと:2ギガバイトを超えて拡張されたテーブルは、Visual FoxProでは再度開けません。それでも両方で作業している場合、それは一方通行のドアです。 オフセット/到達するもの Visual FoxPro 2,147,483,647バイト:テーブルは2GBで停止します 最上位ビットが符号を運びます。だから2GBであり、4GBではありません。 FoxDev Studio 9,223,372,036,854,775,807バイト:オフセットが停止することはありません 読み書きのすべてのバイトは、この方法でアドレス指定されます。 それが1つのテーブルに何をもたらすか 以下の各正方形は2GBです:Visual FoxProテーブルが保持できたすべて。 2 GB 279平方:130バイトレコードの1つのFoxDevテーブル、558 GB。 1KBレコードでは4.4TBに達し、それはそれらの2,200です。 それを止めるのは、DBFヘッダー自体のレコード数です。 仮想マシン コンパイラと、それを作るものを実行するために構築されたマシン Visual FoxProはあなたのプログラムをp-codeにコンパイルし、それを実行するためのランタイムを配布しました。これは同じ構成で、再び作られています:Rustで書かれ、WebAssemblyにコンパイルされたコンパイラとバイトコードインタプリタなので、アプリケーションが実行される場所ならどこでも1台のマシンがあなたのコードを実行します。エディタは、そのコンパイラを通してあなたがタイプしたものをチェックするため、下線が引かれたものとランタイムが拒否するものは、乖離することはできません。 実行中のプログラムはファイバーです。外部の世界から何か(メッセージボックス、モーダルフォーム、次のレコード)を必要とするとき、それは呼び出してブロックするのではなく、yield(譲歩)します。マシンがスタックから外れている間に作業が行われ、回答が返されます。それがMESSAGEBOX()が背後のウィンドウをフリーズせずにプログラムを停止させる理由であり、READ EVENTSがスピンせずに待機する理由であり、SetFocusがGotFocusを発火させることができ、フォームがまだ構築中である間にInitが実行できる理由であり、FoxProが常にそうしてきた順序です。 マシンがどのように機能し、何を実行するか。 画面 あなたが見るフォームは、その絵ではなく、オブジェクトツリーです。 実行中のフォームは、あなたが期待するプロパティを持つオブジェクトのライブツリーであり、インターフェースはReactによってそのツリーから直接描画されます。各オブジェクトは自分自身のみを監視するため、THISFORM.lblGreeting.Caption = cMsg はフォーム全体ではなく、1つのラベルを再描画します。密集した画面では、それは瞬時と遅延の違いです。 同じツリーがデザイナーが編集するものです、1ステップ前です。最初のものと同期して保たれる2番目のモデルはありません。これが、フォームとそのデザイナーが異なる話を始めがちな場所です。 32ビットブリッジ あなたの古いライブラリはまだロードされますが、ここにあるものは何も32ビットではありません。 .fllは32ビットイメージであり、64ビットアプリケーション内のすべてのプロセスは64ビットなので、アプリケーション自体の中では何もそれを開くことができません。それを不可能だとあなたに伝えるのではなく、SET LIBRARY TOはあなたのライブラリを保持するだけの小さな32ビットプロセスを開始し、ランタイムがそれに話しかけます。呼び出しは同期されます。なぜなら、プログラムは式の途中でライブラリに呼び出す可能性があり、後で到着した回答は回答にならないからです。それは実際のライブラリに対して測定されます:暗号化ライブラリ、FoxTools、そしてMicrosoft自身のAPIサンプルのライブラリ。 64ビットのものは何もブリッジを必要としません:DECLARE ... DLLは同じプロセスで最新のライブラリに到達し、オートメーションオブジェクトは常にそうであったように到達されます。古い道は開いたままですが、それはもはや唯一の道ではありません。 FoxScript:同じ言語、より多くの部屋 あなたが書いたすべては、常に意味していた通りに意味します。FoxScriptは上に付け加えるだけです:後で実行するために何かに渡せるブロック、そしてあなたのビジネスを既に知っているコードからWebリクエストに応答する方法。 server.prg/FoxScript && あなたの古いアドインライブラリは以前と同じようにロードされます SET LIBRARY TO "vfpencryption71.fll" ADDITIVE LOCAL oServer oServer = FoxScript.Http.CreateServer() oServer.Get("/api/v1/customers/:id", LAMBDA(req, res) LOCAL lnId lnId = VAL(req.Params("id")) SELECT * FROM customer WHERE cust_id = lnId INTO CURSOR c_cust IF RECCOUNT("c_cust") > 0 res.Status(200).Json(FoxScript.Data.CursorToJson("c_cust")) ELSE res.Status(404).Json('{"error": "Not found"}') ENDIF USE IN c_cust ENDLAMBDA ) oServer.Listen(8080) READ EVENTS その行のすべては、あなたのフォームと同じランタイムで実行されます。クエリ、カーソル、ライブラリ呼び出しは通常のFoxProです。ラムダとサーバーは、FoxS