同調実験室 - ARGIUS.net

TOP PAGE INDEX Number / 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

はじめに

このコーナーは、同じ動作を別の言語で比較することで、言語の似ている点や特徴などを見つけたりする、という企画です。

ここでは、環境に依存しないプログラムを書くように心がけています。特に、ライブラリは標準のものだけを使用するようにしています。

開発環境など

動作を確認している環境は、主にWindows2000/XP + cygwinです。たまに、Linuxなどでも試しています。

使用している各言語の処理系は以下のとおりです。

C / C++

ANSIに準拠させたい。

Java

J2SE 1.3ベース。(1.4に移行中)

Perl

Perl 5.6ベース。

Ruby

Ruby 1.8ベース。

作成にあたって、言語によってマスターしているレベルが均一でないこともあり、また、上記のすべての環境で動作確認をしているわけではないので、間違っているかもしれません。あと、言語仕様とかをしっかり読むのは苦手ですので、その辺の厳密さは期待しないでください。

ちなみに、ここで採用している言語は、現時点では割と共通点の多い類のものなので、いささか物足りないです。将来的には、いくつか追加しようと思っています。対象とする条件は、環境に依存しにくいコードが楽に書けること、最低でも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

TOP PAGE INDEX Number / 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18