我对语言设计感兴趣,总的来说,我可以轻松地推断出广为人知的功能(例如继承,多态性,委托,lambda,捕获,垃圾回收,异常,泛型,方差,反射等),它们在特定的语言,可能的实现方式,限制等。
在过去的几个月中,我开始阅读Rust的知识,Rust具有一个所有权系统,该系统通过强制对象生存期为静态可验证的来确保内存安全和确定性资源管理。从普通用户的角度来看,我几乎可以立即使用该系统。
但是,从语言设计师的角度来看,我花了一段时间才意识到为什么Rust中的事物确实是这样。我无法立即理解所有权系统受到某些限制的原因,直到我强迫自己提出一些案例,如果这些系统不具备这些方面,就会侵犯系统的完整性。
我的主要问题与Rust及其所有权没有任何关系-但如有需要,可以随时在评论/答案中使用它作为示例。
语言设计师在设计新功能时,会使用什么方法或过程来确定该功能正常工作?
“新”是指它不是已经用现有语言测试过的东西(因此,大部分工作已由其他设计师完成)。“正常工作”是指该功能可以正确解决预期的问题,并且具有防弹功能。“合理地防弹”是指不能用该语言或该语言的特定子集(例如,没有“不安全”代码的子集)编写任何会破坏功能完整性的代码。
从某种意义上说,这是一个反复试验的过程,即您提出了一种简单形式的功能,然后尝试找到方法来对其加以违反,如果成功违反了它,则对其进行修补,然后重复进行?然后,当您无法想到任何其他可能的违规时,您希望什么都没有了,可以称之为一天?
还是有一种正式的方法(从字面上的数学意义上)实际证明您的功能有效,然后使用该证据从一开始就确信该功能正确(或基本上正确)?
(我应该提一下,我具有工程学背景,而不是计算机科学。因此,如果我错过了CS人士显而易见的东西,请随时指出。)