Visual J++は、Microsoftが開発を終了したJavaの実装です。構文、予約語(キーワード)、形式文法規則は Java と同じです。1996 年に導入され[ 1 ]、2004 年 1 月に開発が終了しました[ 2 ]。J #とC#によってある程度置き換えられました。
MSJVMという実装はSun Microsystemsの準拠テストに合格せず、Java の開発元である Sun から訴訟を起こされました。Microsoft は 2007 年 12 月 31 日に MSJVM のサポートを終了しました (後に Oracle が Sun を買収し、Java とその商標も取得しました)。しかし、Microsoft は 2021 年に Java の配布を正式に再開しました (以前のように Windows や Web ブラウザにバンドルされてはいません)。これはOracleのOpenJDK [ 3 ]の Microsoft ビルドであり、LTS バージョンについては少なくとも 6 年間、つまり Java 17 については 2027 年 9 月までサポートする予定です。
J++はJava言語仕様に準拠していましたが、MicrosoftはVisual J++製品ラインで公式のSun Java実装の特定の機能を実装しませんでした。リモートメソッド呼び出し(Java RMI)とJavaネイティブインターフェース(JNI)はそのような例です。[ 4 ] [ 5 ]
さらに、J++はSunのJava実装には含まれていなかった拡張機能も実装した。イベント処理のためのコールバックとデリゲートの導入は、既存の設計概念に基づきながらも、J++を全く異なる言語として確立させた。
さらに、J++アプリケーションは、 SunのJava SDKの下で動作する他のJavaアプリケーションとは異なり、基盤となるオペレーティングシステム機能にアクセスするための標準化された方法に準拠していませんでした。Microsoftの実装では、J/Directと呼ばれる基盤フレームワークが、J++アプリケーションが基盤となるオペレーティングシステムにアクセスする際に、JavaのクラスライブラリとAPIを完全に回避できる基本メカニズムを提供していました。このJavaフレームワークを迂回するショートカットのおかげで、J++アプリケーションはJavaアプリケーションよりもWin32 API機能を効率的に活用することができました。
これらの機能を使用する J++ アプリケーションは Sun の Java SDK では実行できませんでしたが、Kaffeプロジェクトは、これらの機能を持つ J++ アプリケーションをオープンソースのJVMで実行できるようにする拡張機能を開発しました。しかし、これらの拡張機能 (Microsoft の資金提供を受けて TransVirtual によって実装) は広く使用されておらず、J++ アプリケーションは Kaffe で実行する前に Visual J++ でコンパイルする必要がありました。[ 6 ] [ 7 ]
Visual J++ はActiveXをサポートしていました。[ 8 ]
Visual J++ の例をいくつか示します。[ 9 ]
Windowsフォームを使用する:
パッケージorg.wikipedia.examples ;import com.ms.ui.ActionEvent ; import com.ms.ui.ActionListener ; import com.ms.ui.Button ; import com.ms.ui.Form ;public class SimpleForm { public static void main ( String [] args ) { Form form = new Form ( "Simple Form" ); Button button = new Button (); button . setText ( "Click Me" ); button . addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent e ) { form . setText ( "Button Clicked!" ); } }); form . add ( button );form.show ( ) ; } }ActiveXの呼び出し:
パッケージorg.wikipedia.examples ;import com.ms.activeX.ActiveXComponent ; import com.ms.activeX.Variant ;public class Example { public static void main ( String [] args ) { try { ActiveXComponent ax = new ActiveXComponent ( "InternetExplorer.Application" ); ax . setProperty ( "Visible" , new Variant ( true )); ax . invoke ( "Navigate" , new Variant ( "http://www.microsoft.com" )); } catch ( Exception e ) { e . printStackTrace (); } } }Windows API の呼び出し:
パッケージorg.wikipedia.examples ;import com.ms.win32.RegistryKey ; import com.ms.win32.User32 ;public class Example { public static void main ( String [] args ) { // メッセージ ボックスを生成するUser32 user32 = new User32 (); user32 . MessageBox ( 0 , "Windows API からこんにちは!" , "Visual J++" , 0 );// レジストリキーを読み込む RegistryKey key = new RegistryKey ( " HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion" ); String productName = key . getStringValue ( "ProductName" ); System . out . printf ( "Product Name: %s%n" , productName ); } }Windows Foundation Classes (WFC) は、Microsoft Win32プラットフォームAPIとDHTMLオブジェクト モデルを統合したクラス ライブラリです。WFC は主に、Windows 上で動作する Java アプリケーションのグラフィカル ユーザー インターフェイスを作成するために設計されました。
サン・マイクロシステムズは当初、Javaをマイクロソフトにライセンス供与していたが、後に商標権侵害でマイクロソフトを提訴した。サンがJavaブランドの使用に関して締結した商標ライセンス契約では、すべての実装が「互換性」を持つことが義務付けられている。
一部の観察者は、この非互換性は、少なくともサン社のJavaテクノロジーの進歩を遅らせるためのマイクロソフトの意図的な目的であったようだと指摘している。[ 10 ] [ 11 ]
MSJVM が Sun のコンプライアンス テストに合格しなかったことが、最初の訴訟の大きな要因でした。2004 年、この訴訟と他のすべての Sun と Microsoft 間の訴訟は、Sun と Microsoft の間の広範な合意の一部として和解されました。[ 12 ]和解の規定により、Microsoft は、J++ が (その時点で) ミラーリングされたバージョンを超えるバージョンの Java に Sun が導入した機能を J++ に組み込むことができず、Java バージョン 1.1.4 の機能セットで固定されることになりました。これにより、J++ は事実上終了し、それ以降のアップデートは終了しました。Microsoft はまた、MSJVM の配布を中止することに同意せざるを得ませんでした。現在、ダウンロードはできません。
しかし、和解条件では、マイクロソフトがセキュリティサポートを提供することが許可されており、セキュリティホールやセキュリティ上の脅威に関連するその他の問題を修正するために、MSJVM のさらなるアップデートが可能になっていました。マイクロソフトは、2007 年 12 月 31 日に MSJVM のそのようなサポートを終了しました。[ 13 ]
J++の技術は最終的に再利用され、Microsoft .NETプラットフォームやJ#プログラミング言語の一部としてしばらくの間存続した。
Visual J++ は、J++ 用の統合開発環境(IDE)の名前でもあり、J++ プログラマーがWin32 API を最大限に活用できるようにするための多くのツールとユーティリティを提供していました。
Visual J++は現在配布されていませんが、Microsoft Visual Studio製品ラインの一部でした。Visual Studio 6.0がJ++を搭載した最後のリリースでした。
Visual J# (ジェイ・シャープと発音)は、構文がJavaに近いMicrosoftの言語で、 .NET Frameworkの一部です。Visual J#はMicrosoft Visual Studio .NET製品スイートの一部であり、開発者やプログラマーがJ++(またはJava)から.NET Frameworkへ移行するのを支援するように設計されています。
マイクロソフトは後に、.NETプラットフォームの主要言語としてC# (「Cシャープ」)言語を開発しました。これは多くの点でJavaの影響を受けており、結果として.NET FrameworkはJavaと多くの共通点を持つようになりました。Javaと同様に、C#はバイトコード( CILと呼ばれる)にコンパイルされ、共通言語ランタイムと呼ばれる仮想マシン上で実行されます。.NET Visual Studio 2005は、J#を含む最後のリリースでした。
1997 年 9 月に P. Sridharan という名の Microsoft の担当者から送られた電子メールには、次のように書かれていると引用されている。「さあ、Java 言語を盗むことに取り掛かろう。とはいえ、Microsoft が実際に動作するクロスプラットフォーム Java を構築するのにどれくらいの時間がかかるか、検討したことはあるだろうか?もちろん、そんなことはしないが、Sun の Java を潰すためにどれくらいの時間があるか、ある程度の見当がつくだろう。」
私たちは静かにj++のシェアを拡大し、人々がwin32専用のJavaアプリを構築していることに気づかないまま、私たちのクラスをより活用するようになるだろうと想定すべきです。