1

友達が質問しました

Why Java doesn't support function like clrscr in C?

SOのユーザーからの答えは

John3136 : Java はクロス プラットフォームであり、コンソールなしで実行できるため、clrscr の意味は、アプリの実行方法とプラットフォームに応じて変更する必要があります。

mvp : Java は、一度書き込み/コンパイルすれば、どこでも実行できるように設計されています。そして、この機能はこのアジェンダに完全には適合しません。

私の質問は、JVM によって処理されるクロス プラットフォームの不一致ではないということですか? その場合、 Thread.sleep()System.out.println()のような関数はどのように機能しますか? また、Linux と Windows ではスレッドが異なるように実装されている [可能性がある] など、基盤となるプラットフォームにも依存しますか?

私の主な懸念は、 System.out.println() のような関数が別のプラットフォームで動作する場合、別のプラットフォームにも clrscr を実装できるということです。私はジョンとmvpの答えに少し懐疑的です

4

3 に答える 3

1

問題は、 の信頼性の高い実装でclrscrは、ライブラリ メソッドが接続されているデバイスの種類を知る必要があることです。これにより、画面をクリアするための適切な処理を行うことができます。ライブラリは、Windows でこれを行う方法を認識できる場合がありますが、すべてのプラットフォームで実行できるわけではありません。

サポートされているすべてのプラットフォームで一部の機能を実装できない場合、標準の Java クラスはそれをサポートしないというのが一般的な考え方です。

clrscrただし、これは、自分にとって重要なすべてのプラットフォームでそれを行う方法を理解した後、独自のライブラリを自分で実装できないという意味ではありません。または、適切なサードパーティ ライブラリを見つけることもできます。アプリケーションを移植できなくするリスクがありますが、それはあなたの懸念事項です。

もう 1 つの説明は、Java SE ライブラリが旧式の端末/端末エミュレータをサポートしていないことです。(古い「termcap」ライブラリに相当します。) なぜですか? グラフィック画面を備えたコンピューターや電話の最近では、それを求める声がほとんどないからです。(実際の 24x80 端末を最後に使用したのはいつだったか思い出せませんが、おそらく 25 年以上前のことです!)


私はジョンとmvpの答えに少し懐疑的です:

あなたの不信感に対処するのは難しいです。おそらく、あなたを納得させる唯一のことはclrscr、さまざまなプラットフォームと出力デバイスにわたってJavaで自分で実装しようとすることです...

その場合、Thread.sleep() や System.out.println() のような関数はどのように機能しますか?

すべてのオペレーティング システム (または少なくとも Java をサポートできるすべてのオペレーティング システム) は、必要な機能を備えたネイティブ API やライブラリを提供します。

  • の場合Thread.sleep、JVM 実装は通常、POSIXsleep(...)関数を使用します。

  • の場合System.out.printlnoutは でPrintWriterあり、JVM はPrintWriter標準出力デバイスに接続される を作成します。このprintln呼び出しは、おそらく POSIXwrite関数の呼び出しになります。

の場合はそうではありませんclrscr。この機能は、C 標準ライブラリではサポートされていません。

于 2013-07-14T06:14:01.097 に答える
0

参照した質問で述べたように、C は clrscr を標準機能としてサポートしていません。コンソールがクリアされているため、これを可能にする OS システム コールが存在することを意味します。すべての OS がこのシステム コールを実装しているわけではないと仮定すると、Java または実際に他の言語で標準機能として実装することは不可能です。

于 2013-07-14T05:43:59.613 に答える