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标准,之前的枚举描述方法也失效了. ...
随机推荐
- 026_JDBC
JDBC简介 JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...
- scrapy运行的整个流程
Spiders: 负责处理所有的response,从这里面分析提取数据,获取Item字段所需要的数据,并将需要跟进的URL提交给引擎,再次进入到Scheduler调度器中 Engine: 框架的核心, ...
- Activiti表单(Form key)
1.设置Form key如图: 2.根据任务id得到Form key TaskFormData formData = formService.getTaskFormData(taskId);; Str ...
- 常用Linux Tips(不定期更新)
查看本机所有开放端口 lsof -i -P | grep -i listen 查看一段文本单词出现频率 awk '{b[length($0)]++;total_lines++;for(i=1;i< ...
- QQ邮箱发送信息
#以下库为python自带的库,不需要进行安装 #邮件发信动作 import smtplib #构造邮件内容 from email.mime.text import MIMEText #构造邮件头 f ...
- c语言学习笔记 - 文件操作
#include <stdio.h>#include <time.h> int main(void){ time_t t; //类似于size_t那 ...
- PHP实现图片的汉明码提取与降维
作者感言:数学不好,遇到算法问题分分钟狗带,毫无转寰的余地-_-||| 最近心血来潮,看了相似图片的搜索,最最最初级的方法即提取汉明码,之后匹配汉明距离.当然,在数以亿计的汉明码中,要筛出需要的图片, ...
- JavaScript事件(随笔)
1. Javascript事件介绍 JavaScript中的事件和现实生活中的事件类似,现实生活中发生的一些事情,例如:交通事件,当这些事情发生时,我们需要提供处理方案: 在JavaScript中事件 ...
- PAT甲级——A1106 Lowest Price in Supply Chain
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- js时间操作getTime(),ios移动端真机上返回显示NAN
ios移动端,js时间操作getTime(),getFullYear()等返回显示NaN的解决办法及原因 在做移动端时间转化为时间戳时,遇到了一个问题,安卓手机上访问时,能拿到时间戳,从而正确转换时间 ...