想象一下您家的水压出了点问题。 您必须致电管道工服务。 他们说,有一个诚实,干练,有水暖博士学位的人,但是……他的英语说得不好。 他来自塔吉克斯坦,只会说流利的塔吉克语。 但是,恰好您在大学学习过塔吉克语,所以您说他们立即派了这个家伙。
当他到达时,您(在塔吉克语中)描述问题,然后他开始工作。 很快,他发现了问题并试图向您报告,显然是在等待反应。 但是由于某种原因,他不使用塔吉克语进行举报,而是使用英语。 哪个……他真的不知道。 如果您在塔吉克语中回答您不理解的内容,他将不会切换到塔吉克语; 他只会大声重复同一句话。
这根本无助于建立对话框。
没有人知道他为什么总是选择用他的口语而不是自己的口语来回答。 你所做的。 这真是令人讨厌,但这就是事情的运作方式。 他们一直都是这样。 他所说的基本上是一门糟糕的英语,加上专业的行话和塔吉克的ob亵行为。 看起来像这样:
在函数&#39;int main&#xff08;&#xff09;&#39;中&#xff1a;19:16&#xff1a;错误&#xff1a;无法将&#39;std :: ostream {aka std :: basic_ostream }&#39;左值绑定到&#39;std :: basic_ostream &&&#39;在/中包含的文件中usr / include / c &#43;&#43; / 4.9 / iostream&#xff1a;39&#xff1a;0&#xff0c;来自2&#xff1a;/usr/include/c&#43;&#43;/4.9/ostream:602:5&#xff1a;注意&#xff1a;初始化&#39;std :: basic_ostream <_CharT&#xff0c;_Traits>&#xff06;std的参数1 :: operator <<&#xff08;std :: basic_ostream <_CharT&#xff0c;_Traits> &&&#xff0c;const _Tp&#xff06;&#xff09;[with _CharT &#61; char; _Traits &#61; std :: char_traits ; _Tp &#61;元素]&#39;运算符<<&#xff08;basic_ostream <_CharT&#xff0c;_Traits> && __os&#xff0c;const _Tp&#xff06;__x&#xff09;
好的&#xff0c;这不再是关于管道的事情。 实际上&#xff0c;它从来都不是关于管道的。 关于我们如何与机器进行通信。 编程语言是我们用来告诉它做什么的一种方法&#xff0c;但是当出现问题时&#xff0c;机器会尝试用英语说出来。 尽管英语擅长处理正式语言&#xff0c;但它们的英语说得不好。 大概&#xff0c;用正式语言写的人应该能够毫无问题地读回它。 如果编译器或解释器将以其获得命令的相同语言进行响应&#xff0c;这会更好吗&#xff1f;
如果没有塔吉克水管工&#xff0c;这个想法似乎不那么令人满意。
到目前为止&#xff0c;我所知道的唯一一种以与您编写代码相同的语言来报告错误的语言是Erlang。 如果您了解更多信息&#xff0c;请在下面的评论部分中告诉我。
这是“ Programming Erlang ”中的一个简单示例&#xff1a;
1> Point &#61; {point, 10, 45}. 2> {point, C, C} &#61; Point. &#61;ERROR REPORT&#61;&#61;&#61;&#61; 28-Oct-2006::17:17:00 &#61;&#61;&#61; Error in process <0.32.0> with exit value: {{badmatch,{point,10,45}},[{erl_eval,expr,3}]}
粗体字的字符串是错误消息&#xff0c;其余只是解释器的前言。 确实&#xff0c;对于休闲读者来说&#xff0c;这并不完全方便。 您必须知道Erlang才能读取其错误。 但是由于您仍然需要了解Erlang才能编写导致它们的代码&#xff0c;所以很好。
替代方案要糟糕得多。 使用非正式和非标准化的错误消息传递&#xff0c;您不仅必须知道编程语言本身&#xff0c;而且还必须知道其错误消息传递Pidgin。 每个C &#43;&#43;从业人员都可以确认阅读STL消息本身就是一门艺术。 它需要知识&#xff0c;耐心&#xff0c;决心和偶尔的水晶球&#xff0c;才能对报告的问题有深刻的理解。
例如&#xff0c;上面的错误消息显示为“对不起&#xff0c;我无法为您打印出一个元素&#xff0c;因为它的类型没有<<操作符。”
通常&#xff0c;可以使用某种语言来建立对话框。编程语言是一种不幸的豁免。 从历史上看&#xff0c;告诉计算机做什么而不是相反是更重要的。 当您编写小型单线程程序时&#xff0c;您可以希望不会有任何错误&#xff0c;因此您根本不需要报告。 错误报告始终被视为辅助功能。
但是&#xff0c;Erlang旨在构建高度复杂的分布式系统。 错误不仅极有可能发生&#xff0c;而且是域本质所固有的。 一切可能出错的最终都会。 而且您最好为此使用一种体面的报告语言。
实际上&#xff0c;您可以拥有一个对话框&#xff0c;意味着用同一种语言编写代码并接收错误&#xff0c;这使Erlang不仅是编程&#xff0c;而且是一种真正的计算机语言。
From: https://hackernoon.com/why-is-erlang-the-only-true-computer-language-4c7d1f195a02