我最近看到了一种名为supernova的编程语言,他们在网页上说:
超新星编程语言是一种现代脚本语言
第一部分介绍使用直接小说描述编程的概念
清晰的纯人类语言子集.
你可以编写如下代码:
i want window and the window title is Hello World. i want button and button caption is Close. and button name is btn1. btn1 mouse click. instructions are you close window end of instructions
我的问题不是关于语言本身,而是我们需要这样的语言,他们是否更容易编写代码?
代码可能看起来像自然语言,但它实际上只是具有不同关键字的常规计算机代码.在你的例子中,I want
可能是同义词new
.这并不是说你可以直接使用自然语言make me a window
而是说(如果可以的话,事情会变得更加丑陋......).
让我们仔细看看你的代码和语言含义:
i want window and the window title is Hello World.
i want
表示new
,and
表示参数列表的开头.在要创建的对象上the
设置实例变量member_name
.请注意,您必须写type_name
两次.
i want button and button caption is Close. and button name is btn1.
.
结束声明.但是,您可以通过启动下一个语句来"链接"对象的方法调用and
.另外,如何引用名为变量Close
而不是字符串的变量"Close"
?哎呀,我们甚至用普通英语来解决这个问题:"说出你的名字"和"说出你的名字"之间的区别是什么?
btn1 mouse click. instructions are you close window end of instructions
mouse click
是一个包含空格的标识符,应该是mouseClick
.instructions are
定义一个lambda(参见is
vs. are
关键字混淆造成麻烦吗?).you close window
电话window.close()
.end of instructions
是一个lambda的结尾.所有这些都比他们需要的更长.
还记得吗?这些只是我对语法的猜测,这可能是完全错误的.看起来还很简单?如果是这样,尝试编写一个更大的程序而不破坏任何这些规则,以及您需要的其他规则来定义条件逻辑,循环,类,泛型,继承或其他任何您需要的东西.您所做的只是将常规编程语言中的符号更改为"自然语言"等价物,这些等价物难以记忆,不必要的冗长和更模糊.
试试这个翻译:
var myWindow = new Window( title="Hello World" ); myWindow.addButton( new Button( caption="Close", name="btn1" ) ); btn1.onMouseClick = function() { myWindow.close(); }
看看每一行如何映射到前一个示例中的对应部分,但更直接地说明了意图?自然语言可能有利于人类执行,但是对于精确的规范来说,它非常难以使用.
你越努力让英语轻松而清晰地传达这些想法,它就越像我们已经拥有的编程语言.简而言之,编程语言尽可能接近自然语言,而不会失去清晰度和简洁性.:d
由于编程的基本困难是让你的想法足以告诉计算机该做什么,使语言更"自然"是非常不可能让非程序员更容易理解; 语言本身从来就不是真正的问题.更重要的是,所有自然语言的混乱都无助于任何程序员(值得一提)他们正在做的事情,为什么要添加呢?
或者我们可以拥有一种真正的自然语言编程语言,包括"嗯","呃"和"哦,我真的不知道"?:-)
Edsger W. Dijkstra,关于"自然语言程序设计"的愚蠢.我没有什么可补充的.
您在上面向我们展示的编程语言非常冗长(因为它似乎比COBOL更多).
这带来了几个问题:
做简单的事需要很长的代码.
代码变得难以维护
找出代码的作用需要很长时间