超高レベルの言語はありますか?[閉まっている]


20

歴史的に、HLLはC、FortranまたはPascalのようなものであり、VHLLはRubyまたはPythonのようなものです。私は4GL、5GL、DSL、LOPという用語に精通しており、定義についてはウィキペディアを読むべきではありません。UHLLを探しています。

私の質問は、生産性が一桁以上高いコンピューター言語がありますか?

生産性が高いということは、オーサリングされたコードが少なくなり、結果を達成するプログラマの時間が減り、バグやデバッグが減り、コードと要件の概念的リンクが密接になり、変更と保守の労力が減るということです。

私が興味を持っている主なドメインは、GUIまたはブラウザのフロントエンド、データの永続性、および印刷や電子メールなどの他のシステムへの接続を備えた汎用のビジネスおよびコンシューマアプリケーションです。他の人は他の場所に集中するかもしれません。

これらの言語の一部はドメイン固有である可能性があり、それらは大規模で機能的なアプリケーションの構成機能にすぎない可能性があることを認識しています。Excelスプレッドシートはこのカテゴリに分類されます。

これらの言語の一部は一般的に見えるかもしれませんが、それでも範囲が狭く、多くの問題に適さない可能性があることを認識しています。たとえば、Matlabは、主にユーザーインタラクションとテキストデータを扱うプログラムには適していません。

VHLLとの類推によって、UHLLにあるかもしれない機能のいくつかを知っています。次の1つ以上を見つけることを期待しています(そして、リストに自由に追加してください)。

  • GUIフォームの描画は、GUIフォームのプログラムです
  • 行、列、ヘッダーを含むテーブルは、データベース内のテーブルのプログラムです
  • 宣言ロジックは、IFステートメントなしで、何をいつ実行するかを指示します
  • FORループなしのデータセットの操作
  • データ駆動、パターンマッチング、ツリーウォーキングなどの非順次実行

この質問の動機は、比較的単純なビジネス要件を大量のコードに変換して、コンピューターが望むものや必要なものを提供するという大変な努力にますます飽き飽きしていることです。問題は、私の痛みを分かち合い、言語のレベルを上げ、コンピューターにもっと多くのハードワークをさせることに取り組んでいる他の人を見つけることです。これは1970年代から80年代の主要な焦点でしたが、まだ起こっていますか?

これらは私の質問に対するいくつかの提案された回答であり、私が知っている言語を要約または列挙するためにここに提供されており、私の見解ではどれが足りないかです。

HLLまたはVHLLであり、より高いレベルに属する個々の機能を含む多くの言語があります。私はそれらのほとんどを使用しました(しばしばひどく)。彼らが含まれます

  • マクロと自己変更機能を備えたLisp
  • Haskell、データ依存性とパターンマッチング
  • 行とテーブルを扱うSQL
  • Rebol、それは賢いようですが、私は本当にそれを取得しません
  • APL(およびJ)、その多次元配列と超小型演算子
  • LINQを使用したC#
  • 素晴らしいコレクションと正規表現が組み込まれたAWK / Perl / Python / Ruby

これらの言語には低レベルの機能が多すぎてUHLLにはなりません。プログラマーは、有用なプログラムのために、多くの低レベルの構成体を作成する必要があります。

RAD / 4GLパッケージがあります。私はいくつかを使用しました:

  • dBase / Foxpro
  • Dataflex / Powerflex(私の製品)
  • アクセス
  • PowerBuilder

そして、私が使ったことのないものがたくさんあります。ほとんどの場合、言語はせいぜいHLLですが、パッケージにはフレームワークが含まれており、言語とパッケージ間の特権接続が含まれているため、アプリケーションを迅速に構築できます。なぜこのアプローチが蒸気を使い果たしたのかはわかりませんが、いずれにしてもUHLLはそうではありません。

生のフレームワーク/ライブラリがあります。私はいくつか使用しました:

  • レール
  • Java awtとswing
  • .NET Windowsフォーム、WPF、およびASP.NET。

これらは現在、最新技術です。プログラマーは実装言語の泥沼にしっかりと閉じ込められたままであり、毎回複雑さを処理します。これはUHLLではありませんが、UHLLはこれらのいずれかの上に構築される可能性があります。

