使用"自然"语言编写代码会更好吗?

Moh*_*oud 6 nlp

我最近看到了一种名为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
Run Code Online (Sandbox Code Playgroud)

我的问题不是关于语言本身,而是我们需要这样的语言,他们是否更容易编写代码?

Gor*_*son 19

代码可能看起来像自然语言,但它实际上只是具有不同关键字的常规计算机代码.在你的例子中,I want可能是同义词new.这并不是说你可以直接使用自然语言make me a window而是说(如果可以的话,事情会变得更加丑陋......).

让我们仔细看看你的代码和语言含义:

i want window and the window title is Hello World. 
Run Code Online (Sandbox Code Playgroud)

i want表示new,and表示参数列表的开头.在要创建的对象上the <type_name> <member_name> is设置实例变量member_name.请注意,您必须写type_name两次.

i want button and button caption is Close.
and button name is btn1.
Run Code Online (Sandbox Code Playgroud)

.结束声明.但是,您可以通过启动下一个语句来"链接"对象的方法调用and.另外,如何引用名为变量Close而不是字符串的变量"Close"?哎呀,我们甚至用普通英语来解决这个问题:"说出你的名字"和"说出你的名字"之间的区别是什么?

btn1 mouse click. instructions are
   you close window
end of instructions
Run Code Online (Sandbox Code Playgroud)

mouse click是一个包含空格的标识符,应该是mouseClick.instructions are定义一个lambda(参见isvs. 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();
}
Run Code Online (Sandbox Code Playgroud)

看看每一行如何映射到前一个示例中的对应部分,但更直接地说明了意图?自然语言可能有利于人类执行,但是对于精确的规范来说,它非常难以使用.

你越努力让英语轻松而清晰地传达这些想法,它就越像我们已经拥有的编程语言.简而言之,编程语言尽可能接近自然语言,而不会失去清晰度和简洁性.:d

  • 当然,你的翻译神奇地拉出了按钮应该在窗口中的事实.完全没有说明(虽然我相信是正确的).这是用自然语言编程的*真正问题之一:有大量未说明的假设完全改变了应该发生的事情.我会慈善,称之为"棘手的人工智能挑战"...... (8认同)

Don*_*ows 13

由于编程的基本困难是让你的想法足以告诉计算机该做什么,使语言更"自然"是非常不可能让非程序员更容易理解; 语言本身从来就不是真正的问题.更重要的是,所有自然语言的混乱都无助于任何程序员(值得一提)他们正在做的事情,为什么要添加呢?

或者我们可以拥有一种真正的自然语言编程语言,包括"嗯","呃"和"哦,我真的不知道"?:-)

  • 您提到的自然编程语言是客户用来向程序员表达意图的语言.它保留的关键短语包括"自动化我们的过程","满足所有要求"和"提高生产力".这些可以或可以不与具体对象结合使用以进一步描述意图.在大多数情况下,它被用作查询语言,最终函数评估"这将花费多少?" 或者"需要多长时间?" 在某些情况下,省略查询并使用断言,例如"这必须在两个月内完成". (5认同)

lam*_*mas 5

您在上面向我们展示的编程语言非常冗长(因为它似乎比COBOL更多).

这带来了几个问题:

  • 做简单的事需要很长的代码.
  • 代码变得难以维护
  • 找出代码的作用需要很长时间