2010-12-30 10 views
14

だから、Cはかなり支配的な低レベルのプログラミングの拠点を持っています.....しかし、その課題から出てくるものは何ですか/それを置き換えたいですか?Cローレベルプログラミングの代替品ですか?

すべてが非常に高いレベルを目指しているようですが、それほど重大な低レベルのものになると、Cが王様に見えて、それを置き換えることをあまり見たことがありませんか?

低レベルのものの学習Cは標準であるようですか?

+4

質問を明確にすることはできますか? *「レベルの低いもの」とは何を意味していますか? C * *(http://StackOverflow.Com/q/3342213/#3342538)または多分[*どの言語がオペレーティングシステムを書くのに使われていますか? Windows)?*](http://StackOverflow.Com/q/3317329/#3321433)? –

+0

私はそれがニッチであると思う、私は本当に他に何を言うのか分からなかった。 –

答えて

0

最近の傾向は、オブジェクト指向の管理言語に向かっています。たとえば、OSとしてのSymbianは完全にC++で書かれています。また、マイクロソフトの調査ではマネージプログラミングモデルSingularity OSが提供されています。アイデアは、管理された言語は、これらのアイデアを抽象化することによって、Cのようなリソースリーク、ポインタの破損などで簡単に間違いを犯さないようにします。また、オブジェクト指向のパラダイムは、コードを簡単に作成するのに役立ちます。今のところC言語は組み込みの世界を支配していますが、C++を選択言語として採用する世界がますます増え、今後10年で変化することがわかります。

+16

C++プログラムでリソースリークやポインタの破損が発生しないためです。 –

+0

モジュール化されたCとC++の違いは、ほぼ完全に構文的です。私が見る最大の利益は "OOP"ではなく、タイプセーフなテンプレートです。 Cがオブジェクト指向であると思わないなら、私はあなたがffmpegコードベースを見ることをお勧めします。 – EnabrenTane

+5

@EnabrenTane Cでauto_ptrを実装するなど、いくつかのことがCで実現するのは本当に難しいです!ここでは、リソースを効果的に管理するためのC++言語の力があります。 – Neera

6

システムレベルを意味する場合は、おそらくD Languageです。

+0

Dはいろいろな面で準備ができていません – MajesticRa

+5

@MajesticRa質問は「...その課題から出てくるものはどれですか/それを置き換えたいのですか? ...どの言語があらゆる面で準備ができているのか。どのようにいくつかの詳細やリンクを提供する方法については、あなたの下の投票と一緒に "多くの側面で準備ができていない"と述べた。 – dgnorton

+0

答えを落とすために私に怒らないようにしてください。私の意見では、「出てくる」というのは、プロダクションではまだリリースされているかもしれないが、当然の注目を集めていない、すぐに使える即時のツールです。私はDが最初の一見からちょうどこのように見えるかもしれないことを知っています。しかし、...私はいくつかの 'リンク'を書いてあなたのためにリンクすることができます(Dについての投稿はそれほどありません)。私はおそらく時間とともにそれをやるでしょう。しかし今のところ私はDをもっと学び、深刻な低レベル/システムPRODUCTIONプロジェクトを計画しようと提案します。最近私はそうしました。本当に徹底的にしました。それを自分でやってください。あなたは私の心配を理解するでしょう。 – MajesticRa

0

私は事私は私の古いアセンブリRotinesを使用したいので、 いけないが、Cは低レベルのもののため

2

Cを保存している規格です。 Cの作品とその知られています。 Cは低レベルなので速く、PythonとC#があなたのためにする多くのことをプログラマーに任せます。あなたはCを置き換えることを目的とした別の言語を書くことができますが、少し違う構文を除いてどこにでもあなたがいられるとは思いません。 (もしあなたがCのスピードを維持したいなら)。

なぜCはとても速いのですか?その輝くアセンブラのため。より高速に行う必要があるものについては、YASMまたはインラインアセンブラを使用してください。

+5

私はかつて、誰かがCを「ポータブルアセンブラ」と表現するのを聞いたことがあります。 –

+7

実際には、最近のコンパイラ技術の進歩により、もともとC高速化(弱い型付け、メモリセーフではない、ポインタセーフや型セーフではない)するように設計された機能が、スーパーコンパイル、プログラムの融合、マップの融合、ストリームの融合など、C *を遅くする*高速化しません。 JVMは日常的にCと競合し、時にはCを打ち負かすこともできます.Cコンパイラが長い間実行していなかった速度で高速化しています。たとえば、HotSpotはすべてのバージョンで10〜30%速くなっています。 –

+1

あなたは素晴らしい点を作っています。 RubyコードがCと同じくらい速いのを楽しみにしています。 – EnabrenTane

0

私はCが十分に低いとは思いません。私はアセンブリ言語をお勧めします。私が知る限り、これはプログラマが行える最低レベルです。しかし、アセンブラ、リンカ、ローダを処理する必要があります。ターゲットプラットフォームに関連した詳細はまだたくさんあります。

0

プラットフォーム固有の低レベル言語(アセンブリ言語やマシンコードなど)があります。これらをCと比較すると、Cはむしろ高水準言語です。

3

あなたが「低レベル」/「システムレベル」である必要性とシステムが何であるかによって、正直言えば正直です。

Neeraが正しく指摘しているように、管理対象言語の傾向がますます高まっています。

したがって、実際にアルゴリズムと最適化を書いていない限り、アプリケーションコードを記述している場合は、マネージコード/上位レベルの抽象概念を使用することが考えられます。常に低レベルのものを行う必要性は、共通のプラットフォームでは、大幅に削減されます。どこにいても良いところにアクセスできるAPIがあれば、おそらくより洗練された抽象レイヤーを使用するでしょう。

ただし、新しいアーキテクチャで実装する場合は、アセンブリを使用してそのプラットフォーム用のコンパイラを作成するか、別のプラットフォーム(クロスコンパイル)からそのプラットフォームのマシンコードを出力するコンパイラを作成します。次に、そのプラットフォームのコンパイラをコンパイルする必要があります。

あなたが想像しているように、C++はこの点でCよりも扱いが難しいです。 Cでも、実際はうまくいくためにかなりの努力をしています。私は人々が基本的な作業のために(Cコンパイラや完全なクロスコンパイルの努力に比べて)非常に少ないアセンブリで稼働できるので、FORTHのようなスタックベースの言語が好きだと言います。

編集(私が好きなので)linkJonesForth gitリポジトリにします。見てみましょう。 Jonesforthはi386アセンブリの実装を進めており、コード・コメントを使って全プロセスを順を追って説明しています。

+1

+1。私は、最小のForthコンパイラは30バイト*のようなものだと思います。 (いいえ、それはタイプミスではありません)おそらくそれよりも低レベルにはなりません。 –

+0

@Jorg私はJonesforthコンパイラ/チュートリアルも掘り下げました。 –

2

Google's GOに何が起こったのですか?

+1

どのように速いgo-codeがコンパイルされるのが大好き!私は言語が好きで、非常に有望に見えますが、いくつかの重要な受容を得るための通常のハードルに直面しています。 – dgnorton

+2

C言語のような低レベルの言語ではありません。 –

+0

GCによって、Cは(少なくとも埋め込み済みの) – themihai

0

とは、どういう意味ですか?

Cは、上位レベルののようなユーザーインターフェイス(GNOMEデスクトップ全体とそのライブラリGTKはC言語で書かれています)でも使用されています。


それはあなたが実際のマシンで遊ぶことができますので、私は低レベルカテゴリーにCを入れたい:だけは本当に小さな抽象化レイヤを追加する(例えば、生のメモリアドレスは、単に何かを引用します)。また、他のプログラミング言語は、基礎となるマシンのクリーンビジョンを提供している

  • 多くはCから派生し、それに対応しているされている(C++、Objective-Cの)。これらは、何かを抽象化することによってあなたの人生を楽にするためのツールを提供します。あなたはこれらの言語を使用したい場合、彼らはあなたが互換性を失うだろう、C、を置き換えるが、できますObjectiveCとC++インタフェースはC.

    で使用することはできません
  • その他以外の、とは全く異なるファミリーに属し、これらの上記の問題は、直接Cのものを使用することはできません。

このように、私の意見では、Cが削除されていない主な理由は、(すべてが他の言語に対応しているように、もう一度、すべてを書くことにあまりにも多くの費用がかかります)商用理由のためです、 COBOLがまだ存在するのと同じ理由です。

Cが素骨であり、単純であり、解析して処理するのが速いというような理由がありますが、私の意見ではこれは副次的なものです。


何かを書き換え余裕があるいくつかの大企業は、しかし、(他の人がC++を使用している間、Appleは広く、例えば、ObjectiveCを使用している)Cをキックオフしようとしています。

私は、Cの代わりにどこからでも使用できる特定の標準言語を選択する努力がないので、将来もCが存在すると思います(Cコードを書くと、CとC++ ObjectiveCシステムでは反対ですが真ではありません)、そこにはCコードの広大なコードベースがあります。

1

低レベルのプログラミングに使用することができ、かなりの数の事が実際にあります。過去にCより優れた点で使用されていたものがいくつかあります。

  1. Pascalは
  2. オベロン
  3. エイダ(ObersonシステムおよびA2 Bluebottleで使用される)(セーフティクリティカルなプロジェクトで使用され、限られたハードウェア上の少なくとも三つのOS用の)(GEMSOSで使用)バリアント
  4. PL/0(MULTICS)
  5. Modula(正しいシステムソフトウェアのためにCVSupやいくつかの学術プロジェクトで使用されています)
  6. プロトタイプOSまたはOS置換レイヤーにSmalltalkとHaskellが使用されました。
  7. Cyclone、Popcorn、C0、およびTyped Assembly Languageは、C言語よりはるかに優れています。

さらに、最下位レベルの部分が別の言語で実装されている場合は、ランタイムのある言語を使用できます。 MicrosoftのVerveとJXオペレーティングシステムは例です。古い学校の場合は、Genera LISPマシンを調べて、それを "利点"にします。 C/C++ツールチェーンを使用した現代のシステム開発では、それでも多くを行うことはできません。 ;)

Cが完全に置き換えられない場合でも、ほとんどの場合、ほとんどの場合パフォーマンスが低下せずに置き換えられます。これらを楽しんでください。