言語の次の進化はどのようになると思いますか?
15 に答える
C と C++ は「段階的に廃止」されており、Java/.Net/Python などは「前進」または「次の停止」であると考えるかもしれません。
それらはすべて頻繁に使用されます (このサイトの C または C++ タグの数を参照してください)。違いは、どちらもプログラミングの世界の共通言語ではないということです。以前は、アプリの大部分は、リソースが非常に限られているシステム上のデスクトップまたは DOS アプリでした。さらに、主要なデスクトップ API はすべて C または C++ で記述されていました。だから、誰もがこれらを学びました。
より複雑になりました。言語は、よりアプリケーション固有のものになりつつあります。パフォーマンスが重要な場合の C/C++。主なパフォーマンス ヒットが db の読み取り/書き込みである場合のスクリプト言語。Java および .Net は、一般的でパフォーマンスが重視されないデスクトップ アプリ用です。
コンピューターや電気工学と同じことです。過去には、これらは利用可能な最高レベルの抽象化の巨大なフィールドでした。現在、あらゆる種類のより高いレベルの抽象化があります。それでも、この低レベルのエンジニアリングを行うには人が必要です。彼らはまだ需要があります。同様に、C は、C++ と同様に、多くの環境で引き続き使用されます。たとえば、Java でデバイス ドライバーを作成できると考えるのは気が狂っています。選択肢と能力があれば、C で本格的な GUI アプリを作成するのも少し狂っているでしょう (ただし、そうではないかもしれません)。 Java または .Net で実行します。
各ツールにはそれぞれの目的があります。私は、C、C++、および Java が進化し、新規および従来の開発に引き続き使用されることを期待しています。
私は C++ と Java について話すことはできませんが、C はどこにも行きません...
ほとんどのオペレーティング システム カーネルを C で記述せずに作成することは、ほとんど考えられません (まあ、本当に頑固な人なら、完全にアセンブリ言語を使用できます:-P)。
C は基本的に、アセンブリ言語の薄いラッパーです。標準のフォン ノイマン CPU アーキテクチャと緊密に結合されているため、標準ライブラリやランタイムを必要とせずに、ほとんどの機能 (ポインター、文字列、スタック上の自動変数、整数演算など) を実装できます。
同じ理由で、C は、巨大な行列の乗算や複雑な言語の解析など、絶対に高いパフォーマンスが要求されるユーザーレベルのアプリケーションに最適です。C でパーサーを作成するのは面倒かもしれませんが、手動のメモリ管理の速度と効率の利点は見逃せません...
Alan Kay はかつて、「実際には、"オブジェクト指向" という用語は私が作ったものであり、C++ を念頭に置いていなかったと言えます」と述べています。
彼はプログラミングの未来を変えることに取り組んでいます
「本当のロマンスはまだこれからです。コンピュータ革命はまだ始まっていません。不完全なアイデアの貧弱な適応を使用して、洗練されていないバイヤーのための悪い事実上の標準への莫大な資金の流れに惑わされないでください。」 ソース
ええと、Bjarne がかつて言ったことを追加するかもしれません。
言語は、他の言語ではカバーされていないニッチな問題を解決するために進化しています。
言語が足を踏み入れて定着するかどうかは、まったく別の問題であり、人気と大きく関係しています.
次はなにかな?
埋める必要があると私が思う問題は、マルチプロセッサ (またはマルチコア) です。現在、一般的な言語はすべて、追加のコアを活用する能力が非常に限られています。基本的に、現在普及しているすべての言語は、コアを使用するための非常に基本的なオブジェクト (スレッド/ロックなど) を開発者に提供し、マルチコアから利用可能な並列処理を試して活用することは開発者に任せています。
コア (スレッドも含む) の概念を抽象化し、マルチコア/マルチプロセッサ アーキテクチャから利用可能な固有の並列処理を自動的に活用できる言語があればいいのですが。残念ながら、これらのすべての言語 (私が知っている) はまだ大学での研究プロジェクトであり、すぐに実際に採用される可能性は低いです。
あなたは、C -> C++ -> Java という進行があったことを暗示しています。
これは少し人工的ですが、各言語は問題を解決する方法を表しており、各言語には、問題を効率的に解決できる固有の問題領域と、その言語が不適切な選択となる他の問題領域があります。
個人的に:
- Java でデバイス ドライバを作成することはありません。
- 私はおそらく C でバックエンドの Web モジュールを作成しないでしょう (あなたはおそらくできますが、私はできません) など。
C#? -- ああ、でもそれは Java です :) (申し訳ありませんが、我慢できませんでした)
次世代の言語、スクリプト言語はすでに登場しています。Microsoft が DLR (動的言語ランタイム) に取り組んでいることは間違いありません。未来はインタプリタ (ただし JITted) であり、制約がほとんどなく柔軟性に富んだ動的言語になると思います。
現在、大部分の言語のパフォーマンスの制約はそれほど重要ではありません。または、Java や C# のアプリケーションをまったく作成していない人もいるでしょう。 - レベルの設計 (たとえば、1 mhz の CPU を使用している場合は、C# ではなく C でコードを記述します。3 GHz で実行されている CPU を使用している場合は、好きなように記述します)
だから.. Ruby、Python、「Dynamic-C#」... これらは未来です。Microsoft が DLR をリリースするとき、多くの関心が寄せられることを期待してください。多くの企業が、ほとんどのアプリケーション開発の最も重要な部分としてプログラマーの生産性について話し始めることを期待してください。
その後....おそらく、UMLのようなシステムでブロックを接続し、生成されたコードを生成するプロパティをそれらに追加するGUI駆動のシステムです。
答えは2つあると思います。
まず、クライアント側のアプリケーションは、ブラウザ ベースのアプリケーションとして実装されることがますます増えています。ブラウザー ベースのアプリケーションにリッチ デスクトップ アプリケーションに匹敵するルック アンド フィールを与えるには、Javascript のようなものが必要です。ニュースを少し追っていれば、ブラウザーでの JavaScript の実装を高速化するための多大な努力と、ブラウザーで JavaScript を使用して応答性が高く直感的な GUI を作成するのに役立つライブラリのエコシステムが盛んになっていることがわかります。
したがって、GUI の未来は Javascript にあると思います。
バックエンドであるサーバーについては、近い将来にスクリプト言語が用意されるとはとても思えません。サーバー側のソフトウェアは、機能が追加され、バグが修正され、何年にもわたって存続する傾向があります。それが書かれている言語は、それほど速く書く必要はありませんが、読みやすい (維持する) 必要があります。
また、スクリプト言語は、バグを修正するために 1、2 年後にコードを再検討すると、理解しにくくなる傾向があります。これには(私の意見では)短期的には消えない主な理由が 2 つあります。
- IDE は動的言語でヒントを与えるのに問題があります
- あなたの作業のコンテキストでは、定義上、利用可能なコンテキスト情報が少なくなります。Java では、タイプ X しか取得できないことがわかっています。スクリプト言語では、すべての参照コードをチェックする必要がありますが、大規模なプロジェクトでは簡単ではありません
これらの問題は、非常に経験豊富な開発者を使用することで軽減できますが、将来、有用な開発者が経験豊富な開発者だけである場合、経験の浅い開発者を雇う必要がなくなり、将来的に問題が発生します。
これらの理由から、次世代のサーバー側言語は静的型付けであると私は信じています。静的に型付けされた言語の中では、C# と Java が最も可能性が高いと思います。これは、利用可能な膨大な量の便利なライブラリと、これらの言語の非常に読みやすい性質によるものです。
他の人が述べたように、言語は新しいテクノロジーやトレンドに適応する傾向があります。したがって、その質問に答えるには、まずコンピューターの全体的な将来を調べ、これらの目的に最も適した言語を確認する必要があります。
たとえば、言語の進歩を例として使用するには、最初に(:-))利用可能な限られたリソースを最大限に活用する言語が必要でしたが、Cはその点で法案に適合します。時が経つにつれて、ソフトウェアアプリケーションの範囲が拡大し、ソフトウェアの再利用や設計の容易化などを容易にするためにオブジェクト指向ベースの言語に対する需要が高まり、C ++/Javaが普及しました。
現在、業界では、シンクライアントUI(つまりブラウザ)ですべての作業を行うサーバー側コンポーネントへの移行が進んでいます。そのため、この需要に応える言語が人気を集めています(Ruby、ASP / Java EE言語)。
新しい言語は、最も近いテクノロジーが普及したときに普及します。個人的には(これは当て推量ですが)、マルチコアシステムを真に活用する言語には大きな可能性があると思います。これは、最初からマルチスレッドを構築することを意味し、おそらくアプローチと考え方を変更する必要があります(手続き型からOOへの移行など)。
数年前から進行中ですが、Tim Sweeney のThe Next Mainstream Programming Language: A Game Developer's Perspectiveは、このテーマに関する興味深い考察です。
プログラミングの未来は?私たちが知っている言語から離れて。
2009 年になりましたが、まだテキスト エディターを使用していますか? プロジェクト I'm a part of you を使用すると、属性を設定するだけでアプリケーション全体を構築できます。(主に数学的な) 式と文字列値以外では、テキスト行はどこにもありません。
開発者の 1 人が「コードを印刷できない」と不満を漏らしたので、私はこう答えました。シート?" 本当に前進できるのは、新しい抽象化メカニズムに移行したときだけです。
プログラミングの未来はまだ見えていませんが、私たちが長い間持っていた C/C++/Java のハーネスから最終的に解放される、いくつかのエキサイティングな開発が起こっていると思います。
プログラミング言語の歴史のこの分野だけをたどれば、JavaScriptとC#の両方を書くことができると思います。なぜなら、それらはあなたが言及した3つの後のものであり、同様の構文を共有し、前任者から取ったものだからです。
他の人はDまたはObjective-Cに言及するかもしれません(もちろん、それらはすでにここにあります)。
次の言語とは、毎月ほぼ新しい言語があるため、「次の成功」を意味すると
思います...ガベージコレクションを備え、Jitを使用してバイトコードで実行され、移植性の高い言語になると思います。
静的型付けと動的型付けのどちらでオブジェクト指向か関数型かはわかりませんが、興味深いファンプログラミング言語のようにミックスに賭けます。
あるいは、私たち全員が間違っているかもしれません。それは、「このページの天気ボックスを取得し、その色とこのロゴをそれに変更して、私のページに統合する」という、音声またはグラフィカルインターフェイスを備えた自然言語かもしれません。
私の意見では、よりコンパクトな定義、より優れた標準ライブラリ、ネイティブ ガベージ コレクション、およびネイティブ同期構造を備えた C++ のような言語が素晴らしいと思います。比較的初心者でも使用できるはずですが、専門家が必要に応じて効率的で低レベルの方法でプログラミングするための機能を提供します。D はこれらの基準のほとんどを満たしていると思いますが、定着する可能性は低いと思われます。
D 言語、特に 2.0 バージョンは、C とのソース互換性を維持することなく、Ruby、Python、および多くの最新の言語から学び、依然として金属への生のアクセスを許可しています。この言語の設計上の決定は、関数型プログラミングとメタプログラミングが組み込まれた、次世代システムおよび一般的なプログラミング言語の完璧なソリューションです。
短期的には、高水準言語がより強力になり、より使用されるようになると期待しています。Perl 6 と Javascript 2.0 は、私たちを待っているものの良い例です。
長期的には、関数型言語が主流になる可能性がありますが、すぐには実現しないと思います。
言語の問題は、私の意見では、どちらでもありません。それは常にあなたのアプリケーションに依存します。また、言語にはほとんどの場合、このアプリケーションまたはそのアプリケーションに適した標準ライブラリ セットがあるためです。言語は、特定のアプリケーション分野に多少結び付いています。
例えば:
C -> Device drivers
C++ -> Highperformance Computing
Java -> Server side programs (J2EE)
C# -> Server, Client(Silverlight, WinForm, WPF)
Ruby, Python, ... -> WebScripting (Serverside) and helper scripts
ECMAScript (Javascript) -> WebScripting (Clientside)
これらの言語はいずれも、あらゆるコンピューティング プログラムを解決できると思いますが (Jits があるため、パフォーマンスに関しても同様です)、すべての言語ですべてのライブラリを再作成することは現実的ではないため、どの分野でも使用されていません。
C と C++ を特別なものにしているのは、標準ライブラリが存在することですが、他のライブラリと比較すると、かなり最小限の標準ライブラリです。これらの言語を効率的に使用するには、サードパーティ (非標準) ライブラリが必要です。
したがって、プロジェクトの言語を選択するときは、次のことを確認します。
- プロジェクトで使用できる適切なライブラリはありますか
- あなたはその言語を知っていますか
- この言語でプログラミングするのは効率的ですか (brainfuck を見てください)
- あなたのチームは言語を知っていて習得していますか?
最後に、言語は好きですか?結局のところ、それがこの言語またはその言語を使用する最大の動機です。
したがって、言語の進化における次のステップは、高レベルのライブラリと概念をより高速で表現力豊かなものにすることです。例は
- ラムダ式
- Linq (言語で SQL の並べ替えを行う C# の機能)
- 関数型プログラミング
- 可変タイピング
- 動的型付け
- 特定の言語ではない: プログラマーを支援する優れた IDE
- 重要: easy! のサポート 並列処理 (Axum、Nesl、orca、Chapel、...)リストはこちら
ある時点で、プログラムはプログラミングに関する限り、人間を冗長にする独自のプログラムを書き始めます。主な意見の相違は、これがいつ起こるかです。