UMLやRationalのツールセットなどの設計ツールがありますが、それらはよくわかりません。私の知る限り、ビジネス要件の明確化に役立ちますが、プログラミングのステップを置き換えることはできません。プログラマを排除するのではなく、時間と労力の単位ごとにより多くのことができるようにします。

だから、私が考えることができるすべての候補を排除したので、私は他の誰かがより良い候補を提供できることを望みます。

後期編集:答えがあると思う:Wolfram言語。http://www.wolfram.com/wolfram-language/


2
@Phoshi-最後の3つのポイントもSQLでカバーされます。DWIM(私が言うことをする)のやり方ではありません。
kdgregory

10
GUIフォームの描画はGUIフォームのプログラムですが、ボタンのクリック、UIの更新などを処理するコードはどこにありますか?Visual Studioのフォームデザイナーと仕事をしたことがありますか?彼らはまだカバーの下でコードを書きますが、通常、開発者はそれを見る必要はありません。彼らは単にフォームを「視覚的に」開発します。イベントハンドラの本体などのカスタムコードを除きます。 行、列、ヘッダーを含むテーブルは、データベース内のテーブルのプログラムです。データベーステーブルのすべてのトリガー、インデックス、制約はどうですか?
FrustratedWithFormsDesigner 14年

3
@FrustratedWithFormsDesigner:それでもあなたは...欲求不満です。
ロバートハーヴェイ14年

4
@RobertHarvey:はい。しかし、私がすべてのコードを自分で書かなければならないほど不満はありません。;)
FrustratedWithFormsDesigner 14年

7
特定の問題領域に合わせて調整されたDSLよりも高いレベルの言語(「最も抽象的な」など)になり得るものは何ですか?そして、もちろん、そのようなDSLを効率的に構築するために特別に設計されたいくつかの言語があります。
SKロジック14年

回答:


33

リストするほぼすべての基準は、MS Access、Sybase Power Builder、Oracle Forms、Ruby-on-Rails(Web Appsのより現代的なサンプルとして)など、4GL / RADツールで既に試行されたものです(詳細については、Wikipediaを参照してください)ベンダーの非常に長いリスト)。実際、これらのツールを使用すると、比較的単純なビジネス要件を何らかのプログラムに変換することが非常に迅速に実現できます。だから、RADツールのほとんどのベンダーは、皆さんの感覚ですでにUHLLを発明したと誰もが思うはずの方法で製品を宣伝しています。

問題は、「比較的単純」であるという要件から離れるとすぐに、これらの環境で作成されたプログラムを維持および進化させる必要があるとすぐに、限界に簡単に到達し、それらの欠点に気付くことです。または、それらを使用して要件を実装することは、他の「VHLL」を念頭に置いている場合ほど簡単ではありません。私見では、プログラムのバージョン1.1、1.2、および1.3にさらに進むと、バージョン1.0での効率性の改善を損なう可能性が十分にあります。

複雑な要件を満たすソフトウェアを構築する場合は、複雑なプログラミング環境が必要になります。特効薬はまだありません。長年にわたって徐々に改善されただけで、現在のプログラミング言語の前身に対する生産性の「桁違い」はありませんでした(少なくとも過去30年間、およそブルックの記事が公開された過去)。


9
+1 relatively simple。実際のビジネスロジックは、スパゲッティを非常に速く変える傾向があります。
ボブソン14年

1
地面を離れたらすぐに+1。私にとっては、多くの場合、「5分でブログを作成します(コードを書かずに!)」タイプ広告。実際のプログラムに似たものを実装する必要があり、それから突然、単純なものだと思っていたものがそうではなくなるまで、それは素晴らしいことです。たぶん彼らは素晴らしく、私はそれらを理解していない-しかし、マーケティングはあなたが遠くに行くだけで大きな混乱ではないと信じることを本当に難しくします。
ブライアン14年

はい、知っています。これらの4GLのほとんどと他のいくつかでコードを記述しました。私が使用したものはスケーリングを行いますが、VBAなどのあまり良くないHLLが埋め込まれているため、スケーリングします。そして、すべてに制限があり、クローズド製品であるため、それらの制限を変更することはできません。はい、フレッドブルックスは正しいので、UHLLには弾丸の武器庫が必要です。
david.pfx 14年

