科学与工程

功能性

进入更多的意见领域,软件开发中使用的工具、语言和方法,更多的是宗教信仰,而不是客观现实。源代码就像书写散文。每个人都持有什么是好的之意见 - 什么是已经被沟通的,有时,比起它如何被沟通更不重要。

我们必须承认,一旦选择接受了一方,那么至少在一个人的眼中会认为这是错误的选择。但是,至少有一个大型的论证主体存在我们选择的背后。该协议让卡尔达诺可在Haskell中实施。

用户界面已封装在Electron的叉子中,我们称之为代达罗斯(Daedalus)。我们选择在可能的情况下使用网络架构模型,对于我们的数据库,我们选择了使用RocksDB键值范例

从组件层面来看,这种摘要意味着更简单的维护,更好的技术可以在稍后的稍微地努力下被取代,我们的堆栈有一部份与Github和Facebook的开发工作相关。

使用WebGuI可以让我们利用React和数十万JavaScript开发人员已理解的工具进行开发前端功能。使用网络架构,意味着组件可以被视为服务,且安全模型是明智的。

选择Haskell进行协议开发是最困难的选择。即使在功能世界,有更充足的选择。考量更灵活性和不透明面,有诸如Clojure、Scala和F#之类的语言,它们受益于Java和.Net生态系的巨大文库,同时保留了一些功能编程的最佳特征。

有更多学术导向的语言,如Agda)和Idris,与技术密切相关,可以强制验证正确性。然而,它们缺乏合理的文库,并且具有较低阶的开发经验。

对于卡尔达诺而言,选项剩下Ocaml和Haskell。 Ocaml是一个很好的语言,拥有一个庞大的社区、良好的工具、合理的开发经验和通过Coq的正式验证空间的伟大遗产23。那我们为什么选择Haskell呢?


Footnotes

23: 此外,IOHK实际上确实有一个项目在Ocaml中被称为Qeditas,是我们从匿名Bill White中继承的。