写点什么

.NET API 审查第二部分

  • 2015-01-27
  • 本文字数:1740 字

    阅读完需:约 6 分钟

本文是对于 1 月 14 日所进行的.NET API 审查会议的分析的第二部分。这篇报告中涵盖了HashSet、RegEx、Process.Start、Immutable collections 和BitVector32 等API 的相关讨论。

[视频] GitHub Issue#382:为HashSet添加一个新的构造函数,可以在其中指定数据结构的初始大小

这一条意见毫无争议地通过了,只是让人有些疑惑的是,为什么原始版本中竟然会不支持这一特性。

[视频] GitHub Issue#304:正则功能应当提供一个校验方法

目前,RegEx 解析器采取了一种快速失败的方法。这就意味着,如果在某个正则表达式字符串中存在多个错误,解析器只会报告第一个错误的存在,并且会立即中断解析过程。

这一建议的关键就在于希望获取更多的信息。在理想的情况下,解析器应当返回一个错误集合,以显示正则表达式中的所有问题。但这就需要解析器尝试从错误中进行恢复,继续解析之后的表达式内容,并寻找其它错误。

对此建议的一个顾虑在于,如果接受了这一建议。接下来就会有人提出进一步的要求,例如自定义高亮、代码自动完成等等,以便在Roslyn 中进行使用。而这种要求已经远远超出API 的范围了,因此评审团队担心,一旦接受了这一建议,迟早都会需要一个新的API。

结论:分别讨论两组建议。

一个建议是在RegEx 在解析过程中出错时,对RegEx 抛出的异常信息加以改善。这里只会包含一些基本信息,例如第一个错误的具体位置,前提是这种方式不会让代码产生太多重写要求。

第二个建议是,是否应该添加对应的TryParse 方法。

RegEx API 并不会扩展到这种可以支持 IDE 的程度。

[视频] GitHub Issue#311:重新引入Console.CancelKeyPress 方法

这一条建议本身非常简单,就是重新引入这个存在于Windows 桌面版的.NET 中的方法,并将其扩展至跨平台版本的.NET 中。不考虑兼容性问题的话,那就是简单地从原始版本中进行拷贝粘贴而已。

[视频] GitHub Issue#306:为Process.Start 方法增加一个选项,以改变句柄的继承

表面上看,这个问题十分简单。在Windows 中,句柄可以在子进程中继承,这可能会导致预料之外的问题,例如Notepad 可能会持续保持一个打开的TCP socket,即使在父应用尝试关闭它之后。这个新的参数则能够让用户选择不继承句柄。

问题在于,这种处理在Linux 环境下毫无意义。在Windows 下创建子进程会使用一个全局的配置,而Linux 则允许在创建句柄时指定每个句柄是否能够被继承。

一种建议是为句柄继承提供一个三态的属性:操作系统默认、继承句柄,以及不继承句柄。

另一种建议是创建一个基础版本的ProcessStartInfo 方法,并且只提供跨平台的选项。然后通过创建子类的方法实现Linux、Win32 和Windows Shell Execute 的特定功能。

结论:提供一个新的属性,其类型为现有的HandleInheritability 枚举,其中包含两个状态值。

[视频] GitHub Issue#318:对ImmutableInterlocked.ApplyChange API 的建议

要确保对一个可变集合的变更是线程安全的,你必须获得对该集合的一个引用,创建一个替代的列表,并尝试调用 Interlocked.CompareExchange 来决定是否能够成功地替换原始列表。如果另一个线程在同一时间要覆盖该集合,该方法会返回 false,你必须重新启动该过程以再次尝试。

ImmutableInterlocked 能够简化一些基础操作的过程,例如添加或移除集合的项。你仍然需要在循环中使用它,但可以避免对本地变量的处理。

下一个建议是增加一个相应的泛型实现,其中可以接受一个 lambda 表达式进行某些操作。从技术上来说,这个泛型实现会使其它实现方式都变成多余的了,但既然那些实现已经发布,也不可能删除它们了。

