我真的很喜欢编程语言设计。有时,我认为我的语言项目及其潜在用户将从全面的标准文档中受益。我看过许多语言标准,从非常正式的(C ++)到相当非正式的(ECMAScript),但是我无法真正理解如何分解内容并组织这样的文档,即使我认为我总体上很擅长技术写作。
我应该像是一本很长的教程,还是更像是一份正规的数学论文来编写它?如果我正在与参考实现一起开发它,如何使其保持最新状态?我是否应该放弃并将实现和文档视为事实上的标准?此外,拥有标准真的有任何重大好处吗?要求标准是否意味着该语言不必要地复杂?
我真的很喜欢编程语言设计。有时,我认为我的语言项目及其潜在用户将从全面的标准文档中受益。我看过许多语言标准,从非常正式的(C ++)到相当非正式的(ECMAScript),但是我无法真正理解如何分解内容并组织这样的文档,即使我认为我总体上很擅长技术写作。
我应该像是一本很长的教程,还是更像是一份正规的数学论文来编写它?如果我正在与参考实现一起开发它,如何使其保持最新状态?我是否应该放弃并将实现和文档视为事实上的标准?此外,拥有标准真的有任何重大好处吗?要求标准是否意味着该语言不必要地复杂?
Answers:
我发现Java语言规范既正式又易于阅读,而且我认为它具有合理的结构。一些W3C规范也可能是很好的例子。
进行正式工作可以帮助您降低语言复杂性并查看具体案例。
标题转储:源编码,词法分析,基本类型,文字,运算符,表达式,简单语句,条件,循环,函数(定义和调用),类型声明,模块,编译单元,变量作用域,各种名称解析(例如导入,方法),内存模型,副作用,键入,并发…
阅读很多并保持简单
设计一种新的语言很困难。真的很难。但是最终,如果它流行起来并真正解决人们以优雅的方式遇到的问题,那将是非常令人满意的。
正如我在评论中提到的,出于以下原因,我建议您阅读Martin Fowler的“ 领域特定语言”:
至于如何编写规范,请考虑一下您的受众。显然,在使用键盘设计语言之前,您会仔细考虑其意图。
如果它是一种替代JavaScript的新的解释语言,那么您将需要一种放任自流的方法,以使Web开发人员的注意力范围有限,并希望立即获得结果-或尽可能快地获得结果。
如果要在下一次前往Titan的任务中使用它,那么显示每个组件行为的正式形式证明的极其详细的规格将是最低的入门级别。
因此,这不是一件简单的事情。要接近该规范,您可能会获得很多创建语言的经验,并与每天实际使用它们的人员合作,会更好。如果您有愿意的受害者...呃...开发人员,他们在工作中可能需要一些时间来学习您的语言,那么他们可以为您提供反馈,让他们使用它。
简而言之,请保持简单,更多的人会使用它。
Common Lisp和Haskell具有语言标准。Ruby和Python具有实现和文档。因此,我想说一种语言标准不是必需的,但是如果您希望所设计的语言有多个实现,那么它可能会有所帮助。另一方面,如果您期望语言定义发生重大变化,那么该标准为时过早。