当前位置: 首页 > news >正文

2510d,d正式通过版本

原文

接受它的理由是:
1,需要一种发展语言,同时最大限度地减少用户在更新旧代码时的痛苦,即在不破坏内容的情况下破坏内容的方法.
2,随着语言的发展,版本将为我们提供不需要担心现有代码,而打破事物更多的空间.它并没有完全消除出现问题的可能性,但确实更自由了.
3,用户可更新到新的编译器版本,以利用非中断性更改和错误修复,且仍然选择,除非准备就绪,否则,仍不将他们的代码升级到包含破坏性更改的最新版本.希望因为新功能破坏代码而冻结特定编译器版本的日子已经过去.

对比草稿的更改,草稿:
1,明确-E开关不修改导入路径;
2,确定版本的标识符始终是其发布年份;
3,删除了特殊的"__EDITION__"关键字,并添加说明原因的注释.

前面部分相同,见草稿.

模块声明中,可可选地包含版本标识来指定目标版本:

ModuleDeclaration:ModuleAttributes(opt) module ModuleFullyQualifiedName Edition(opt);
Edition:DecimalInteger

在发布版本(edition)时指定特定版本的标识,且总是是发布年份,如

module mymod 2025;

每个D编译器版本都预定义了一个默认版本,当模块声明中没有显式指定目标时,该版本将变成目标版本.此默认值总是是编译器发布时最新的正式发布版本.

为了帮助按新版本转换现有代码,可用(如-edition=2025)编译器标志,覆盖给定编译器调用的默认版本,其中2025版本标识.

DIP还推荐一个E开关,允许用户为给定路径中的所有导入模块指定默认目标版本.此目标覆盖给定路径中模块的默认版本和(如果有)-版本(-edition)标志.一例:

dmd -E2024/path/to/imported/modules

如果给定的路径尚未在导入路径集中,则仍必须使用-I来添加它.

dmd -E2024/path/to/imported/modules -I/path/to/imported/modules

选出版本,这样使用D的无版本编译一组模块,可用-版本-E标志指定"零版"0标识,如-edition=0-E0/path/to/imported/modules,代表无版本.

DIP建议,这样修改DUB,这样DUB的配置文档(dub.{sdl,json})包含一个允许指定目标版本版本字段.默认,不包含此字段DUB配置将使用ZeroEdition目标来覆盖预定义编译器默认值.
这样,无需用户干预,将继续编译有旧代码基依赖项目.

兼容

DIP建议,仅当都按该版本转换d运行时d标准库时,才能正式发布版本,即最终确定.
该特征是为了后向和向前兼容;面向一个版本D模块应该可导入面向任何其他版本D模块.模板必须遵守定义它的模块所针对的版本的规则,而不是实例化它的模块.

兼容是在源码级;没有承诺ABI兼容.所有代码,无论是新旧代码,都必须使用相同版本编译器编译.编译器发布时,将只提供(必须支持所有现有版本(editions)的)d运行时一个版本(version).

安全说明

更高版本可能会修复,因为担心破坏现有代码的在早期版本中@safe无法修复的问题.此时,此DIP建议按@系统标记以前版本中的函数.或引入@trusted导入来解决.

版本可以做什么

见草稿.

缺点和可能的问题

编译器复杂性

虽然此功能将简化尚未编写的D代码,但它将引入考虑语言每个版本的要求,从而使编译器更加复杂.限制该复杂性的一个可能方法是仅支持最后N个版本,即N<5个版本.

http://www.dtcms.com/a/506777.html

相关文章:

  • Android Automotive相关术语
  • YOLOv2原理介绍
  • 长沙网站建立公司网络舆情研判分析报告
  • 网站建设创业计划书淘宝店铺推广
  • 华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
  • numpy中的meshgrid()的用法
  • 【C++高阶数据结构】红黑树
  • 最近我用springBoot开发了一个二手交易管理系统,分享一下实现方式~
  • 基础开发工具(中)
  • 朝阳网站开发wordpress 访问地址修改
  • windows共享目录
  • 【完整源码+数据集+部署教程】【零售和消费品&家居用品】家庭门窗开闭状态安全监控系统源码&数据集全套:改进yolo11-DCNV2
  • 信誉楼与数图信息科技强强联合,共绘“数智赋能零售新生态”蓝图
  • 衡阳网站优化外包价格百度人工服务
  • 前端-Node.js
  • DevOps 生命周期完全指南
  • 掌握 Kubernetes 的可观测性 (Tracestore)、安全性 (OPA)、自动化 (Flagger) 和自定义指标
  • 【AI】Dify循环用法,判断jenkins构建是否完成
  • 前端与后端 Node.js 比较
  • 架起EtherCAT与PROFINET的桥梁:实现全域电机设备的安全联控
  • 软件网站建设的目的2018年怎样做淘宝客网站
  • 铁岭建设网站商城域名注册多少钱
  • 从6G到Wi-Fi 7 中国或将迎来6GHz开放窗口期
  • FreeCut:一个支持PDF自适应裁剪的PPT插件
  • 【SPIE/EI/Scopus检索】2026 年第三届数据挖掘与自然语言处理国际会议 (DMNLP 2026)
  • Vue 概述以及基本使用
  • Nature Genetics|空间蛋白组联合空间转录组发现非小细胞肺癌免疫治疗响应的预测标志物
  • 2025-ICML-Enhancing Spectral GNNs: From Topology and Perturbation Perspectives
  • Mac版PDF Squeezer v4.5.1安装教程(DMG文件下载+详细步骤)​
  • PDF处理控件Aspose.PDF教程:在C#中将PDF转换为Base64