「一度書けばどこでもコンパイルできる」(WOCA )とは、ソースコードを複数のプラットフォームでコンパイルでき、コンパイルや動作にプラットフォーム固有の変更を必要としないソフトウェア技術の設計目標です。この技術は通常、プログラミング言語とコンパイラ、ソフトウェアライブラリまたはソフトウェアフレームワークで構成され、これらが複数の環境に移植されることでクロスプラットフォームサポートが実現されます。
WOCAは、 Javaの目標である「一度書けばどこでも実行できる(WORA)」とは異なり、クロスプラットフォームのサポートはバイトコードレベルに依存し、そのレベルで実現されます。[ 1 ] .NETなどの他のテクノロジーも、同じ目標を達成するためにバイトコードを使用します。
WOCA の理念に従う開発者を支援することを目的とした言語は数多くあり、C++、Pascal ( Free Pascalを参照)、Ada、Cobol、Cなどが挙げられますが、標準ライブラリが提供する関数以外の関数を使用しないことが条件となっています。Go のような言語はさらに進んで、システム固有のものは一切使用せず、ただ動作するだけであるべきであり、システム固有の要素にはプラットフォーム固有のファイル群が使用されます。コンピュータ プログラムは、ソケットやGUIなどのさまざまなプラットフォーム間の違いを隠蔽する抽象化レイヤーを提供するクロス プラットフォーム ライブラリを使用することもあり、記述されたソース コードの移植性を確保します。これは、たとえばQt (C++) やLazarus (Pascal) IDEがLCLと対応するウィジェット セットを介してサポートしています。[ 2 ]
現代のコンピュータには、ワープロ、データベース管理、表計算ソフトなど、プログラミング経験のない人でもデータを整理、抽出、操作できるアプリケーションが数多く搭載されています。これらのアプリケーションを使えば、整理された情報をPDFファイルなどの文書として出力したり、印刷したりすることも可能です。2000年以前には、こうしたアプリケーションの一部は利用できず、1980年以前にはほとんど存在しませんでした。
1960年代初頭にコンピュータによる自動化が始まった当初、データからレポートを作成したり、請求書、給与小切手、発注書、その他企業、学校、政府機関が作成する書類を印刷したりする必要がある場合は、あらかじめ印刷された用紙を使って、物理的なタイプライターで入力していました。そうでなければ、コンピュータに保存されている情報を整理、操作、印刷したい場合は、誰かがプログラムを作成する必要がありました。場合によっては、プロのプログラマーが理解できないようなプログラムを作成したり、利用可能なプログラマーが妥当な時間内に作成できなかったり、あるいは利用できるプログラマーがいなかったりといった理由で、プログラミングの知識がない専門家が、少なくともデータから必要な情報を操作して印刷する方法を知るために、プログラミングスキルを習得する必要がありました。
プログラマーが作成したプログラムであれ、エンドユーザーが自身の利用のために情報を得るプログラムであれ、どちらの場合も手順は同じです。プログラムを作成し、コンパイラ(作成されたプログラムをコンピュータが理解できる命令に変換する別のプログラム)に入力し、エラーを修正し、プログラムが正しく動作するまでこの手順を繰り返します。
これは問題の一部を解決するのに役立ったものの、新たな問題を生み出した。プログラムを自分で書いた人、あるいはプログラムを書いてもらうために人を雇った人(ソフトウェアを購入するという行為は1970年代か1980年代まで一般的ではなかった)は、雇用主や学校が新しいコンピューターを購入した際に、自分のプログラムが動作しなくなっていることに気づいたのだ。
これらの問題に対処するため、汎用アプリケーションプログラムの開発に利用できるだけでなく、特殊な要件を持つユーザー向けにレポートや情報を提供することもできる、さまざまな高水準言語が開発された。
これらには以下が含まれます。
これらの言語をはじめとする数十種類の言語のコンパイラとインタプリタは、様々な機種やベンダー向けに提供されていたものの、各メーカーは独自の機能強化を開発し、その機種でのプログラミングを容易にしていた。しかし、その反面、プログラムの移植(別の種類のコンピュータや別のベンダーのコンピュータへのプログラムの移行)が難しくなり、ベンダーロックインが深刻化するという問題があった。何らかの変革が必要だったのだ。
1960年代後半から1970年代初頭にかけて、あらゆるベンダーのコンパイラを使用してマシンに依存しないプログラムを作成する方法に関する標準と仕様を作成する取り組みが始まりました。国際標準化機構(ISO)やANSIなどの標準化団体は、政府、金融機関、製造業者などのコンピュータおよびソフトウェアの大規模ユーザーやコンピュータメーカーと協力して、各言語がどのように実装されるべきかを記述する標準化された仕様を作成しました。
コンピュータメーカーは、プログラミング言語に独自の拡張機能を持たせることはできたが、標準規格への準拠を主張するためには、リファレンスマニュアルにその違いを明記する必要があった。そうすることで、標準規格に従って記述され、自社のコンピュータでコンパイルおよび実行できるプログラムは、コンパイラが標準規格に準拠している他社のコンピュータでも、変更を加えることなく実行できるようになった。軍、政府機関、製造会社などの大規模なソフトウェア購入者は、ベンダーが使用するプログラミング言語用のコンパイラを標準規格に準拠していないものしか提供しない場合、そのようなコンピュータ機器の購入を拒否することで、標準規格の要件を強制的に遵守させた。
現在、 Ada、APL、BASIC、C++、COBOL、ECMAScript ( JavaScriptの総称)、Forth、FORTRAN、 Pascal 、PL/I、Ruby、SQLなど、プログラムの記述方法を規定する標準規格を持つプログラミング言語が12種類以上存在します。これらの言語の多くは、プログラミング言語の標準化のおかげで、顧客がソースコードを別のメーカーのコンピュータに持ち込み、多くの場合変更せずに再コンパイルできたため、現在でも使用されています。
規格は確かに役立ったが、WOCAの理念が機能するのは、コンパイラ開発者が規格を遵守することを保証した場合に限られる。