5

メモリ/ポインタなどをあまり気にせずに基本的なことを非常に簡単に行うのに役立つC用のより高度な抽象化ライブラリはありますか?

例:PythonはCよりも非常に高度な抽象化を提供します。文字列や配列などを連結することができます。単純に、その仕事を処理するCのlibを取得しましたか?

4

2 に答える 2

6

Cでプログラミングする目的はほんのわずかです。頭に浮かぶ主な目的は次のとおりです。

  1. 保存期間の概念を備えた言語が必要です。これにより、すでに取得されているメモリを使用する有界空間またはインプレースアルゴリズムを記述できるため、障害が発生することはありません。

  2. 慣用的ではないか、他の言語で表現できないCイディオムのコードサイズまたはパフォーマンスの利点を利用したいと考えています。繰り返しになりますが、これらのほとんどは、中間データ構造を介してデータを移動したり、抽象コンテナーにラップしたりするのではなく、データをインプレースで処理する必要があります。

そのようなニーズがない場合、またはそれらが何を意味するのかさえわからない場合は、本当にCを使用する必要があるかどうかを検討することができます。文字列連結、抽象コンテナクラス、または他の言語からの怠惰なメモリ管理などの非効率的なイディオムをCは、Cを使用することで得られる可能性のある利点のほとんど/すべてを無効にしますが、高級言語の利点はほとんどまたはまったく提供しません。

于 2012-09-20T06:05:15.763 に答える
4

誰かが最終的に混乱をクリーンアップする必要があるため、ポインタについて心配しないことはかなりトリッキーです。Cには、ガベージコレクタもデストラクタもありません。

  • Apache Portable Runtime(APR)は、メモリプールを使用することにより、いくつかの形式のメモリ管理を容易にします。そうすれば、オブジェクトの束を同時に解放できます。APRは独自のプールベースの文字列ルーチンのセットを提供しますが、これらの文字列は引き続きとして処理されるchar*ため、ここでのポインタを実際に回避することはできません。もちろん、を実行して、typedef char* string代わりにその名前を使用することもできます。
  • C用のガベージコレクターを入手することもできます。これにより、メモリ管理にさらに注意が払われます。このライブラリ自体は、ガベージコレクターのみを提供します。それを利用し、文字列操作などを提供する高レベルのCライブラリを知りません。

自問したい重要な質問の1つは、C ++などの他の言語ですでに提供されている機能を使用する場合、なぜCを使い続けるのかということです。おそらく、アプリケーションの一部をC ++で記述し、既存のコードをCで保持するか、C呼び出し規約を使用してライブラリ呼び出しを行う、混合言語プログラミングでも要件を満たすことができます。そうすれば、新しいコードを高レベルで記述しながら、適切な場所で古き良きCを使用できます。

C ++を使用しているという理由だけで、特定のコーディングスタイルを使用するように強制されることはありません。ほとんどがCプログラムのように見え、必要な場所でC++の機能とデータ型を使用するプログラムを作成してもまったく問題ありません。オブジェクト指向のものを自分で作成する必要はありません。標準の命令パラダイムで、相互に呼び出す単純な関数に固執することができます。ただし、コードの記述、読み取り、および保守が容易になるような状況でオブジェクトを使用できることを知っておくと便利です。

于 2012-09-20T05:47:39.023 に答える