有一种人类可读的编程语言吗?

我的意思是,有没有一种编码语言与人类风格编码? 例如:

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

我知道这不是很有用,但创build这样一个语法可能很有趣。

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. 

奇怪的是,尽pipe它的devise是可读的英文,大多数程序员完全破坏了这个奇怪的命名约定:

 SET VAR_00_MYVAR_PIC99 TO 10. EXECUTE PROC_10_MYMETHOD with 10, VAR_00_MYVAR_PIC99. 

LOLCODE怎么样?

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

简单本身!

通知7

通知7也许是我觉得最适合用人类语言devise的语言。 这是写作冒险游戏相当具体的应用程序。

它基于基于规则的语义,在这个语义中写了很多描述对象和位置之间关系的规则。 例如,下面的部分是一个Inform 7程序:

 "Hello Deductible" by "IF 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. 

从维基百科引用的例子

AppleScript与此非常接近,但显然依赖于平台。

这是一个用于打开iTunes并播放播放列表的脚本

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

来源: AppleScript示例

促进“自然语言”编程的项目本质上注定要失败。

– Edsger W.Dijkstra, 我们如何说出可能受伤的事实?

在20世纪80年代初期,这是“下一件大事”,而且我在开始的几年中,大部分时间都是作为“自然”编码工作的,这被认为是4GL(第四代语言)旨在使数据访问(在本例中为ADABAS数据库)可读的。

当然,它完全没有这种types。 所有我们结束了冗长的结构严谨的代码。 这两种产品都还在,但是你们从来没有听说过这些产品,这certificate了这是一个什么样的死胡同。

实际上在那个时期,似乎有一种普遍的愿望,就是要超越“编程”,变成某种2001灵感的AI天堂。 甲骨文非常热衷于代码生成,我还记得有些兴趣的产品被称为“最后一个”,作为一种产品,可以自动生成你想要的任何程序,并使所有的编程人员成为冗余。 似乎没有辜负人们的期望;-)

值得一提的是,SQL最初是在某些地方销售的,以便pipe理层直接查询他们的数据。 我甚至被派到一个学习基础SQL的课程(在一个运行在钢轨上的大型国家运输组织中),因为他们计划把基本的查询工具放在他们手中。 真是一场灾难。

也许它可能在50年后会有所不同,但是在现在的游戏编码阶段需要一定的思想和实现的清晰度,最好通过为这些目的而devise的专用语法进行调节,而不是对自然语言的任何不清楚和模糊的近似。 最接近的可能是物理,其中主题的本质是在math中使用(认为是物理的编程语言)而不是冗长的文字。

添加

我忘记了,除了COBOL之外,还有PL / 1,有时也被认为允许美国航空航天局把一个人放在月球上,这和COBOL一样冗长,而且更加努力地成为“经理可读的”。 这就是为什么没人真的听说过:-)

厨师 ! 任何人都可以阅读食谱吗? 看你好世界 !

 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. 

对不起,如果这不是一个严肃的答案,但这是真棒。 🙂

所有的语言都是“人类可读的”。 :)如何别人能够创造它? 话虽如此,支持DSL的语言可以非常直观,如Boo 。

把程序devise语言看作是一种(冗长的)正常语言,就像是要求人们一直在讨论法律语言。 所有额外的语言都会妨碍你的发展。

一个理想的编程语言应该有尽可能透明的语法,让程序背后的概念脱颖而出。 显然,在学习过程中有一个快速的学习曲线,而且语法最简单却很模糊(比如Perl,甚至K)。

通过创build一组规则,就可以像这样在Prolog中进行逻辑编程。 您可以为特定的域创build一个语法(或下载一个),创build一个知识库,然后查询它。 定义你的语法后,你可以做如下的事情:

 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 

我看到莎士比亚的编程语言还有待提及。

这些节目编码看起来像莎士比亚戏剧,戏剧中的个性化angular色是可以容纳数字的variables,剧本中的各种短语操纵angular色和数字。 例如,“说出你的想法”命令一个angular色输出他的价值。

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 

我可以读C.这意味着它是人类可读的(因为我是一个人)。 这对一般人来说太简单了。 编程语言的一般概念是最大限度地提供有关计算机如何在特定行中运行的信息。

这就是为什么Ruby如此受欢迎; 它以最小的文本最大化function。 英语(或任何其他自然语言)是一个相当不精确,低信息/字符的语言。

总之,它是:(i)之前完成的,(ii)已知的较弱的想法。

这实际上是一个热门话题。

对于初学者 – 什么是人类可读?

中国读者不能阅读俄文,反之亦然。 例如,你把你的领域缩小到中国的药剂师,写一个处方,你可以devise一个语言。 这将是人类可读的

如语言将落在域特定语言的保护下 。

SQL

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

是。 这就是所谓的COBOL ,人们通常会厌恶它。

通知7是我见过的最成功的这样的系统。 与其他答案中列出的粗糙系统相比,它有两个优点:它适用于特别适用于自然语言(交互式小说)的领域,并且基于更多的计算语言学知识对input代码进行了更精彩的分析,而不仅仅是一个常规编程语言语法恰巧使用英文单词而不是大括号等。

Perl,有人说。

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

做一个谷歌search“自然语言编程”,你会发现很多信息(包括为什么这是一个坏主意)。

expression的清晰度是重要的。

但是,清晰的思想远远更重要。

HyperTalk及其后代AppleScript被devise为与英语类似。

VB和我所能想到的一样接近:

如果MyLife.Sucks Then MyLife.End Else MyLife.Continue

当然,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). 

我是一个人,是一种编程语言,我可以读它。 我不知道这是什么意思,但我想,在那里我看到很多英语单词。

(舌头紧紧地贴在脸颊上。)

DSL可以是非常自然的。 看到用MGrammar创build的这个例子 :

 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 

COBOL的目的是被pipe理者阅读,并且有“噪音词”使其更具可读性。

有趣的是,它有点像一个详细的DSL。

比大多数人更可读的是Ada的早期卖点之一。 现在我觉得这是一个愚蠢的说法,因为任何语言中任何足够复杂的任务都需要有能力的实践者去理解。 但是,它却击败了C语言语言中的bejeezus。 其主导的编码风格也可以提高这种效果。 例如,比较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; } } 

如果我使用像微软这样的匈牙利符号,C代码会更糟糕,但是我正在努力保持良好状态。 🙂

有趣的问题。 你的问题可以被理解为“ 是否有任何人类易于阅读的编程语言 ?”,或者“ 有没有可用于编程的人类语言 ?”。 这里所有的答案都集中在前者,所以让我试着回答后者。

你听说过梵文吗? 印度语是印度语现代印度语的基础。

维基/梵文

我已经听了好几年了,它已经足够精确和完整,可以在计算机上用作高级语言。 当然,你需要一个编译器来将梵文指令转换成机器语言。 我知道脚本,是的,它是精确的(完全是拼音,所以你永远不必问“你怎么拼写”),但我不太了解这个语法。

这是完整的轶事,所以我不保证这个准确性。 只是想分享我所知道的这个。 🙂

我同意这里的一般共识。 “人类可读的” 通用编程语言大多是一个坏主意,但人类可读的领域特定语言是非常值得的。

REBOL有一个伟大的系统来创buildDSL。

GradStudent

它只有一个声明: “你 – 给我写一个程序做x”
它对于X的所有值都是有效的,并且具有这样的优点,即x不必被定义,并且在程序写入后可以被改变。

一个商业方言可以称为实习生:开发成本较低,但不能保证工作

科博尔就是这样的。