web-dev-qa-db-ja.com

人間が読めるプログラミング言語はありますか?

つまり、人間のスタイルでコーディングされた言語はありますか?例えば:

Create an object called MyVar and initialize it to 10;
Take MyVar and call MyMethod() with parameters. . .

あまり役に立たないことは知っていますが、そのような文法を作成することは興味深いかもしれません。

52
Enrico Murru

[〜#〜] cobol [〜#〜] はそのようなものです。

SET MYVAR TO 10.
EXECUTE MYMETHOD with 10, MYVAR.

ウィキペディアからの別のサンプル:

ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING COST.
SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

奇妙なことに、英語で読めるように設計されているにもかかわらず、ほとんどのプログラマーは奇妙な命名規則でこれを完全に弱体化させました。

SET VAR_00_MYVAR_PIC99 TO 10.
EXECUTE PROC_10_MYMETHOD with 10, VAR_00_MYVAR_PIC99.
104
James Curran

[〜#〜] lolcode [〜#〜] はどうですか?

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

シンプルさ自体!

120
Paul Dixon

通知7

Inform 7は、おそらく人間の言語で最も適切に設計されていると私が感じる言語です。これは、アドベンチャーゲームの作成に固有のアプリケーションです。

これはルールベースのセマンティクスに基づいており、オブジェクトとその場所の関係を説明する多くのルールを記述します。たとえば、以下のセクションはInform7プログラムです。

"Hello Deductible" by "I.F. Author"

The story headline is "An Interactive Example".

The Living Room is a room. "A comfortably furnished living room."
The Kitchen is north of the Living Room.
The Front Door is south of the Living Room.
The Front Door is a door. The Front Door is closed and locked.

The insurance salesman is a man in the Living Room. The description is "An insurance salesman in a tacky polyester suit. He seems eager to speak to you." Understand "man" as the insurance salesman.

A briefcase is carried by the insurance salesman. The description is "A slightly worn, black briefcase."  Understand "case" as the briefcase.

The insurance paperwork is in the briefcase. The description is "Page after page of small legalese." Understand "papers" or "documents" or "forms" as the paperwork.

Instead of listening to the insurance salesman: 
    say "The salesman bores you with a discussion of life  insurance policies.  From his briefcase he pulls some paperwork which he hands to you.";
    move the insurance paperwork to the player.

ウィキペディアから引用した例

98
tovare

AppleScriptはそれにかなり近いですが、それは明らかにプラットフォームに依存します。

ITunesを開いてプレイリストを再生するためのスクリプトは次のとおりです

tell application "iTunes"
    activate
    play playlist "Party Shuffle"
end tell

ソース: AppleScriptの例

42
Chris Serra

「自然言語」でのプログラミングを促進するプロジェクトは、本質的に失敗する運命にあります。

--Edsger W.Dijkstra、 傷つく可能性のある真実をどのように伝えるのですか?

32

これは1980年代初頭頃の「次の大きな出来事」であり、最初の2年間は、4GL(第4世代言語)の新作の中で最高と思われる「NATURAL」でコーダーとして働いていました。データアクセス(この場合はADABASデータベースへの)を人間が読めるようにするために設計されました。

もちろん、そのタイプはまったく何もしませんでした。最終的に得られたのは、冗長で構造化されていないコードだけでした。これらの製品はどちらもまだ出回っていますが、聞いたことがありません。これは、それが行き止まりであったことを証明するものです。

実際、その時期には、「プログラミング」を超えて、2001年にインスピレーションを得たある種のAI天国に移行したいという一般的な願望があったようです。オラクルはコード生成に非常に熱心でした。興味を持って、必要なプログラムを自動的に生成し、プログラミングスタッフ全員を冗長にする製品として、マネージャーに販売されていた「最後の製品」と呼ばれる製品を覚えています。期待に応えていなかったようです;-)

SQLは元々、管理者がデータを直接クエリできるようにする方法として、一部の四半期で販売されていたことを覚えておく価値があります。私は基本的なSQLを学ぶためのコースに送られました(Rails-鉄鋼の種類)で実行された大規模な全国輸送組織で)彼らは基本的なクエリを置く計画を持っていたのでジュニア管理タイプが含まれていました彼らの手にある道具。

