web-dev-qa-db-ja.com

C / C ++のコンパイル可能な最新の代替

新しいソフトウェア製品を書くことを考えています。パフォーマンスが重要になるので、インタープリターや言語、またはエミュレーションレイヤー(Javaの読み取り)を使用する言語を使用する場合は注意が必要です。

C(またはC++)を使用することを考えるようになりましたが、どちらもかなり長いです。どちらも長い間使用していません。過去20年間に、誰かがおそらくかなり人気のあるものを作成したと思いました。

高性能のコンパイル済みコードを作成するためのCのより新しい代替手段は何ですか?

C++が15年前とは異なる獣である場合、私はそれを検討します。おそらく、それがいくつかの固有の問題を抱えていたと思います。

並列化は重要ですが、おそらく複数のマシン間ではありません。

39
Jeremy French

開発中の言語は The Rust Programming Language )と呼ばれ、C++と同様の目標、特にゼロコストの抽象化とメモリ管理の細かい制御を追求しています。それはまだ非常に若いにもかかわらず、おそらく最も注目すべき次期候補者です。

Rustを除いて、ネイティブコードにコンパイルできる他の人気のある代替はありません。もちろん、DelphiとDもありますが、それほど速くなく、人気があり、使用されていません。GoogleのGo言語は候補となる可能性がありますが、それでもまだ非常に若く、少し異なるドメインを目指しています。

ただし、C#(Microsoftプラットフォームを想定)およびJavaは、仮想マシン上で実行されていても、それほど遅くはない可能性があることに注意してください。コードのジャストインタイムコンパイルでは、プログラムの状態と環境の情報が不足しているため、従来の事前コンパイラーでは適用できないいくつかの最適化。

率直に言って、C++がオプションである場合、私は個人的にCを候補とは見なしません。主に、最新のC++はより安全で、より高い抽象化レベルで機能し、より表現力があり、Cよりパフォーマンスが実質的に低下しないためです(場合によってはC++は特に高速です)。簡単に言うと、C++はCが提供するすべてのものを提供します。 Cの機能のほとんどは「非推奨」と見なされ、C++標準ライブラリによって、より優れた、より安全で、より高速で直感的な代替手段が提供されます。

55
zxcdw

Ada もあります。これはネイティブコードにコンパイルされ、標準ライブラリの制限内でさまざまなプラットフォーム間で移植可能です。言語は健在で、現在進行中の最新の言語標準の更新(Ada 2012として知られています)があります。

Adaに慣れていない人のための簡単な要約:

  • 強く型付けされた
  • 並行性の組み込みサポート
  • 要件に応じて、オブジェクト指向または手続き型
  • GNUツールチェーン(GCCにはAdaフロントエンドが含まれています)によってサポートされています)
  • ソフトウェア開発、つまりハードウェアと直接インターフェースする必要がある場合にも優れています
  • 汎用プログラミング(汎用パッケージ、プロシージャ、関数)をサポート
  • 大規模なソフトウェア開発をサポートする機能(パッケージ、子パッケージ、個別のコンパイル、仕様と実装の厳密な区別)
19
Schedler

C++が15年前とは異なる獣である場合、私はそれを検討します。おそらく、それがいくつかの固有の問題を抱えていたと思います。

15年前、C++標準はありませんでした。 2つ目は昨年発行されました。 C++のベストプラクティスは、98標準が公開されてから5年間で大幅に変更され、11が公開されると再び変更されます。

17
AProgrammer

C/C++はかなり長いです...これは良いことです。それは、それらがまだ非常に使用可能であり、多くの人々が日常のタスクにそれらを使用し、そしてそれらの専門家である開発者の大規模な集団が見つかるほど十分に(エヘン)設計されていることを意味します。成熟度は大切なものです。

何か新しいことを探すためにすべての時間を費やしているとすれば、それが新しいからといって、それがどういうわけか良いのではないかと考えると、あなたは多くの失望に陥っています。これは、ソフトウェア言語、GUIシステム(メモ、MicrosoftおよびGnome)、および恋人(メモ、若い女性:)に適用されます)

確かに、あなたのC++の経験が20歳で、C++コードが一般にCのようにコーディングされていた場合、おそらく言語を再評価するときかもしれません。その日に存在し、まったく使用されなかったすべての機能が使用されます。今日はさらに多く、標準化の取り組みにより、言語が少し拡張されて、古いCスタイルの開発とは大きく異なって見えるようになりました。 Cも悪いことではありません-多くの種類のコーディングタスクにも完璧な言語です!

12
gbjbaanb

なぜ人々はいつも新しい言語を探すことを主張するのですか?

C++:

  • TIOBEの4番目の言語ですが、Cと組み合わせるとすべての競争を踏みにじります
  • たくさんのフレームワークがあります
  • コーディングは非常に簡単です
  • 調整は非常に簡単です
  • 非常に高性能です
  • とても安全です
  • 非常に優れた業界サポートがあります
  • クロスプラットフォームです
  • 正しく行われていれば、追加のVM /フレームワーク/デプロイメントの混乱は必要ありません
  • 簡単にあなたの仕事に着陸します
  • 非常に古いシステムで起動するために.so/.dllをビルドするために必要なすべてのものを持っています
  • トラブルシューティングが簡単
  • とても表情豊か
  • 非常にダイナミック
  • そして他の興味深いものの束

