Language agnostic 为什么高级语言中缺少这么多数据结构?

Language agnostic 为什么高级语言中缺少这么多数据结构?,language-agnostic,data-structures,programming-languages,Language Agnostic,Data Structures,Programming Languages,为什么高级语言(Javascript、PHP等)不提供数据结构,如链表、队列、二叉树等作为其标准库的一部分?是出于历史/实践/文化原因,还是我缺少了更基本的东西。我的直觉回答是,这些语言将更高级的数据结构交给程序员自己实现。这允许程序员根据软件解决的问题定制特定的数据结构。通常在一个组织中,这些DSE中的许多都打包在库中,以便在大规模应用程序中重用 链表 在大多数动态语言中,可以相当容易地实现链表,但它们并没有那么有用。在大多数情况下,动态数组(大多数动态语言都内置了对它的支持)更适合:它们具有

为什么高级语言(Javascript、PHP等)不提供数据结构,如链表、队列、二叉树等作为其标准库的一部分?是出于历史/实践/文化原因,还是我缺少了更基本的东西。

我的直觉回答是,这些语言将更高级的数据结构交给程序员自己实现。这允许程序员根据软件解决的问题定制特定的数据结构。通常在一个组织中,这些DSE中的许多都打包在库中,以便在大规模应用程序中重用

链表

在大多数动态语言中,可以相当容易地实现链表,但它们并没有那么有用。在大多数情况下,动态数组(大多数动态语言都内置了对它的支持)更适合:它们具有更好的使用率和缓存一致性,索引查找性能更好,插入和删除性能也更好。在应用程序级别,没有多少用例真正需要链表

排队

使用动态数组轻松实现

二叉树

在大多数动态语言中,二叉树很容易实现。二进制搜索树和以往一样,实现起来很麻烦,但很少需要。哈希表将为您提供大致相同的性能,并且对于许多用例通常会更好。大多数动态语言都提供一个内置的哈希表(或字典、映射、表或任何你想称之为哈希表的东西)


了解这些基本的数据结构是非常重要的,如果您正在编写低级代码,您会发现自己正在使用它们。在使用大多数动态语言的应用程序级别,哈希表和动态数组确实涵盖了95%的数据结构需求。

对于语言,“高级”有很多定义,但在本文中,我将引用为特定域专门构建的语言(任何人?)。此类“特定域”通常在范围上受到限制,例如:网页构造、报告编写、数据库查询等。在有限的范围内,通常只需要最基本的数据结构

有必要吗? 我们考虑JavaScript的情况。这种语言的范围最初非常有限,是一种脚本语言,而不是在web浏览器的范围内运行。它主要关注在其他静态网页上提供少量动态行为。此外,该技术的局限性使得在该环境中编写大型组件(尤其是性能和沙箱模型)不切实际

由于Javascript仅限于解决“小问题”,因此几乎不需要一组丰富的数据结构。随着数据结构的发展,Javascript的映射非常灵活。您必须记住,Basic和FORTRAN在只提供数组方面走了很长的路——映射比这灵活得多。Javascript似乎正在经历转换,从沙箱中逃脱。一些雄心勃勃的系统正在浏览器内外用Javascript构建。技术也在不断进步,以跟上时代的步伐(看看新的Javascript引擎、持久性模型等等)。我预计,对更有趣的数据结构的需求将增加,而且这种需求将得到满足

库功能通常在需要时出现。许多基本数据结构都很容易实现,因此似乎不值得将它们添加到库中——特别是当库需要经过某种标准化过程时。这就是为什么这么多语言(所有级别)没有提供开箱即用的功能。但我认为还有另一种力量在起作用,它将改变这一切。。。多道程序设计的兴起

出现了新的需求? 不久前,大多数开发人员编写的代码在单个线程的范围内运行。但现在,我们的系统充满了线程、web工作者、代理、协同路由、集群、云和各种并发系统。这改变了从头开始实现数据结构的整个复杂性

在单线程上下文中,用几乎任何语言实现链表都很简单。但是将并发性添加到混合中,现在需要付出大量的努力才能使其正确。一个人真的需要成为专家才能有机会。这就是为什么您可以在所有最新语言中看到丰富的集合框架。跨线程边界(甚至更糟)共享数据结构的需求正在得到满足

历史但不是未来
因此,总而言之,我认为许多语言明显缺少丰富数据结构的原因主要是历史原因。这种需要还不足以证明这一努力的合理性。但是有新的力量在起作用,以高度并发系统的形式,迫使语言库提供更丰富的数据结构的工业级实现。

说到高级语言,听起来C在标准库中有所有这些。当然,事实并非如此。我建议你改写标题和问题。真的吗?像Java的ArrayList这样基础的东西(即动态调整大小的数组)对每个人都是有用的——轮子必须发明多少次?如果你关心性能和正确性(为你的算法使用正确的数据结构),你需要这些数据结构。根据定义,脚本语言并不关心性能,因此拥有正确的数据结构并不一定能节省时间。此外,大多数脚本语言开发人员可能无法在智能上正确定义这样的数据结构(PHP)。