50年後には異なるかもしれませんが、プレイコーディングの現段階では、明確で曖昧な自然言語への近似ではなく、それらの目的のために設計された専用の構文によって最もよく仲介される思考と実装の特定の明確さが要求されます。最も近い近似は、おそらく物理学であり、主題の本質は、冗長な言葉遣いではなく、使用される数学(物理学のプログラミング言語を考えてください)にあります。

[〜#〜]追加[〜#〜]

COBOLの他に、PL/1もあったことを忘れていました。これは、NASAが人を月に乗せることを許可したことで、COBOLと同じくらい冗長であり、「マネージャーが読み取り可能」になるようにさらに努力したこともあります。だから今は誰も実際に聞いたことがないのです:-)

31
Cruachan

シェフ !誰でもレシピを読むことができますか?見よ hello world

Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes

Method.
Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. 
Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. 
Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. 
Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. 
Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. 
Pour contents of the mixing bowl into the baking dish.

それが深刻な答えではない場合は申し訳ありませんが、これはとても素晴らしいです。 :-)

18

すべての言語は「人間が読める」ものです。 :)他に誰かがそれを作成できるでしょうか?そうは言っても、DSLをサポートする言語は、 Boo のように非常に直感的です。

17
justin.m.chase

プログラミング言語を(冗長な)通常の言語のように読むことは、人々に常に合法的に会話することを要求するようなものです。余分な言い回しはすべて邪魔になります。

理想的なプログラミング言語は、可能な限り透過的な構文を持ち、プログラムの背後にある概念を際立たせる必要があります。明らかに、学習曲線が速いことと、構文が最小限であるがあいまいなこと(Perl、さらにはKを考えてください)との間にはトレードオフがあります。

15
Rob Walker

ルールのセットを作成することにより、このように Prolog で論理プログラミングを行うことができます。特定のドメインの文法を作成(またはダウンロード)し、ナレッジベースを作成してクエリを実行できます。文法を定義した後、次のようなことができます。

bob is a parent of tim.
mary is a parent of bob.

?- X is a grandparent of tim.
X = mary

?- jim is a parent of bob.
false
13
b3.

シェイクスピアプログラミング言語 はまだ言及されていないようです。

これらのプログラムはシェイクスピア劇のようにコード化されており、劇中の個々のキャラクターは数字を保持できる変数であり、劇中のさまざまなフレーズがキャラクターとそれらが保持する数字を操作します。たとえば、「Speak your mind」は、キャラクターに値を出力するように命令します。

13
Chris Vest

Applescript

tell application "Finder"
 set the percent_free to ¬
 (((the free space of the startup disk) / (the capacity of the startup disk)) * 100) div 1
end tell
if the percent_free is less than 10 then
 tell application (path to frontmost application as text)
 display dialog "The startup disk has only " & the percent_free & ¬
 " percent of its capacity available." & return & return & ¬
 "Should this script continue?" with icon 1
 end tell
end if
9
Bob King

SQL

SELECT name, address FROM customers WHERE region = 'Europe'
7
Martin

これは実際にホットな話題です。

手始めに-人間が読める形式とは何ですか?

中国語の読者はロシア語を読むことができず、その逆も同様です。たとえば、ドメインを絞り込んで、その周りの言語を設計できる処方箋を書いている中国の薬剤師に絞り込みます。そして、それは人間が読める形式になります。

言語などは ドメイン固有言語 の傘下に入るでしょう。

7
Johnno Nolan

私はCを読むことができます。つまり、人間が読める形式です(私は人間だからです)。それは平均的な人にはあまりにも簡潔です。プログラミング言語の一般的な概念は、コンピューターが特定の行でどのように動作するかについての情報を最大化することです。

これが、Rubyが非常に人気がある理由です。最小限のテキストで機能を最大化します。英語(またはその他の自然言語)は、かなり不正確で、情報が少ない/文字の言語です。

要約すると、それは次のとおりです。(i)以前に行われたこと、および(ii)既知の弱い考え。

7
Paul Nathan

