如何对编程语言进行需求分析?

源自 此楼

编程语言在功能需求(比如上面的“支持多个数相加相乘”)之外,还有反馈、性能、互操作等等。不知已有的成熟语言项目是否有这方面的文档。

如果能用相对标准一致的描述方式对各编程语言进行需求分析,比较它们之间的异同也许会更方便,也可以对新语言的研发提供更全面的参考。wiki里 仅比较了笼统的一些特性:

那肯定是要看你想要的应用场景

用例(use case)分析的确是重要一步。API或框架的需求分析应有相通之处。

@chinesebear 请问参与过的语言项目如deeplang等一般如何在开始设计前进行需求分析呢?或者有何建议?

尝试回答一下。一般情况下,语言目标要先确认,就是确定语言要解决的问题,这个比较重要,是后面设计和实现的依据。rust解决内存安全问题,Java解决内存自动管理的问题,deeplang目标解决资源受限的情况下如何节省内存的问题。目标->各个场景的分析->竞品分析->找到还没有解决的问题。一切清晰后,再开始语言设计和实现。
语言目标很重要!!!

2 个赞

deeplang不是和C语言的应用场景重叠?

很同意目标的重要性。
请问deeplang在支持资源有限的平台和节省内存方面有作为对比目标的语言吗?另外,deeplang 在前端(语法、反馈等)有与此需求相关的设计吗?

供参考,Eiffel 语言作者在《 Eiffel: The Language》一书开篇对其目标的简介:


1 个赞

这是 《The Go Programming Language》(原文)前言中提到的语言目标。如有其他资料请补充。

所有的编程语言都反映了语言设计者对编程哲学的反思,通常包括之前的语言所暴露的一些不足地方的改进。Go项目是在Google公司维护超级复杂的几个软件系统遇到的一些问题的反思(但是这类问题绝不是Google公司所特有的)。

正如Rob Pike所说,“软件的复杂性是乘法级相关的”,通过增加一个部分的复杂性来修复问题通常将慢慢地增加其他部分的复杂性。通过增加功能、选项和配置是修复问题的最快的途径,但是这很容易让人忘记简洁的内涵,即从长远来看,简洁依然是好软件的关键因素。

简洁的设计需要在工作开始的时候舍弃不必要的想法,并且在软件的生命周期内严格区别好的改变和坏的改变。通过足够的努力,一个好的改变可以在不破坏原有完整概念的前提下保持自适应,正如Fred Brooks所说的“概念完整性”;而一个坏的改变则不能达到这个效果,它们仅仅是通过肤浅的和简单的妥协来破坏原有设计的一致性。只有通过简洁的设计,才能让一个系统保持稳定、安全和持续的进化。

deeplang在前端和后端都围绕在资源受限的情况下如何安全的省内存?deeplang对比baseline是rust、c,我们的内存管理系统比C复杂,比rust简单。

关于应用场景的话,C的应用场景更宽泛一些,不仅是资源受限的情况下才使用。deeplang和C的区别是deeplang是自动管理内存,c是手动。deeplang的内存管理系统是基于引用+所有权的思想。我们也在探索新的设计思想。

也就是带GC引擎,类似于Go。。。其实现在即便是单片机也是在32位大量普及,资源很少的情况越来越少了,大多数32位单片机的硬件资源跑microPython,lua,JavaScript等带虚拟机的脚本语言都没什么问题了,这也是未来的趋势