2019-4-17-从-dotnet-core-3.0-的特性让-WPF-布局失效讨论-API-兼容
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
从 dotnet core 3.0 的特性让 WPF 布局失效讨论 API 兼容
|
lindexi
|
2019-4-17 10:5:35 +0800
|
2019-04-17 09:41:42 +0800
|
WPF dotnet
|
在 dotnet core 3.0 为了支持 IEEE 浮点数计算标准,修改了 Math.Max 的算法,于是在 WPF 的 Track 里面的布局依赖于之前的计算,于是在 dotnet core 3.0 的修改就让布局计算不对了。改动现有 API 的行为会让现有的代码出现不兼容问题,那么要让一个框架能稳定支持升级需要满足什么条件
在我准备睡的过程,某 神樹 桜乃 告诉我现在的 Math.Max 对于 0 和 NaN 的返回和之前不一样,于是在他的帮助下,我找到了dotnet core 3.0 的新特性,符合 IEEE 标准的浮点计算的提交 在这个提交里面,作者说明了这个提交将会是改变 API 行为的
于是刚好在 WPF 的 Slider 用到了 Track 的布局,刚好在布局里面就依赖了 Math.Max(0,NaN) 返回 的是 NaN 而不是 0 的坑,详细请看 神樹的回复
本来 dotnet core 遵守 IEEE 标准是好的,因为有一个标准可以让多个语言迁移成本降低,但是在 .NET Framework 已经用了这个坑很久了,没有人能说明有多少以前的代码会依赖于这个坑。于是修改 dotnet core 3.0 浮点计算的作者就提议不更改原有的 API 的行为,另外新增新的 API 而不是改变原有的 API 用来兼容现在的代码,请看Expose Math.MaxNumber and Math.MinNumber functions that don't propagate NaN
我十分同意一个稳定的框架的 API 设计是能做到上下兼容的,一个不兼容的 API 只需要满足以下条件
- 接口更改,包含方法或属性名等的变更
- 返回值更改
- 公开属性更改,包括属性类型和属性可访问
- 公开 API 行为修改
- 方法参数变更,包含参数类型和参数个数
作为一个公开的框架,将会有很多历史问题,一个发布出去的 API 将会被很多小伙伴在很多地方使用,如果变更了不兼容的 API 从版本号规范上,需要升级主版本号。在版本号规则,升级主版本号就是表示存在 API 不兼容,基本上就是需要修改现在的代码才能跑起来。而升级次版本号就是表示有新增的 API
可以不更改原有的代码就可以升级库。也就是只要不是主版本号更改,那么就是愉快升级库而不需要考虑兼容
作为超级多项目引用的基础 dotnet core 库是需要做到上下兼容的,任何很小的 API 不兼容都需要其他很多项目很大的兼容代价
如何设计一个好的框架,请看好的框架需要好的 API 设计 —— API 设计的六个原则 - walterlv
现在 WPF 和 dotnet core 都是开源的,如果遇到任何的问题都可以在社区上询问
2019-4-17-从-dotnet-core-3.0-的特性让-WPF-布局失效讨论-API-兼容的更多相关文章
- DotNet Core 1.0 集成 CentOS 开发与运行环境部署
一. DotNet Core 1.0 开发环境部署 操作系统安装 我们使用CentOS 7.2.1511版本. 安装libunwind库 执行:sudo yum install libunwi ...
- 北京时间28号0点以后Scott Hanselman同志台宣布dotnet core 1.0 rtm
今日占住微信号头条的好消息<终于来了!微软.Net Core 1.0下载放出>.本人立马跑到官网http://dot.net看了一下,仍然是.net core 1.0 Preview 1版 ...
- centos 7 && dotnet core 2.0 && nginx && supervisor
前提 系统:centos 7 目录:/home/wwwroot/www.wuball.com dotnet core 2.0 官方指引 sudo rpm --import https://packag ...
- dotnet core 3.0 linux 部署小贴士
dotnet core 3.0 目前还是测试版,在linux下安装 sdk 需要有一些注意事项 1.下载url https://dotnet.microsoft.com/download/thank- ...
- dotnet cli 5.0 新特性——dotnet tool search
dotnet cli 5.0 新特性--dotnet tool search Intro .NET 5.0 SDK 的发布,给 dotnet cli 引入了一个新的特性,dotnet tool sea ...
- .NET Conf 2019 大会上发布.NET Core 3.0
北京时间今天凌晨如期在.NET Conf 上发布.NET Core 3.0,Keynotes 由Scott Hunter 主演,主要围绕.NET Core 3.0的新特性和社区展开. 多功能性是.Ne ...
- DotNet Core 2.0使用MySql实现Code First
本教程使用vs2017 + dotnet core2.0 + MySql5.7.19 1.打开vs2017,文件>新建>项目,选择Asp.Net Core Web应用程序. 2.项目名称可 ...
- Visual Studio 2019 16.1 使用 .NET Core 3.0
一.前言 早在很久之前微软便公布 .NET Core 3.0 将支持开发Winform应用程序等等新特性,现如今 .NET Core 3.0 预览版已经出来第五个预览版了,从 .NET Core 2. ...
- dotnet Core 2.0学习笔记(一)
一:Dotnet Core Windows运行环境,标红部分要注意 https://docs.microsoft.com/en-us/dotnet/core/windows-prerequisites ...
- dotnet core 3.0 swagger 显示枚举描述
上一篇net core 2.2 swagger的枚举描述,core 3.0 需要升级swagger到5.0rc版,配置需要做些修改,swaager启用了OpenApi标准,之前的枚举描述方法也失效了. ...
随机推荐
- java设计模式系列1-- 概述
准备开始写些设计模式的随笔,这是第一篇,概述主要回顾下六大原则 先用轻松和谐的语言描述下这6个原则: 单一职责 每个类甚至每个方法都只要做自己分内的事,不要背别人的锅,也就是功能要分类,代码要解耦 里 ...
- Mybatis Resultmap 简化之超级父类
我们在写 mybatis多表关联查询的时候 ,要配置 resultmap ,实在太麻烦.而这个超级父类 可以省去我们查询多表时的map public class SuperPojo extends ...
- PropertyPlaceholderConfigurer的注意事项
1.基本的使用方法是<bean id="propertyConfigurerForWZ" class="org.springframework.beans.fact ...
- SUMMARY | 二分查找
package Search; public class biSearch { //标准的二分查找 public static int stdBiSearch(int[] array,int keyV ...
- JQuery和JavaScript常用方法的一些区别
jquery 就对javascript的一个扩展,封装,就是让javascript更好用,更简单,为了说明区别,下面与大家分享下JavaScript 与JQuery 常用方法比较 jquery 就 ...
- naptime
naptime 有一个长度为n的序列\(a_i\),首尾相接组成了一个环,现在要在这个环上选出若干个区间,使区间长度之和恰好为b,然后忽略区间的顺时针开头元素,权值累加区间中所有的数字,问权值的最大值 ...
- CycloneII lcell_comb 和 lcell_FF 的结构
1,lcell_comb结构 2,lcell_FF结构 from : cycloneii_eda_fd.pdf
- mysql权限操作
1.mysql权限操作 grant select,insert on test1.tb1 to ltx2@127.0.0.1 默认权限:什么都没有 2.用户管理特殊命令: 创建用户:create us ...
- python dict 实现swich
使用dict实现swich,通过不同的键映射不同的函数. swich = { 'hour1':pred.getper1htable, 'hour6':pred.getper6htable, 'hour ...
- 我能不能理解成 ssh中service就相当于与jsp+servlet+dao中的servlet???
转文 首先解释面上意思,service是业务层,dao是数据访问层.(Data Access Objects) 数据访问对象 1.Dao其实一般没有这个类,这一般是指java中MVC架构中的model ...