はい。それは [〜#〜] cobol [〜#〜] と呼ばれ、人々は一般的にそれを嫌います。

6
Kirk Strauser

Inform 7 は、私が見た中で最も成功したそのようなシステムです。ここにある他の回答にリストされているより粗雑なシステムに比べて2つの利点があります。自然言語(インタラクティブフィクション)に特に適したドメイン用であり、従来の言語だけでなく、より多くの計算言語学の知識に基づいて入力コードのより洗練された分析を行います。たまたま中括弧などの代わりに英語の単語を使用するプログラミング言語の文法。

6
Darius Bacon

Perl、一部の人々は主張します。

print "hello!" and open my $File, '<', $path or die "Couldn't open the file after saying hello!";
5
Robert P

HyperTalk およびその子孫 AppleScript は、英語に類似するように設計されています。

5
Ken Liu

「自然言語プログラミング」をグーグル検索すると、たくさんの情報が見つかります(これが悪い考えである理由を含む)。

5
BoltBait

表現の明確さが重要です。

しかし、思考の明晰さははるかに重要です。

5
SquareCog

確かに、Erlang。

-module(listsort).
-export([by_length/1]).

 by_length(Lists) ->
    F = fun(A,B) when is_list(A), is_list(B) ->
            length(A) < length(B)
        end,
    qsort(Lists, F).

 qsort([], _)-> [];
 qsort([Pivot|Rest], Smaller) ->
     qsort([ X || X <- Rest, Smaller(X,Pivot)], Smaller)
     ++ [Pivot] ++
     qsort([ Y ||Y <- Rest, not(Smaller(Y, Pivot))], Smaller).

私は人間であり、プログラミング言語であり、それを読むことができます。どういう意味かわかりませんが、そこには英語の単語がたくさんあると思います。

(頬にしっかりと舌を出します。)

4
Robert S.

VBは私が考えることができる限り近いです:

MyLife.Sucks Then MyLife.End Else MyLife.Continue

4
Kon

DSLは非常に自然に見える場合があります。 この例 で作成された MGrammar :を参照してください。

test "Searching google for watin"
    goto "http://www.google.se"
    type "watin" into "q"
    click "btnG"
    assert that text "WatiN Home" exists
    assert that element "res" exists
end
4

[〜#〜] cobol [〜#〜] は管理者が読むことを目的としており、読みやすくするために「ノイズワード」があります。

面白いことに、それは冗長なDSLのように少し読みます。

3
Michael Easter

興味深い質問です。あなたの質問は「人間が簡単に読めるプログラミング言語はありますか?」、OR ELSE as "プログラミングに使用できる人間の言語はありますか?"。ここでの回答はすべて前者に焦点を当てているので、答えてみましょう。後者。

サンスクリット語について聞いたことがありますか?これは、ヒンディー語のような現代インドの言語の基礎となっている古代インドの言語です。

wiki /サンスクリット語

私は何年もの間、それがコンピュータの高級言語としてそのまま使用されるのに十分正確で完全であると聞いてきました。もちろん、サンスクリット語の命令を機械語に変換するにはコンパイラが必要です。私は台本を知っています。確かに、それは正確です(完全に音声なので、「どのように綴るのか」と尋ねる必要はありません)が、文法については十分に理解していません。

これは完全な逸話なので、私はこれの正確さを保証しません。これに関して私が知っていることを共有したかっただけです。 :-)

3
OceanBlue

ほとんどの人よりも人間が読める形式であることは、Adaの初期のセールスポイントの1つでした。 any言語で十分に複雑なタスクを実行するには、有能な開業医が理解する必要があるため、最近はばかげた議論だと思います。しかし、それはC構文言語のベジーザスを打ち負かします。その支配的なコーディングスタイルもこの効果を高めることができます。たとえば、ifステートメントのループを比較します。Ada:

if Time_To_Loop then
   for i in Some_Array loop
      Some_Array(i) := i;
   end loop;
end if;

C:

if (timeToLoop != 0) {
   for (int i=0;i<SOME_ARRAY_LENGTH;i++) {
      someArray[i] = i;
   }
}

Microsoftのようなハンガリアン記法を使用した場合、Cコードはさらに悪く見えますが、私はニースになろうとしています。 :-)

3
T.E.D.

ここでの一般的なコンセンサスに同意します。 「人間が読める」汎用プログラミング言語はほとんど悪い考えですが、人間が読めるドメイン固有言語は非常に価値があります。

REBOLには、DSLを作成するための優れたシステムがあります。

2
Gregory Higley

大学院生

ステートメントは1つだけです:"you --write me a program to do x"
Xのすべての値に有効であり、xを定義する必要がなく、プログラムの作成後に変更できるという利点があります。

インターンと呼ばれる商用の方言が利用可能です。開発コストは低くなりますが、機能することが保証されていません。