これを「ドリームウィーバー効果」と呼びます。UHLLsはちょうど超リーキー抽象化したものである
チャールズサルビア

14

私が知っている最高レベルのプログラミング言語はAPLです。必要なすべての記号を表すために特別なキーボードが必要です。チェックアウトこのビデオを、著者は約7分でライフゲームの完全な実装を書き込みします。

もちろん、本当の質問は「これは実用的ですか?」です。このようにビジネスを維持するのに十分な数のAPLプログラマーを世界中で見つけることができますか?APLは携帯電話やタブレットで実行できますか?ソフトウェア開発者全員に新しいキーボードを本当に購入する必要がありますか?

生産性の向上を本当に望んでいるなら、あなたの最善の策はおそらくLispのバリアントです。ClojureはJVM上で実行され、.NETポートを備えています。これは、人々がすでにそれを行っているからです。Orbitz検索エンジンはLispで実行され、Paul GrahamはLispを使用してビジネス全体を運営し、競合他社(すべてJavaを使用していた)に比べて大きな優位性があると主張しました。

プログラミング言語のレベルが高いほど、実際のハードウェアからより多く削除され、パフォーマンスの問題が発生する可能性が高くなることに注意してください。本当に洗練されたコンパイラーをお持ちでない限り、アプリケーションのパフォーマンスに重要な部分を、よりパフォーマンスの高い低レベルの言語でコーディングすることがあります。

そして、言語に精通した開発者の非常に多くの集団を抱える問題がまだあります。そのすべての欠点にもかかわらず、Javaプログラマーを見つけるのに問題はありません。


主流の言語はまだ進化していることに注意してください。Linqは、データ駆動型プログラミングをより宣言的にするという特定の目的のために作成されました Linqを機能させるために、C#言語にいくつかの新しい機能が追加されました。それらはすべて、開発者の生産性の向上に関係しています。

平均を破ってさらに読む


Linqは、私が意味する種類のコードの優れた例です。ifsとloopsをwhensとselectとして、すべて1行で書くのが大好きです。そのような他の例はありますか?
david.pfx 14年

1
@ david.pfx:C#はそのパーティーに遅れており、構文が逆になっています(SQLキーワードを使用しますが、他の人がSQL順序とより単純なキーワード/シンボルを使用する場所では順序が異なります)。ただし、SQLにコンパイルできる方法は、ほとんどの言語でできる方法よりも優れています。
-Jan Hudec 14

4
@ david.pfx:リスト内包表記を持つほとんどすべての関数型言語は、Linqが行うことを実行できます。
ロバートハーヴェイ14年

7

あなたは、超高レベル言語の存在を制限する交差点で少し示唆したと思う-ある時点で、それらをプログラミング言語としてもはや識別しません。

私が知っているこの特定の現象の最良の例は、おそらくここで大きな潜在的関心があるものであり、Unified Modeling Languageです。確かに、あなたが求めていることを具体的に行うために開発された特定のソフトウェアアプリケーションスタックがあります。それはあなたの要件の多くを満たしますが、必ずしもあなたが考えている方法ではありません。それでも、それはこの状況に対して非常に教育的です。私は同じように感じ、私の経験(以下)はこの問題に対する考え方を変えました。

ここで個人的に、IBMのRational Software Architectについてお話します。これは、実際にウルトラハイレベル開発を可能にする試みです。目標は、アクターやクラスなどのオブジェクトとして哲学的ビジネスコンセプトを作成し、エンティティの属性を与え、接続を定義し、作業中のシステムを情報がどのように流れるかを定義し、これを実行できるようにすることです。すべてGUIで。

たとえば、DataStoreオブジェクト、アクター、フォーム、いくつかの関連クラス(Customerなど)をドラッグしたり、グラフなどを使用してオブジェクト間に接続線を描いたり、ブームを作成したりすることができます。(これは明らかに非常に単純化されています)

