質問

私はこれが非常に抽象的であることを知っていますが、とても焦点が合っていると思います。

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

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

  1. 他に何を抽象化することができますか?今日の高レベルの言語には、さらに抽象化されるべきである/さらに抽象化されるべき低レベルのセマンティクスはありますか?
  2. 汎用、高レベルの言語はどの時点で 非常にハイレベル, 、別名 ゴール指向?
役に立ちましたか?

解決

言語に非常に高いレベルの抽象化を含めることの問題の1つは、あなたがやりたいすべてのものに適切でないことがあることがあるので、あなたもより低いレベルの抽象化が必要になることです。同じ言語で高レベルの抽象化と低レベルの抽象化を持つことの問題は、低レベルの抽象化を介してそれらをプローブできれば、高レベルの抽象化が非常に簡単に漏れやすくなる可能性があることです。

たとえば、Javaはそれほど高レベルの言語でさえありませんが、何よりもまず(抽象化が漏れないという意味で)安全であるように設計されています。したがって、Javaで行うことは不可能なこともあります。たとえば、JavaのGarbage CollectorをJava内に書くことも、ポインターキャストの多型を使用して独自のオブジェクトシステムをロールしたり、オペレーティングシステムを作成したりすることはできません(少なくとも従来のシステムではありません)。

対照的に、Dは高レベルと低レベルの施設の両方を提供します。たとえば、DのゴミコレクターはDで書かれています。これは良く聞こえ、ほとんどの場合です。ただし、単一のコードベースで抽象化レベルの混合を開始すると、特にキャストまたはユニオンを使用してタイプシステムを打ち負かす場合、抽象化が漏れる可能性があります。したがって、Dで成功裏にプログラムするには、手元のタスクに必要でなくても、漏れやすい抽象化に対処するために、いくつかの低レベルの詳細を認識する必要がある場合があります。

他のヒント

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

現実には...もちろん、この線は完全にarbitrary意的です。

TCLには公式の提案があります(TCL改善提案(TIP)131 それはほとんど問題を永久に解決します。必要なのは、仕事をするためのボランティアだけです。詳細のほんの一部が残っている骨格の実装もあります。

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

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."

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

仮説的な将来の言語を使用すると、実装の代わりに検証剤を書くことができると思います。その後、コンパイラはその検証者を分析し、(試みを試みます)仕様に合った実装を書きます。 (明らかに、コンパイラは、停止ソルバーではないため、時々ブルートフォースに故障するか、障害物に陥る必要があります。)

基本的に、回答を強制することと比較して、ばかげた最適化を伴う論理言語。

検証コードは実装コードよりも長くなる可能性がありますが、より良いドキュメントとして機能し、仕様がどのように見えるかに近いです。より多くのコードタイピング時間をより少ないドキュメント/仕様/コードの崩壊と交換します。

例えば:

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;
}

HRM、いくつかの言語がいくつかの追加の抽象化を先導しようとしていると思います:STMを使用したClojureとActor ModelのErlang。

  1. 私がそれがどのように行われるかを見ることができないことがわかる唯一のことについて、静的にタイプされたチェックに似た同時性チェックを持つ言語です。停止の問題が存在するので、私はこれを言います。
  2. それが私の芝生を刈り、朝にコーヒーを作り、メールをチェックして、ニュースで何が起こったのか教えてくれます。

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

  • 現在、一部の「言語」が向けられています uat (これは、目標と呼ぶことができるものに近いものであり、 目標にはテストが必要です それが説明できる唯一の方法だから フィット テストパーツの場合);これらはプログラミング言語と統合できます。
  • ほとんどすべての言語がますますアクセスしています 高レベルのインターフェイス (つまり、 抽象化)あなたからのコードをますます少なくし、OSから抽象化する必要があります(C ++ Win32 APIと比較して、C ++ MFCと比較して、C ++ MFCと比較してC#で今すぐGUIアプリケーションを作成するのがどれほど簡単かを参照してください)。
  • プログラミング言語に関しては、彼らは他の開発方法のより多くの最高の機能を得ることができます:私は考えています アスペクト指向プログラミング これは多くのOOの問題を解決するのに役立つ可能性があり、すでにC#とJavaで何らかの形で部分的に実装されています(ロギング、トランザクションに関する問題など)。
  • uml 究極の目標(だった?)DIAGRAMSの詳細とともに、システムをコーディングするのに十分であることをUML ViesWを許可する。 UMLも言語です(より大きな意味で)。
  • IDE 含める必要もあります。これは、以前にコーディングする必要があることがよくある間に、ダイアログがIDEからどのようにサイズを変更するかを設定することができます。後でできるかもしれません スタイル 肌のアプリケーションと同様に、テーマのドロップリストからのアプリケーション全体またはウェブサイト。そして、もっとたくさん来ることができます。

統一された環境にいる人々の結合を想像してください。開発環境は、図書館がアクセスし、そのレベルのアクセスにアクセスできるように、開発の大きな部分であるためです。

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