我最近看到了一种名为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
我的问题不是关于语言本身,而是我们需要这样的语言,是否使编写代码变得更容易?
答案 0 :(得分:19)
代码可能看起来像一样的自然语言,但它实际上只是具有不同关键字的常规计算机代码。在您的示例中,I want
可能与new
同义。这并不是说你可以直接使用自然语言而是说make me a window
代替(如果可以的话,事情会变得更加丑陋......)。
让我们仔细看看你的代码和语言含义:
i want window and the window title is Hello World.
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.
.
结束陈述。但是,您可以通过使用and
启动下一个语句来“链接”对象的方法调用。另外,如何引用名为Close
的变量而不是字符串"Close"
?哎呀,我们甚至用普通英语来解决这个问题:“说出你的名字”和“说出你的名字”之间的区别是什么?'
btn1 mouse click. instructions are
you close window
end of instructions
mouse click
是包含空格的标识符,应为mouseClick
。 instructions are
定义了一个lambda(请参阅导致问题的is
与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
答案 1 :(得分:13)
由于编程的根本困难在于让你的想法足以告诉计算机该做什么,使语言更“自然”是非常不可能让非程序员更容易理解;语言本身从来就不是真正的问题。更重要的是,所有自然语言的混乱都无法帮助任何程序员(值得这个名字)和他们正在做的事情,为什么要添加呢?
或者我们可以拥有一种真正的自然语言编程语言,包括“嗯”,“呃”和“哦,我真的不知道”? : - )
答案 2 :(得分:7)
答案 3 :(得分:5)
您在上面向我们展示的编程语言非常详细(因为它看起来甚至超过了COBOL)。
这有几个问题:
答案 4 :(得分:3)
他们是否更好是意见,但这看起来像COBOL和BASIC的一些变异交叉,这绝对是非常糟糕的。
所以在我看来,没有。我认为仍然使用可读动词/形容词/名称的某些点对点语言更好(C ++,C#,PHP等是我的首选语言)。
有些语言开始变得过于高级和/或冗长,使得实际逻辑如此抽象,很难知道它是什么做的。有些太低级和简短,迫使你明确说出你想做的一切。可读性和简洁性之间的平衡,以及功能和灵活性,是最适合开发的。
答案 5 :(得分:3)
我会很勇敢,并在这里提出略有不同的意见。
除了在问题中提出的内容之外,我还没有看到过这种语言的任何内容,但是看看我不得不说它对于非程序员来说可能更具可读性。另一方面,对于程序员而言,它不会损害可读性,但它也无济于事,因为我们习惯于阅读代码。在实际的开发方面,我认为必须输入这么多额外的内容是非常可怕的,特别是如果你习惯于简洁的关键字和像我们程序员这样的结构。
但让我们想象一下,语音识别实际上是准确的远期未来。我认为通过与您的计算机交谈,这样的语言将更容易编码,我不想指定每个括号等。不必这样做有助于保持思路。
总结:
答案 6 :(得分:3)
person.eBusiness[text.this.author].like(language.supernova.idea.reverse);
language.English[ambiguous[very]];
person.eBusiness.suggest(create(language.Codetalk));
language.Codetalk.grammar.inspiration=language.programming.grammar;
language.Codetalk[new,better,ambiguous[not]];
if(person.all.use(language.Codetalk)){
person.all.understand(person.all.communication);
};
question(language.Codetalk.idea[good]);
答案 7 :(得分:2)
在我看来,使用那种“人类语言”并没有什么用处,因为你仍然需要语法和特殊的单词。你必须学习它们,因为这是必要的,学习“编程语言”并不困难,“编程语言”具有很多优点,因为它面向机器的结构,而不是人类的思维方式。 / p>
如果你想编写好的程序,你需要考虑机器的工作方式,而编程语言在表达这种思维方式方面肯定比人类语言更强大。
答案 8 :(得分:1)
这些语言的一个问题是:假设您使用这种语言编写应用程序的重要部分,然后需要不同的人来维护,扩展或以其他方式更改代码。
你打算做谁?街上没有人会知道,其他人会有一个陡峭的学习曲线
我们还假设您有一个关于如何完成任务语言的问题,您在哪里转向?
答案 9 :(得分:0)
完美的编程语言就是英语的精确副本。你可以告诉你的电脑做一些事情,就像你可以订购咖啡或给你的课堂作业一样。但是,这种语言实施起来非常困难(先进的A.I是必要的)。