结论:决定添加这个新方法。

有一个问题是,是否要将那些多余的方法标记为过期。

结论:由于那些多余的方法依然可以正常工作,因此不应该标记为过期。

[视频] GitHub Issue#373:BitVector32 应当实现IEquatable接口

BitVector32 能够以一个比特和小整数数组的形式表现一个整数值。该类型存在于 System.Collections.Specialiazed 命名空间中,这个命名空间通常被基础类库团队当作遗留代码,没人敢去动其中的内容。

与之相关的一个问题是 BitArray 类,如果不把 BitVector32 当作遗留代码处理,那么它就应当和 BitArray 中的功能相一致。

对于该提议尚未得出任何结论,稍后将会再次对此展开讨论。

查看英文原文:.NET API Review Part 2

2015-01-27 19:521801
用户头像

发布了 428 篇内容, 共 198.7 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

现代数据栈:秽土重生?——从 SAP x Databricks 看数据世界的轮回

tapdata

数据孤岛 现代数据栈 仓库原生 统一数据 SAP Databricks

用友与泰安市政府战略签约,打造数据产业合作新模式

用友BIP

智能体 数智化 用友BIP 数据产业合作

鸿蒙WebSocket的使用竟如此简单

不在线第一只蜗牛

网络协议 websocket

挽起袖子打一场翻身仗,ERP国产替代妥了!

用友BIP

智能体 ERP 数智化 用友BIP

从需求到代码,手机终端进销存系统的设计与实现全流程

飞算JavaAI开发助手

提示词工程——AI应用必不可少的技术

不在线第一只蜗牛

人工智能 深度学习

从思考,到行动:由Manus爆火谈AI Agent

脑极体

AI

直播精彩回顾 | DeepSeek驱动可观测性变革,解锁运维与AI融合新玩法

博睿数据

YashanDB UNDO表空间管理

YashanDB

数据库 yashandb

DataKit APM 自动注入原理篇

观测云

APM

跨境贸易新领域:代购、反向海淘独立站与电商平台的竞争格局与战略抉择cssbuy

代码忍者

30分钟搞定电商系统核心业务逻辑!AI工具实战演示高效开发秘诀

飞算JavaAI开发助手

出海行动派 | 全球服务新征程!Bonree ONE海外版正式发布

博睿数据

2025年,从全栈开发到低代码的生存博弈

秃头小帅oi

“北京小茅台”华都酒业携手用友,开启数智营销新纪元

用友BIP

AI 智能体 用友BIP 数智营销

完整代码生成:Java 开发效率提升的关键密码

飞算JavaAI开发助手

当低代码遇见麒麟OS:深度兼容统信UOS的图形渲染引擎改造技术揭秘

不在线第一只蜗牛

低代码

用友BIP,给软件插上AI翅膀,做实业务创新

用友BIP

智能体 ERP 数智化 用友BIP 业务创新

如何让你的应用在市场中脱颖而出?

HarmonyOS SDK

harmoyos

远控软件ToDesk收紧免费用户权益,免费使用时长再降33%

编程猫

阿里通义实验室语音团队负责人鄢志杰离职;苹果计划在 AirPods 上配备实时对话翻译功能丨日报

声网

【炫技赛】挑战“一天成为Java高手”,赢万元奖励!

飞算JavaAI开发助手

3FS系列(一):存储新纪元的开篇——3FS编译调优与部署的工程实践

九章云极DataCanvas

人工智能 DeepSeek 3FS

YashanDB SWAP表空间管理

YashanDB

数据库 yashandb

YDS重磅发布,用友BIP让开发者成就“十倍效能工程师”

用友BIP

AI 开发者 数智化 用友BIP YDS

.NET API审查第二部分_.NET_Jonathan Allen_InfoQ精选文章