2
Martin Beckett

2つの構成は非常に異なる目的を持っていると思います。自然言語は非常に緩い構造であり、解釈の対象であり、それを理解するための高レベルの推論エンジンの存在を前提としています。そして、かなりの時間、誤って解釈されることが予想されます。プログラミング言語は、正確で明確な仕様を意図しており、解釈の余地はほとんどありません。

自然言語をプログラミング構造として使用することは、その変動性を調整し、その意味を明確にするという単純な問題であると考えるでしょう。しかし、それを実行すると、構文的にラップおよびパッケージ化される方法に関係なく、プログラミング言語のセマンティクスが残ります。

1
Jeff Kotula

Cobol そのようなものでした。

1
mike511

私見、人間の可読性はかなり主観的です。ただし、詳細を知りたい場合は、次のトピックを調べることをお勧めします。

  • Python-「特殊文字」(構文の{&}など)よりも空白を優先します。
  • Smalltalk-引数をメソッド名全体に広げることができます。
  • Ruby
  • 流暢なAPI /ドメイン固有言語
1
johnstok

まだ見ていません [〜#〜] abc [〜#〜] まだ言及されています。ユトレヒト大学の1年目のコンピュータサイエンスでそれと協力し、常に非常に「人間が読める」と考えていました(それが正確に意味するものは何でも)。

ドキュメント内のすべての単語のセットを収集するための機能語の例を次に示します。

   HOW TO RETURN words document:
      PUT {} IN collection
      FOR line IN document:
         FOR Word IN split line:
            IF Word not.in collection:
               INSERT Word IN collection
      RETURN collection
1
peSHIr

それは空白でなければなりません。読むものが何もない唯一のプログラミング言語: http://en.wikipedia.org/wiki/Whitespace_(programming_language)

1
Marc

Pythonを見たことがありますか?

1
SK9

プログラミング言語自体ではありませんが、 倹約的なXML速記言語(PXSL) は、XSLを、ほぼ間違いなくすでにあるよりもはるかに人間が読める形式(そして冗長性が少ない!)にします。

 <doc keywords="x y z">          doc -keywords=<<x y z>>
  <title/>                        title
  <body id="db13">                body -id=db13
    This is text.                   <<This is text.>>
  </body>
</doc>
1
Rahul

おかしい。 「人間が読める新聞はありますか?」と尋ねるアルファベットを想像してみてください。

あなたが何かを読むことができる前に、あなたは最初に読むことを学ぶ必要があります。

1
ThomasD

Windevは非常に簡単で、人間が読める言語です。 http://www.pcsoft.fr/windev/presentation.htm

0
DevTun

Visual Basic(および一般的にBASICベースの言語)は、人間の言語にほぼ近いものです。 Pythonもかなり近いと思います。これらを使用すると、十分に気を付ければ、コードを構造化英語として読み取ることができますが、あいまいさが多すぎるため、自然な英語コンパイラはありません。 。

0

私はCOBOL(そして私たちに近い... SQL)がうまくいかないことを知っていますが、これらは数十年前に設計されました。また、彼らは「英語」のプログラミング言語についての誇大宣伝を利用したと思います。また、適切な言語分析ではあまり進んでいないと思います。優秀なプログラマーが集まって言語を分析し、それを機能させることができれば、今日では英語(自然英語...言語)でプログラミングすることは可能だと思います。それは大きなプロジェクトですが、私たちが持っている計算能力でそれは可能です、私はかなり確信しています。言い換えれば、私は人々がCOBOLのために英語のようなプログラミングのアイデアを捨てる方法が好きではありません。 Cobolは初期のプログラミング言語であり、当時の設計者は、英語を参考にすることを決定しました。彼らはそれ以上のことを知らず、将来の複雑さについて何も考えていなかったため、英語で見慣れたものになると考えていました。多分それはマーケティング資料でもよさそうだった。彼らがCOBOLコンパイラに自然な英語を読ませようと一生懸命に努力したとは思わない。過去から学び、自然言語認識の適切なシステムを完成させるために今日真剣な努力が払われたなら、それはうまくいくと思います-しばらくして(おそらく数年の問題)。そしてそれを仮定すると、平易な英語でプログラムできるのは素晴らしいことではないでしょうか?もちろん、それは自己学習型(コンピューターはその場で学習する必要がある)でインタラクティブである必要があります(コンピューターは混乱したときにユーザーに選択肢の中から選択するように求めることができなければなりません)。

0
Rolf

Basicはその方向への最初のアプローチであり、別の返信で示されているように、Perlは、句読点をすべて無視すると、人間の言語にかなり近いコードも許可します。

私は非常に興味深い ラテン語をPerlに翻訳する方法に関する記事 (Perlモジュールもあります)を読みました。

したがって、人間の言語に十分な構造があり、あいまいさを回避するために十分な制限を導入する場合、実際に(ほとんど)人間の言語でプログラミングできます。

しかし、それは非常に冗長であり、読みやすく正確にするのが難しいため、実際には誰も実際には行いません。

0
moritz

どうしてそうするか?これは、コードを読み取る脳内のR2D2にとってはマシンに適していません。

0
yogman

Rebolが近づく

0

私は読みやすさのためにLOLcodeを言います:

HAI

私はVARITZ "Hai der Werld"を持っています、私は終わりました

可視変数

GIMMEH END

KTHXBYE

または

HAI

私は終わりました

目に見える「HaiderWerld2.0」

GIMMEH END

KTHXBYE

「ギムなしでは、物事はほんの一瞬しか起きないだろう」うめき声の情報についてはlolcode.comにアクセスしてください

0
EltaltlE

初期の頃、Microsoftは実際にWordBasic(長年、Visual Basic for Applicationsとして知られていました)をGUI言語に一致するように翻訳しました。次のような構成

If <condition> Then
  <something>
End If

オランダ語版のWordでは、次のように入力および表示されます。

Als <condition> Dan
  <something>
Einde Als

もちろん、理論的には、これにより、記録されたマクロを理解しやすくなりました。しかし、私はそれらの人々が最初にコードを見るだろうとは思わない...

0
Arjan

人間の言語と非常によく似た素晴らしいDSL(ドメイン固有言語)がたくさんあります。

良い例はスターバックスです。このようなDSLを書くことができます。これはRubyを使用していますが、多くの異なる言語で実行できます。RubyまたはPythonの利点はダックタイピングを使用できるように動的言語。



venti = Starbucks.new(:kind => :coffee, :size => :venti)
half_foam_venti = add_half_foam(venti)
serve(half_foam_venti)

しかし、私はRuby/Pythonが箱から出して最も近いかもしれないことに同意する必要があります。

ケント

0
ewakened

私は以前、OS/360オブジェクトコードを、OPマネージャーがバックグラウンドでペースを合わせて午前2時のダンプ分析を何時間もかけて生まれた才能を「読み取る」ことができました。

したがって、OBJECTコードは人間が読める形式としてカウントされると思います。

「自然言語」コードの主な問題は、それらが非常にあいまいになる可能性があることです。英語は特に、文を正しく解釈するために文化的、文脈的、そして気分に依存しています。これが、法的文書がそのような奇妙な高床式の言語で書かれている理由であり、英語であらゆる種類の正確さを達成する唯一の方法です。

これは、COBOLの大きな落とし穴の1つでした。 'IF A NOT = B OR C'のコンパイラの解釈は、カジュアルな読者の解釈とは正反対でした。つまり、C "!(A == B)|| A == C"でしたが、あるべきだと思うかもしれません!(A == B || A == C)。

他の大きな問題は罰でした。あなたの脳は句読点を「前処理」するので、あなたはそれを意識的なレベルで実際に「見る」ことはありません。期間 '。'初期のCOBOLでは、コードのブロックを区切るために不可欠でしたが、欠落した期間や余分な期間を見つけるのは非常に困難でした。はるかに悪いことを除けば、Cで「=」と「==」を見つけるのと少し似ています。

0
James Anderson

あなたがおそらく言及しているのは関数型プログラミングだと思いますか? F#は1だと思います。開発者としてはもっと複雑だと思います。

0
iceangel89

ノースウェスタン工科大学の研究およびインキュベーションセンターのWebサイトを確認してください http://www.jumpulse.com 人間の言語のプログラミング言語を確認するには新規、これは人間の言語でのみユーザーと通信します。 Newは、完全に自動化されたソフトウェアに基づいています。 10歳以上の方にご利用いただけるはずです。

0
user1035804

Business-Readable DSLs に関するMartinFowlerのエッセイを読む必要があります。

0
Pascal Thivent