Number / 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
このコーナーは、同じ動作を別の言語で比較することで、言語の似ている点や特徴などを見つけたりする、という企画です。
ここでは、環境に依存しないプログラムを書くように心がけています。特に、ライブラリは標準のものだけを使用するようにしています。
動作を確認している環境は、主にWindows2000/XP + cygwinです。たまに、Linuxなどでも試しています。
使用している各言語の処理系は以下のとおりです。
ANSIに準拠させたい。
Borland C++ compiler 5.5.1 (BCC)
GNU Compiler Collection 3.3.1 (GCC)
Microsoft Visual C++ 7 (VC++)
J2SE 1.3ベース。(1.4に移行中)
Java2 SDK Standard Edition Version 1.3.1 (J2SDK 1.3.1)
Java2 SDK Standard Edition Version 1.4.2 (J2SDK 1.4.2)
Perl 5.6ベース。
ActivePerl 5.6.0 build 623 (built for MSWin32-x86-multi-thread)
cygwin Perl 5.8.0 (built for cygwin-multi-64int)
Ruby 1.8ベース。
ActiveRuby 1.8.0.5 [i386-mswin32]
cygwin Ruby 1.8.1 [i386-cygwin]
作成にあたって、言語によってマスターしているレベルが均一でないこともあり、また、上記のすべての環境で動作確認をしているわけではないので、間違っているかもしれません。あと、言語仕様とかをしっかり読むのは苦手ですので、その辺の厳密さは期待しないでください。
ちなみに、ここで採用している言語は、現時点では割と共通点の多い類のものなので、いささか物足りないです。将来的には、いくつか追加しようと思っています。対象とする条件は、環境に依存しにくいコードが楽に書けること、最低でも2種類以上の環境または処理系で動作すること、などです。
標準出力がバッファリングされてしまうような環境(ex: Meadow + cygwin)では、入力待ちの前の出力が前後してしまうことがあります。回避するには、それぞれの言語でバッファリングを抑制するか、出力の直後でバッファをフラッシュ(すべて吐き出す)するようにします。
C言語 fflush(stdout); /* 標準出力をフラッシュ */ C++ std::cout << std::flush; // フラッシュ std::cout << std::endl; // '\n' + フラッシュ Java System.out.flush(); // フラッシュ System.out.println(); // '\n' + フラッシュ Perl $| = 1; # バッファリング抑止 Ruby STDOUT.sync = true # バッファリング抑止
最終更新日 : 2005.05.29
Number / 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
copyright 2000-2005
ARGIUS project