5

これは非常に抽象的なことですが、非常に焦点が絞られていると思います。

今日、高水準言語はたくさんあります。C#JavaVBPythonなどはすべて、低水準の複雑さを抽象化し、よりユーザーフレンドリーなプログラミング体験を提供するために作成されています。高水準言語は、低水準のプロセス固有の操作(ポインター操作やメモリー管理など)を実行する必要性を減らし、ほとんどの場合完全に取り除くことができます。多くは、プラットフォームの詳細(ファイル操作、ユーザーインターフェイスの生成など)も削除します

私の2つの質問は次のとおりです。

  1. 他に何を抽象化できる/抽象化する必要がありますか?今日の高水準言語に存在する、さらに抽象化される/必要とされる低水準セマンティクスは他にありますか?
  2. 汎用の高水準言語はどの時点で非常に高水準、つまり目標指向になりますか?
4

8 に答える 8

4
  1. 他に何を抽象化できる/抽象化する必要がありますか? それは常にあなたの目標に依存します。ここには明確な線はありませんが、どれだけの制御が必要かということになると思います。通常、抽象化と可能性の間にはかなり大きなトレードオフがあります。
  2. 汎用の高級言語はいつ目標指向になりますか? 言語/プログラミング環境に、何をすべきかではなく、何をしたいかを伝えることができるとすぐに。

しかし実際には...もちろん、線は完全に任意です。

于 2010-09-22T00:43:58.810 に答える
4

言語に非常に高レベルの抽象化を含めることの問題の1つは、実行したいすべてのことに対して十分でない場合があるため、低レベルの抽象化も必要になることです。同じ言語で高レベルの抽象化と低レベルの抽象化を使用する場合の問題は、低レベルの抽象化を介してそれらをプローブできる場合、高レベルの抽象化が非常に簡単にリークする可能性があることです。

たとえば、Javaはそれほど高レベルの言語ではありませんが、何よりもまず安全であるように設計されています(抽象化がリークしないという意味で)。したがって、Javaでは実行できないことがいくつかあります。たとえば、Java内でJavaのガベージコレクターを記述したり、ポインターキャストポリモーフィズムを使用して独自のオブジェクトシステムをロールしたり、オペレーティングシステム(少なくとも従来のシステムではない)を記述したりすることはできません。

対照的に、Dは高レベルと低レベルの両方の機能を提供します。たとえば、DのガベージコレクターはDで記述されています。これは良さそうですが、ほとんどの場合はそうです。ただし、単一のコードベースで抽象化レベルを混合し始めると、特に型システムを無効にするためにキャストまたはユニオンを使用する場合、抽象化がリークする可能性があります。したがって、Dで正常にプログラミングするには、目前のタスクで必要がない場合でも、リークのある抽象化に対処するための低レベルの詳細に注意する必要がある場合があります。

于 2010-09-22T04:00:08.050 に答える
2

Tclには公式の提案(Tcl Improvement Proposal(TIP)131)があり、問題をほぼ完全に解決します。必要なのは、作業を行うボランティアだけです。詳細の一部が省略された骨格の実装もあります。

于 2010-09-22T00:49:48.607 に答える
2

特定のドメイン固有言語は、非常に「高レベル」である可能性があります。この良い例は、プログラミング言語が平易な英語とそれほど変わらないInform (テキストアドベンチャーを書くために使用される)です。これがサンプルプロジェクトからの抜粋です:

The fireplace is scenery in the Entrance Hall. The description is "Unlit, vacant
[if Search is happening]. It is almost as though you are not expected[end if]."
The sound of the fireplace is "whistling wind". Understand "fire" or "whistling" 
or "wind" as the fireplace. Instead of burning the fireplace: say "There is no 
fuel prepared for a fire."

これは実際のソースコードです。:)

于 2010-09-22T01:05:49.663 に答える
2

架空の将来の言語では、実装の代わりにベリファイアを記述できるようになると思います。次に、コンパイラーはそのベリファイアを分析し、仕様に一致する実装を作成します(しようとします)。(明らかに、コンパイラーは停止ソルバーではないため、失敗するか、ブルートフォースにフォールバックする必要があります。)

本質的に、ブルートフォースの答えと比較してばかげた最適化を備えた論理言語。

検証コードは実装コードよりも長くなる可能性がありますが、はるかに優れたドキュメントとして機能し、仕様の外観に近くなります。より多くのコード入力時間を、より少ないドキュメント/仕様/コード非同期と交換します。

例えば:

int32 Remainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures Math.Abs(result) < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures result >= 0
    ensures result < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}

結果:

//warning: suggested precondition: denominator != int32.MinValue due to Math.Abs
int32 Remainder(int32 numerator, int32 denominator) {
    return numerator % denominator;
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    return ((numerator % denominator) + denominator) % denominator;
}
于 2010-09-25T06:22:05.900 に答える
1

うーん、いくつかの言語がいくつかの追加の抽象化を先導しようとしていると思います:STMを備えたClojureとActorモデルを備えたErlang。

  1. それがどのように行われるかがわからないことがわかるのは、静的に型指定されたチェックに似た並行性チェックを備えた言語だけです。停止性問題が存在するので、私はこれを言います。
  2. それが私の芝生を刈り取り、朝にコーヒーを淹れ、私のメールをチェックし、ニュースで何が起こったのかを教えてくれます。
于 2010-09-22T00:50:09.170 に答える
0

次のステップはフレームワークだと思います。

于 2010-09-25T05:45:49.890 に答える
0
  • 現在、いくつかの「言語」はUAT用です(これは、目標と呼ぶことができるものに近く、目標を使用する場合は、説明できる唯一の方法であるため、テストが必要です。たとえば、テスト部分に適合します)。それらはプログラミング言語とマージすることができます。
  • ほぼすべての言語が、ますます多くの高レベルのインターフェイス (つまり、抽象化)にアクセスできるようになり、必要なコードはますます少なくなり、OSから抽象化されています(C ++ MFCと比較して、C#でGUIアプリケーションを作成するのがいかに簡単かをご覧ください)。 C ++ Win32 APIへ)。
  • プログラミング言語に関しては、他の開発方法の最高の機能をより多く得ることができます。私は、多くのOOの問題を解決するのに役立つアスペクト指向プログラミングを考えており、C#やJavaですでに部分的に実装されています(ロギング、トランザクション...)。
  • UMLの最終的な目標(でしたか?)は、UMLのビューと、図の詳細がシステムをコーディングするのに十分であることを可能にすることです。UMLは言語でもあります(より大きな意味で)。
  • IDEも含める必要があります。以前は頻繁にコーディングする必要があったときに、IDEからダイアログのサイズを変更する方法を設定できるようになりました。後で、スキン可能なアプリケーションと同じように、テーマのドロップリストからアプリケーション全体またはWebサイトのスタイルを設定できるようになる場合があります。そして、もっとたくさん来る可能性があります。

開発環境は、アクセスできるライブラリとそのアクセスレベルと同じように、開発の大きな部分を占めるため、統合環境でのそれらの結合を想像してみてください。

于 2010-09-25T06:19:47.377 に答える