C++の唯一の欠点は、少し学ぶ必要があることです。それでおしまい。

それを1つ以上の他の言語と比較してください。

  • 限定的にサポート(OCML、Fortranなど)
  • 遅い(Java、JavaScript)
  • 実験的(Silverlight)
  • 動くターゲット(.NET 1/2/3/4/5?現在どれが最後のものですか?)
  • プラットフォームがロックされています(.NET)
  • フレームワークのサポートが不十分です(Fortran)
  • 小さなコミュニティー(トップ10以外)
  • トラブルシューティングするのは悪夢ですか(高レベルのフールプルーフなコンセプトなどを備えたものすべて)
  • お客様のマシン(JVM/.NETVM)に500MBの事前インストールが必要

私見、使用する言語とサポートする言語が少ないほど、状況は良くなります。

これにより、言語、サポート、ドキュメンテーション、標準化委員会の作業、より良い本、より多くの知識、より簡単なソフトウェアのサポート、より良いパターン、より長い言語サポートサイクル、および言語で書かれたより熟練したコードのフレームワークが自動的に改善されます。

私は人々がこれに反対票を投じることを知っていますが、本当にそれについて考えます。

12
Coder

C++の現在の標準は C++ 11 であり、2011年に発行されました。したがって、20年前の標準ではありません。そして、その間に数多くの標準がありました。それらのそれぞれは、数多くのパフォーマンスの改善をもたらします。

コンパイラーも常に改善されています。彼らは以前よりも最適化にはるかに優れています。

実行可能形式も改善され、20年前は a.out でしたが、現在は [〜#〜] elf [〜#〜] になっています。

全体として、C++が20年以内に変化しなかったという提案は、真実から離れることはできません。

また、CとC++はまったく異なる言語であることにも注意してください。

8
vartec

私はこの言語の専門家ではありませんが、 OCaml は興味深いオプションだと思います。

OCamlは、コンパイルされた関数型/オブジェクト指向言語です。 C++とのパフォーマンス比較については、 C++とOCaml:レイトレーサーの比較 を参照してください。もちろん、これは非常に具体的な例であり、OCamlのパフォーマンスをよりよく理解するには、より広範なテストを行う必要があります。

7
Giorgio

製品が何をするかによります。パフォーマンスが本当に重要である場合、最適な言語は まだFORTRAN です。私も除外しませんJava-それは多くの大量の金融取引アプリケーションで使用されます。問題のドメインが高い並行性を必要とする場合、Erlangは一見の価値があります。Objective-Cは素晴らしいですがApple=エコシステム(コンパイラと基本的なランタイム以外)の範囲外でサポートされているかどうかはわかりません。Haskellのパフォーマンスについては良いことも聞いたことがありますが、それが絶対的なパフォーマンスまたは他の関数型言語と比較した単なるパフォーマンス。

3
TMN

プロジェクトがパフォーマンスに敏感であると言うとき、それはそれのすべてのコード行を意味しますか?または、通常のように、残りの部分が通常のミルビジネスコードの実行であるときに、パフォーマンスが重要である割合が小さいですか?

あなたがそれに答えた後、あなたのプロジェクトにとってより大きなリスクは何ですか:最終結果が遅すぎる、または最初からそれを決して終わらせないということですか?

両方で2番目に答えると仮定すると、ネイティブの相互運用をサポートするより高いレベルの言語で開発する必要があります(Python、Ruby、.Netファミリにはすべてこれがあります)。まず、プロジェクトを終了します。次に、プロファイルを作成し、最適化し、すすぎ、繰り返します。その後のみ、アプリケーションの選択セグメントをネイティブコードで再要求し、そのネイティブコードを完成品に統合することを検討してください。

3
Chris Pitman

Objective-C は、ストレートなCおよびC++に代わる、コンパイルされた最新の代替手段です。ガベージコレクションされたメモリ管理と確定的なメモリ管理の両方があり、メッセージパッシングOOランタイムはパフォーマンスのために最適化されています。

GCCとCLangを通じて利用でき、さまざまなプラットフォームで動作するGNUStepやCocotronなどのアプリケーションライブラリがあります。

あなたが高性能の仕事をしているなら、私はそれがUIの代わりに一種の数の処理または他の分割統治の仕事であると仮定するでしょう、それはあなたがあなたにとって最も簡単な言語でUIを行うことができることを意味します、例えばミニhttpサーバーを介したHTML。

1
JBRWilkinson

私はそれを使ったことはありませんが、- Cython による私の誓いの友人は、一般的なpython構文と、Pythonのより高いレベルの構造を最大限に活用して、他のすべての場所で開発時間を短縮できます。

Vala はJavaおよびC#に類似しており、ネイティブコード(または、必要に応じてCソースコード)にコンパイルされます) 非常に高速 です。オブジェクト指向のビットにはGLibが必要であり、LinuxハッカーのためにLinuxハッカーによって記述されているため、ドメインがWindowsの場合はあまり良くない場合があります。

1
Brendan Long