コードベースを移行する際の最善の策は、どの次世代低レベル言語ですか? [閉まっている]

StackOverflow https://stackoverflow.com/questions/1815613

  •  07-07-2019
  •  | 
  •  

質問

多くのC / C ++を実行している会社があり、15年前にCOBOL会社のようにならないように新しいテクノロジーへの移行を計画したいとしましょう。

今のところ、C / C ++は正常に動作し、市場には多くの開発者がいます。

しかし、実行中の巨大なコードベースとデータの機密性を考えると、予算と開発チームに負担をかけずに次のステップに進むには5〜10年かかると思うので、今から考え始めたいと思います。

D について聞いたことがありますが、かなり成熟し始めています。 Go 、非常に人気があることを約束します。

あなたの選択とその理由は何ですか

役に立ちましたか?

解決

DとGoは、おそらくPythonとRubyが現在普及しているのと同じくらい人気になるでしょう。それらはそれぞれニッチを満たし、DがC ++の本格的な代替品であると想定されていたとしても、C ++を押しのけるのに十分な質量を獲得することはおそらくないでしょう。どちらも十分に安定/成熟していないことは言うまでもなく、当時のハードウェアとオペレーティングシステムで10〜20年以内にこれらの言語をサポートできるかどうかは不明です。 C / C ++はほとんど コンパイルされた言語であり、ほとんどのオペレーティングシステムとネイティブコードアプリケーションで使用されていることを考えると、近い将来になくなることはほとんどありません。

他のヒント

CとC ++は、ネイティブ/アンマネージド/「低レベル」に関しては、他の追随を許さないコンボです。言語。

それらが最高の言語であるからではなく、そこにあるからです。彼らがそこにいるので、彼らは仕事をして、十分です。たとえば、ほとんどの点でDがC ++よりも優れていることはほぼ間違いありません。しかし、最も重要なもの、つまり既存のすべてのC ++コードとの互換性で失敗します。その要件がなければ、そのコードのほとんどは、いずれにしてもマネージド言語で書かれます。非常に多くのコードベースが今日C ++を使用している唯一の理由は、昨年使用したためです。他のコードベースに切り替えるのは苦痛です。ただし、 if when を切り替えると、通常はDに切り替わりません。C#、Java、Pythonに切り替わります。

Dおよびその他の「今後の」問題同じニッチをめぐって競合する言語は、優れているものの、人々が実際にそれらに切り替えるように動機づけるほど画期的ではないということです。

CとC ++はそのままです。 Cがさらに進化する可能性は低いです。それはそのままであり、満たすべきニッチの1つは、「コンパイラライターにとってもシンプル」です。規格を再び改訂することはないにしても、他の言語はそのニッチでそれを打ち負かす可能性がありません。

C ++は劇的に進化しており、C ++ 0xが近づいています。また、後で実行したい機能の膨大なリストを既に持っています。 C ++は決して行き止まりではありません。

両方の言語はここにあります。おそらく50年後には他の言語がそれらに取って代わるでしょうが、この10年は起こりません。

現在、Dを定期的に使用しています。本番コードを書く人には、あまりにも最先端であるため、まだお勧めしません。私のコードの大部分はバイオインフォマティクスの研究プロトタイプであるため、私はそれで済ますことができます。ただし、言語は安定し始めています。 Andrei Alexandrescuは、「The D Programming Language」というタイトルの本をリリースしています。来年3月、そして現在、この本に間に合うように言語のバージョン2の仕様を安定させるようにプッシュしています。

DはCの正式なスーパーセットではありませんが、プリプロセッサがないことを除いて、私は慣用的なスーパーセットと呼んでいます。言い換えれば、ポインターやインラインASMなどのCの概念があり、DでもCと同じように機能するため、Cで記述されたコード(プリプロセッサーを無視)は、再設計なしで簡単にDに変換できます。 CコードとD標準ライブラリへのリンクには、C標準ライブラリ全体が含まれます。

