写点什么

.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:521677
用户头像

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

关注

评论

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

从青铜到王者的路线,mysql视频教程,MongoDB数据分布不均的解决方案

Java 程序员 后端

作为Java程序员应该怎样去规划自己的学习路线,2021Java者真的太难了

Java 程序员 后端

为什么StringBuilder是线程不安全的,Java高级工程师进阶学习

Java 程序员 后端

从基础到源码统统帮你搞定,mysql教程百度云,面试真题解析

Java 程序员 后端

从基础到源码统统帮你搞定,Spring中经典的9种设计模式,一定要记牢

Java 程序员 后端

作为Java程序员,java尚学堂和尚硅谷,看完我工资从12K变成了20K

Java 程序员 后端

为什么StringBuilder是线程不安全的,Mybatis源码解析

Java 程序员 后端

Vue进阶(幺伍幺):Vue 应用 key 提升页面渲染性能

No Silver Bullet

Vue 10月月更

五年Java开发者小米、阿里面经,2021最新Java框架体系架构面试题

Java 程序员 后端

京东数科Java面试,尚学堂马士兵java视频教程下载,满满的干货

Java 程序员 后端

从底层开始带你了解并发编程,Java资料下载

Java 程序员 后端

中软国际Java面试,java基础入门传智播客课后答案,Java开发面试技巧

Java 程序员 后端

二本Java小菜鸟4面字节跳动被秒成渣渣,【Spring注解驱动开发

Java 程序员 后端

从零开始学数据结构和算法,offer来了java面试百度云版,学Java必看书籍

Java 程序员 后端

价值2000元的Java学习资源泄露,Java中接口的使用你得知道

Java 程序员 后端

互联网大厂面试必问的JVM底层原理,高级Java开发必看

Java 程序员 后端

五分钟搞懂MySQL主从复制原理,37岁程序员被裁

Java 程序员 后端

京东面试真题解析,泪目

Java 程序员 后端

作为一名Java面试者你应该知道的,Java多进程从头讲到尾

Java 程序员 后端

今年最新整理的《高频Java面试题集合》,Java开发者必须收藏的8个开源库

Java 程序员 后端

从思路到不断优化,字节跳动算法工程师面试经验

Java 程序员 后端

从消息中间件看分布式系统的多种套路,Java进阶篇

Java 程序员 后端

作为Java程序员应该怎样去规划自己的学习路线,Java面试知识点

Java 程序员 后端

作为一个码农终于把MySQL日记看懂了,中软国际Java笔试题和答案

Java 程序员 后端

作为一名Java面试者你应该知道的,阿里,快手,拼多多等7家大厂Java面试真题

Java 程序员 后端

五面阿里拿下飞猪事业部offer,腾讯Redis压轴笔记

Java 程序员 后端

从JDK源码学习Hashmap,跳槽面试大厂被拒

Java 程序员 后端

从头到尾,都是精华,java就业班百度网盘,字节跳动算法工程师面试总结

Java 程序员 后端

作为一名程序员我不忘初心,2021年是做Java开发人员的绝佳时机

Java 程序员 后端

京东面试真题解析,程序员极客实验室,Java面试基本问题

Java 程序员 后端

什么会导致Java应用程序的CPU使用率飙升,高级Java开发技术

Java 程序员 后端

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