実際、複雑なGUIの形成、UMLの非常に徹底した実装/解釈、およびUMLグラフ情報を保持する完全なXMLドキュメントを含むJava / C#/ VBコードへのコンパイル、および実装/有効化が行われました。ラウンドトリップエンジニアリング。モデルとコードを行き来できるため、非常に高い鼻出血の哲学的レベルと非常に低いレベルのプラットフォーム固有のコードの両方で物事を制御できます。

それはあなたが望むすべてであり、それ以上であり、あなたは交換で何もあきらめません!右?

なぜ誰もがそれを使用しないのですか?!?!

...まあ、それはそれです。あなたが実際に終わるのはモノリシックな取り組みです。すべてが多くの可動部分と魔法を伴い、すべては多くの異なる場所(GUI、XML、下位レベルのいずれか)コード、それ自体が多くの異なるモデルレベルで作成/定義/維持されるUMLモデル)。

遊ぶのは本当にクールですが、それは...これをどのように置くか...非常に高い学習曲線を持ち、複数の分野を念頭に置いて設計されており、本当に新しいものとして扱う必要がありますすでに持っている他のスキルの一般化可能性をほとんど、またはほとんど許可しません。

そして、最終的には-それでも、何十万もの企業が何十もの企業からプロジェクトに注ぎ込まれ、その背後にあるいくつかの非常に大きな名前がありますが、実行可能なレイヤーでCスタイルのコードが残っており、時々直接編集する必要がありますなぜなら、オブジェクト指向クラス記述とUMLの間の変換をプログラミング/マシンレベルに変換できないものもあり、自動化はまったく完了できないからです。

私の経験では、足場を生成するのは非常に複雑な方法でした。それは恐らく、このような計り知れない技術的取り組みについて私がこれまでに言う最も残酷なことですが、それは私がそれから得たものです。

私が話をした業界の人々から、彼らは悲しいことに同じことを言った。彼らは、ドキュメント、無数の図、モデル、会議、分析を作成するために多くの作業を数か月から数か月にわたって行い、それをすべて捨てて、開発チームがコードを書いて、しばしばそれを別の仕様バインダー(これまで誰も読んでいない)。そのため、今ではJavaといくつかの特殊な作図/視覚化ソフトウェア、およびアジャイルを使用するだけで、これで話は終わりです。

たぶんこれは不公平であり、あなたが正しくそれをするときそれは働く。たぶん、しかし、私が話をしたコンサルタントや教授から、彼らはシステムを学ぶために働いている特別な数週間の開発ワークショップに多くの時間を費やしたと主張しました仕事と何がどこに行く。

しかし、プログラマーのせいかもしれません。システムがうまく機能することを拒否するだけで、コンピュータープログラミングとはまったく異なります。おそらく、純粋なコードプログラマーは、キャンドルメーカーや古いウィーバーのように仕事を入れ替えるのに抵抗するので、Implementation To Specificationの限られたタスクを実行することを拒否します。そして、それはほとんど完璧でした。

しかし...私はその中にいくつかの真実があるかもしれないと思うが、それでも私はほとんどそれが本当にうまく機能しないだけだと思う​​。私はそれがほとんどの時間は本当に難しいことではないもの(コンピュータプログラミング)に変わり、それがうまくいけば素晴らしいことになるが、神聖ながらくたはあなたが何もすることなく長い時間を過ごすという点までさらに難しくしていると思うそこに着くためにそれを見せてください!

おそらく、それは数千人以上のチームを持つ企業でのみ機能し、おそらくまだそこにいません。

私は知らないよ。

しかし、この超高レベル言語へのアプローチの正しい点と間違った点の研究-そしてそのような考慮事項にUMLの種類のニーズを含めるべきだと思う-を避けるために、Rational Software Architectのようなものを本当に考慮しなければならない潜在的なばか用事。

または、20〜50年の努力を続けなければならないかもしれません。プログラミング言語が制約であるとはもはや楽観的ではありません。

また、プログラミング言語が以前に制約だった場合、それが改善により潜在的な桁違いの改善をもたらした理由です。それらがもはやそのような制約ではない場合、イノベーションはそのような改善の順序を提供できない可能性がはるかに高くなります。しかし、私は未来を語ることはできません!ですから、残りは「作業中」ではなく、「すぐに伝える」ことは確かだと思います。