また、Dはまだ最先端の言語であるためライブラリが不足しているにもかかわらず、メタプログラミング機能があるため、ライブラリ作成者の夢です。それが離陸する場合、おそらくいくつかのかなり印象的なライブラリがあります。このプレビューについては、D2標準ライブラリ(Phobos)のstd.rangeまたはstd.algorithmを参照してください。別の例として、OpenMPのような並列モデル(並列foreach、並列マップ、並列リデュース、フューチャー)を、特別なコンパイラーサポートなしで、Dの純粋なライブラリーとして実装しました。 ( http://cis.jhu.edu/~dsimcha/parallelFuture.html を参照してください。 )

長期的に主に興味があることを考えると、Dを安定させるために6か月を与えます(Andreiの本と言語を安定させるための現在のプッシュを考えると、バージョン2はそれまでに安定しているはずです)よく見てください。

編集:コア言語の仕様は比較的安定しており、焦点はツールチェーンとライブラリ開発に向いているので、非常にリスク回避的な環境にいる場合を除き、小規模な本番プロジェクトにはDをお勧めします 。ただし、優れたツールチェーンとライブラリのサポートが絶対に必要な大規模プロジェクトは、まだ待つ必要があります。

無駄のない製造の原則を信じる場合は、「できるだけ遅く決定する」よう努力する必要があります。その瞬間は最後の責任ある瞬間である必要があります。つまり、意思決定に失敗すると重要な選択肢が排除される瞬間です。

この原則はあなたの状況にも適用できると思います。今すぐ言語にコミットする代わりに(10年後にはそうなることさえ知らない)、選択肢を開いたままにしておく必要があります。コードの一部をリファクタリングして、少し汎用性を高めたり、より抽象的に構築したりすることで、移行が実際に必要になったときにプロセスが簡単になる可能性があります。

CおよびC ++でスティック。私はそれがCOBOLの道を行くとは思わない、それは何と同様に実行され、あなたはCとC ++でコーディングする人々を見つけるのに問題はありません。

C ++ -比較的新しく、更新されています...多数のコンパイラベンダーがあり、 常に改善されています。

C -アセンブラーと高レベル言語のギャップを埋めるのに長い間使われます。また、言語を実装するのは非常にシンプルで簡単なので、そのまま残ります さまざまな「奇妙な」ための第一言語組み込みまたは非常に新しいアーキテクチャなどのアーキテクチャ。

D は有望ですが、まだ非常に新しく不安定な仕様とライブラリです。

Go は数週間前に誕生しました...大きな重要なプロジェクトにはバージョン0の何も使用しないでください。また、 C ++ または D が大幅に制限されています。

2019 update: C ++は今後10年間存続します...(そうでない場合は、この回答を修正します。関連性がなくなった場合は...)

企業が現在COBOLを使用している理由は、すでに何百万ものCOBOLコードが記述されているためです。一方、それを投げることができれば-彼らはすぐにそれを行うでしょう-企業はニーズの一部としてC / C ++で作業し、Javaを使用したくない/したくないこの言語b / cを使用して新しいプロジェクト/ c#他のフレームワークベースの言語-COBOLはここでの類推ではありません。

dsimchaのように、Dウェイは現在危険です。しかし、この言語には大きな可能性があり、低レベルであり、C ++の代わりにDで生産性が大幅に向上しました。おそらく、人々が動的言語で感じること。

Goはブログで販売されているので、冗談のように思えます。 インターフェイスメソッドのディスパッチは簡単ではなく、実際には通常の単一継承メソッドのディスパッチよりも遅くなります。

巨大なコードベースがある場合、決定はもちろん難しくなります。既存のプロジェクトではなく、新しいプロジェクトに切り替えることをお勧めします。

私は言語に集中するのではなく、その周辺のライブラリに集中します。ブーストライブラリと組み合わせたC ++は優れた選択肢です。 C ++で開発する人は、コンピューティングをよりよく理解する傾向があります。私自身はJavaから始めました。これは基本的なものをたくさん隠すことで私の生活を楽にしました。しかし、C / C ++(ポインターなど)。

C ++はハード(例:メモリ管理)になる可能性があることを認識しているため、パフォーマンスが不可欠ではなく、読みやすさ(==維持性)スコアが高い「アドオン」言語を使用するのが良いと思います:これにはPythonをお勧めします。

C ++ソフトウェアを実行しているマシンは無数にありますが、一度にシャットダウンすることはありません。 C ++がCOBOLの邪魔をする場合、アプリケーションの移行には巨大な市場があります。 C ++アプリケーションを当時の一般的な言語(Z ++ ???)に翻訳するために開発された専用ツールがあります。

だから私は、あなたがそこに来たときにその橋を渡ることが最善のアドバイスだと思う。

Intel®をご覧ください。 Cilk ++ Software Development Kit を使用して、C ++ /マルチコア開発への関心を高めたい場合。 CやC ++がすぐに消えることはありません。

C *とCobolの比較には疑問があります

C *とCobolを比較すると、間違った結論になる可能性があります。 Cはその日にとって完璧であり、導入が大きく前進しましたが、今日でも仕事は完了しています。

私は最も慈善的な日にCobolを" nice try "と要約します。

CとC ++は、実装言語と同様に法案に適合するため、長期間存続します。これは実際には変わりません。

また、C / C ++の主なマイナスの問題はメモリの安全性の欠如であると考えてください。これは、コードが成熟するにつれて問題が少なくなる傾向があります。これは、古いコードを置き換える重大な理由がないことを意味します。

ソフトウェアシステムがCから外側に成長することを期待しています。今日の階層を見てください。

  • Railsなどのフレームワークで記述されたアプリケーション
  • Ruby、PHP、Python、C#などで記述されたアプリケーションバックエンド
  • Ruby、PHP、Python、またはC#ランタイム実装(C *で記述)
  • OSカーネル(C89で記述)

古いレイヤーがなくなるとは思いませんし、CやC ++で書かれたレガシーな上位レイヤーは、その方法で無期限にサポートされ、最終的にはRuby、Pythonで書かれた置き換えのために段階的に廃止されると思います、C#、または将来の開発。

Goが受け入れられるかどうかはわかりません。たぶんGoogleだけでは十分ではありません。

D?まあ、それについていくつかの良いことは言われていますが、それはまた離陸しません。言うべきユーザーベースはありません。 Dは TIOBEインデックスで人気が20位です、高速ドロップ。

言語の人気は、会社の仕事にどれほど適しているかにはほとんど関係ないと言うかもしれません。しかし、プログラムを作成する資格のある人を見つけるのがいかに簡単かは、多くの関係があります。

Java が最上位にあり、今後20年で遠く離れてしまうと驚くでしょう。システムプログラミング言語とは見なされませんが、十分に機能するため、JavaではできないC ++で行うタスクはほとんどありません。確かに最近では、ガベージコレクターによって(完璧に、そしてより効果的に)行われている仕事を人間のプログラマーに任せるつもりはありません。私は、プログラミングの有効性の観点からJavaをC ++からの重要なステップアップと考えていました。

Ruby には非常に感銘を受けました。エレガントで表現力豊かな言語です。あまり多くのコードを使わずに多くのことを達成できますが、そのコードはまだほとんど読みやすいです。 Rubyの主な原則の1つは、一貫性を保ち、開発者を驚かせないことです。これは非常に良いアイデアであり、IMOであり、生産性を高めます。 Railsの大騒ぎ(まだ進行中の可能性があります)の時点で、Rubyのリファレンス実装が非常に遅いため、Rubyの周りに広く行き渡りました。ただし、Sunの JRuby の人々は、JVMで非常に高速に処理するようになったため、今では検討する価値があります。 Rubyはクロージャーといくつかの関数型プログラミング機能を提供します(これが重要である理由については以下を参照)が、実際にはFP言語とは見なされていません。 TIOBEインデックス:10および上昇。

将来的に考慮すべきことは、CPUメーカーが物理学によって課せられたパフォーマンス制限に立ち向かったという事実です。過去のように、クリスマスごとに30%高速なCPUが使用できなくなりました。したがって、パフォーマンスを向上させるには、より多くのコアが必要です。ソフトウェア開発には、マルチコアコンカレントプログラミングのサポートに必要なすべての支援が必要になります。 C ++を使用すると、ほとんどの場合これであなただけになります。Javaのソリューションは、現代の標準では恐ろしいものです。

これを考慮すると、関数型プログラミング(並行性に関連する面倒な作業の多くを排除する)と並行性サポートの優れた言語への一定の傾向があります。 Erlang は、これと、実行中のプログラムでコードを交換する機能のために特別に作成されました(エリクソンは信じられないほどのアップタイムを望んでいました)。 Scala はJavaに似ていますが、関数型プログラミングと同時実行性のサポートがはるかに強力です。 Clojure 、同じですが、Lispであり、トップ50にさえ入っていません(まだ!!)。

Scalaはアカデミックな開発者であり、それを示しています。プログラミング言語のスイスアーミーナイフになろうとしています。多くの中級のプログラマーはScalaを理解するのに苦労すると思います。 RubyはFPに劣り、同時実行性についてはあまり行いませんが、実用的で楽しく、簡単に処理できます。また、JVM上で実行すると、Javaライブラリで大量のコードが容易に利用できます。とインターフェースできます。だから:

私の賭けはRubyにあり、Scalaには外部からのチャンスがあります。しかし、多くの選択肢があります!

Java。ほとんどの低レベルのものについては、最近のJavaは問題ありません。 Javaと同じくらい安全で簡単に開発できるものがあるのに、なぜDやGoなどのC / C ++の部分的な解決策を採用するのですか?リアルタイムソリューションを探している場合、DとGoは間違いなく であり、もちろんJavaよりもサポートが少ないことは言うまでもありません。


Javaはシステムプログラミング言語になりました。ポインター" next gen"などの安全でない構成要素を考慮に入れる方法はわかりません。これらの安全でない構成体が存在した唯一の理由は、それがチューリング完全言語を構築するための実用的なアプローチであったためです。個別のオブジェクトでメモリを表す心配はありませんでした。なぜなら、それらは機能する何かを構築したかったからです。 Javaには既にハードおよびソフトのリアルタイムアプリケーション、さまざまなハードウェアバイトコードプロセッサ、Javaを実行している20億を超えるモバイルデバイスがあります。せいぜいあなたがしなければならないことは、デバイスとの相互運用性のためのいくつかの構造を追加することです。それはそれほど多くのコードではありません。 C / C ++でも、これらの構成要素を追加する必要があります...

何をプログラミングしていますか? 1KB RAMを備えた8ビットマイクロコントローラーその場合、そのプラットフォームのアセンブラー以外を使用しても意味がありません...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top