基于 CLR 的语言中的基于 1 的索引?

发布于 2024-10-14 10:44:47 字数 419 浏览 5 评论 0原文

我正在研究一种处理数据分析的非常高级的领域特定语言。人们几乎一致认为,从科学的角度来看,基于一的索引是正确的方法。当然,程序员讨厌这种不匹配,但实际上我们所有的用户都习惯使用 x[i] 来表示元素 i 而不是元素 i-1。

是否有任何设计原则可用于保留与 CLR 的一些合理的互操作性故事?我的感觉是,如果我们使用基于 1 的变体自动转换 System.Collections 空间,以及基于 C# 的 API,我们应该可以完成 90% 的工作。但我不确定。例如,我们是否应该自动对 IList 接口进行变基?但如果 C# API 实现 CustomRemove(zeroBasedIndex) 会发生什么?

我们还能做些什么来缓解这种痛苦的不匹配吗?我们应该在多大程度上使 System.Collections 成为一种基础的。

最后,CLR 上有基于 1 的语言的示例吗?

I'm working on a very high-level domain specific language that deals with data analysis. There is virtual uniform agreement that one-based indexing is the way to go from a scientific perspective. Of course programmers hate this mismatch, but virtually all our users are used to using x[i] to denote the element i not element i-1.

Are there any design principles that can be used to preserve some sane interoperability story with the CLR? My sense was that if we automatically translate System.Collections space with one-based variants, along with our C# based APIs we should be 90% of the way there. But I'm not sure. For instance, should we automatically rebase the IList interface? But what happens then if the C# API implements CustomRemove(zeroBasedIndex)?

Is there anything else we can do to ease this painful mismatch? How far should we go in making System.Collections one based.

Finally, are there any examples of one-based languages on the CLR?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

新一帅帅 2024-10-21 10:44:47

选项 1:刻录列表中的条目。将元素 0 设置为 null 值,所有逻辑索引都从 1 开始。

选项 2:为列表创建您自己的包装器,并拥有其 getter 并为您递增索引。

Option 1: Burn an entry in your list. Set element 0 to a null value and all logical indexes start at 1.

Option 2: Create your own wrapper for the list and have its getter and increment the index for you.

奢望 2024-10-21 10:44:47

VB 曾经允许您指定数组的基索引,但该功能从未在 VB.NET 中实现。也就是说,您实际上可以在 CLR 中创建基于 1 的数组,但它们会稍微慢一些,并且在很大程度上与其他 CLR 语言不兼容。

VB used to allow you to specify the base index of arrays, but that feature was never implemented in VB.NET. That said, you can actually create 1-based arrays in the CLR, but they will be slightly slower and largely incompatible with other CLR languages.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文