あなたは本当にコーディングを排除すると思いますか?コンピューターが私たちと同じくらいスマートになるまで、ビジネス要件がコードに直接変換される見込みはありません。
david.pfx

1
Rhapsody(IBMが別の類似ツールを購入し、IBM Rationalブランドの下に2つの類似のアプリケーションセットを持っているのはなぜかと思います)でRhapsodyを使用するのは疑わしい喜びでした。複数の人が同じコードで作業することはよく研究されて解決された問題ですが、同じUMLの部分で作業する複数の人は機能しません。
Jan Hudec 14

「なぜ誰もがそれを使用しないのですか?!?!」-それは悪い結果を生むためです。これは人生の1インチ以内に
むち打た

1

しばらく考えてみると、高レベルのプログラミングは基本的に、簡単に入手でき、証明されている小さな部分を構成することができます。プログラムがさまざまなライブラリの非常に単純なグルーコードであるところまで。接着剤は非常に表現力豊かなDSLかもしれません。これは、ほぼすべてのプログラミング言語で実行できます。

個人的には、コンポーザビリティの解決策は、あなたが本能的に感じるかもしれないことに反して、オブジェクト指向プログラミングにはないということをますます感じ始めています。このパラダイムは、命令型プログラミングと同様に、プログラマーに自由を与えすぎて、再利用しやすいコードを書くのが難しくなります。

むしろ、関数型プログラミングは、構成可能性にはるかに適したプリミティブを提供すると思います。純粋な関数型プログラミング言語では、副作用のある関数を定義することもできません。これにより、バグを減らしたり、バグを見つけやすくしたりするだけでなく、それらに基づいてビルドすることも容易になります(より大きなシステムに構成します)。

関数型プログラミングに興味がある場合は、Haskellのような最新の関数型言語をご覧くださいParsecモジュールは、解析に優れた高レベルDSL(機能的な専門用語ではコンビネーターライブラリと呼ばれます)を提供すると思います。Haskell用の機能的なリアクティブプログラミングフレームワークもあり、数行のコードで強力なGUIを構築できます。


1
yesまたはnoを言わずに「yes / no」の質問に答える場合は-1。(OPの質問の特定の語彙を無視します。)
DougM 14年

実際、これは正しいと思います。UHLLは、既に存在する機能を実装するためのものではありませんが、低レベルで考えるのが難しい方法でそれらを組み合わせます。何でも知ってますか?Haskellはそうではありません。
david.pfx 14年

あなたの前向きな反応に感謝します。DougMに同意するように、実際に答えを削除することを考えていました。Haskell自体がそれであると示唆しているのではなく、関数型プログラミング言語(Haskellなど)でコンビネーターライブラリを使用することが、既製のコンポーネントを結合する方法だと思います。
マティアスP.

0

ゲームがクエストとインターフェイスをスクリプト化するために使用するLuaは、この基準を満たすと期待しています。同様のドメイン固有言語(およびマップビルダーユーティリティ)を使用して、レベルデザイナーが「プレイヤーがボブに話しかけると、ボブのエピッククエストを開始してください」とすばやく簡単に言うことができます。

私は、コードがどのように行われるべきかではなく、が起こっているかを説明することに焦点を当てる、さらにいくつかの難解な言語を知っています。一部は、非常に宣言的で論理ベースのアプローチに焦点を当てています。それを行うために、リアクティブプログラミングに焦点を合わせている人もいます。一部の人はそれを行うためにアクターに焦点を合わせています(特に、並列化が必要な場合)。単純に構文をより自然にすることに焦点を当てている人もいます-自然な構文は自然言語とコードの間の変換によって引き起こされるバグが少ないという主張である。

ランクおよびファイル開発者の生産性を桁違いに高める限り、本当に有望なものはありません。


1
luaは、UHLLの手の届かない低レベルの詳細をコーディングするための言語として適していますか?
david.pfx

0

REBOLはすべての基準に適合すると思います。数行のコードで比較的洗練されたGUIアプリを作成できますが、その「特殊性」はDSL作成です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.