Design patterns 跨语言标准库?
所以我们都知道,学习编程语言只是在平台上提高效率的一小部分。学习Java库比学习Java编程语言花费的时间要长得多,C#、JavaScript、Python、Ruby。。。等等 作为程序员,我们可以很容易地观察到for循环或数组在任何编程语言中都是for循环或数组。一旦你学习了这个概念,你就不需要重新学习它了,确保语法是不同的,但是重新学习这个概念是不费力气的。显然,标准库的情况并非如此,这意味着我们必须重新学习如何在我们使用的每个平台上执行常见任务,如文件操作、与数据库通信、建立网络,这既低效又痛苦,必须有更好的解决方法 W3CDOM是一个跨语言库的例子,它应该具有相同的函数名和相同的语义,而不管是哪种编程语言。W3CDOM很难使用,但至少在一种语言/平台上学习过之后,在其他语言/平台上也是如此 是否有一组跨语言库定义在任何地方,用于开发人员在2011年左右关心的最常见任务Design patterns 跨语言标准库?,design-patterns,cross-platform,components,Design Patterns,Cross Platform,Components,所以我们都知道,学习编程语言只是在平台上提高效率的一小部分。学习Java库比学习Java编程语言花费的时间要长得多,C#、JavaScript、Python、Ruby。。。等等 作为程序员,我们可以很容易地观察到for循环或数组在任何编程语言中都是for循环或数组。一旦你学习了这个概念,你就不需要重新学习它了,确保语法是不同的,但是重新学习这个概念是不费力气的。显然,标准库的情况并非如此,这意味着我们必须重新学习如何在我们使用的每个平台上执行常见任务,如文件操作、与数据库通信、建立网络,这既低效
澄清:我正在寻找在许多不同语言中都相同的API,而不是单一语言。例如,考虑读取文本文件的内容。我必须打开文件,阅读内容。。。等等,我将寻找一个API,其中函数在所有不同的语言中具有完全相同的名称、相同的参数、相同的顺序、相同的返回数据、相同的错误处理语义。我知道不同的编程模式,所以我同意API的OO版本,一个功能版本。。。等等。是的,有一些。Windows、MacOS X、Linux…:)
更严重的是,.Net和Java运行时都支持多种语言,因此如果您保持在它们所支持的语言范围内,那么您就可以保留您的库知识。您会想到以下几点:
- Microsoft.NET-与Microsoft生态系统紧密结合(但请记住Mono),与多种语言绑定,设计灵感来自Java。做你列出的大部分事情 <> > Qt-根非常牢固地在C++中,绑定到其他语言,而不是像.NET那样重量级,但是在*nix和MaOS上不觉得陌生。数据库支持非常原始,加密支持不存在
- 定义名称空间(Python中的模块)
- 收集实际函数使用情况的统计数据(静态分析+公共存储库spider)
- 从所有语言中获得最佳效果
- 分析、辩论和投票(或者只使用您喜欢的内容)——这需要用户故事数据库,其中包含常见问题、解决方法和摘要(CHM中的Python Cookbook曾经是此类摘要的一个很好的示例)。数据库还有一个非常重要的功能-检测冲突用例
- 同意许可证(或者只接受公共域是唯一的复制/粘贴兼容方式)
这是个好问题。这样的库对于每个开发人员来说都是一个很好的资产,但它不可能是标准的,因为标准库非常保守,理想的API需要时间才能稳定下来。向后兼容性也存在一个问题,即一旦代码进入标准库,它就不能更改。在Python社区中,有一个笑话说好的模块进入标准库就死了 这个库可以从一个社区/菜谱站点开始,而不是从一个库开始,它将专注于协作过程,因为一个人要说服所有其他人相信所选择的API是最好的并不容易。你真的必须这么做 我不能对其他语言说,但在Python社区中,有一个问题是将stdlib移出核心,以便它能够更快地发展。有一个新的方法,但这是不够的。该计划可以是:
因此,答案是——没有这样的跨语言库。因为双方之间没有足够的沟通。因为没有直观的平台可以做到这一点。一个有趣的问题。。。我认为,对于执行更专门功能的库来说,有更多的机会使用多语言绑定进行开发(您开始在各种web服务中看到这一点)。不幸的是,尽管开发人员努力使语言绑定尽可能自然,但所提供的抽象往往相当简单,并且经常感到“陌生”。也许更好的说法是,他们倾向于一成不变。例如,低级别的POSIXAPI实际上代表了标准库的一种最低公分母,但挑战在于,不同的语言(可以)在寻求使这些基本抽象对该语言“自然”的过程中以非常不同的方式处理它们。另一个问题(正如在以前的文章中提到的)是,就其本质而言,标准