2404d,d语言支持源码包

原文

支持源码包文件

这是个编译器功能,而不是D语言功能.

与给链接器提供目标文件库方式类似,给编译器添加源码包文件支持.(及其所有子文件)都可成为源码包文件.

然后,把源码包文件提供给编译器,而不是包含大量文件的目录.即,如,可按一个(std.sar)文件分发所有的标准库.

sar扩展名代表"源码包(source archive)".如果std.sar在提供给编译器的导入路径列表中的路径中,则编译器将首选std.sar,而不是在std目录树中查找子模块.

甚至不必有std目录..sar文件的文件格式目标文件库和各种其他方案文件格式类似.因为它们因平台而异,不遵循其他方案.

sar文件不需要特殊考虑.它旨在对映射内存文件访问友好,且不存在对齐问题.

.sar文件由以下节组成:

1.按幻数和版本来标识.sar文件的.
2.内容表,每个源文件一项.由文件名串偏移/长度文件内容偏移/长度组成项.
3.文件名串,每个串都有个终止0.
4.文件内容,每个文件附加四个0字节,如词法分析器的哨兵.
5.格式中的整数小头.

要创建一个.sar文件,如Phobosstd文件:

dmd sar=/home/duser/dmd/src/phobos/std

会创建文件:

/home/duser/dmd/src/phobos/std.sar

并用扩展名为".di",".d",".c"".i"之一的所有子文件填充.

标准库,std.sar的大小约为11兆字节.

要使用std.sar文件,无需在用户的构建系统中更改.

DMD自动优先使用它找到的.sar文件.在开发源文件时禁止它是必要的,选择以下选项之一,来禁止.sar文件:
1.删除.sar文件.
2.用sar=off编译器开关.sar=on打开它,且是默认设置.

在像helloworld此简单程序试用它.sar在编译速度上的差异可忽略不计.一个更大程序也不太可能在性能上显示出特定趋势.

DMD实现中,很方便创建一个独立的归档程序.
还可简单添加它到命令行,来使用.sar文件:

dmd foo.sar

如果foo.sar包含文件a.d,b.dc.d,则该命令等价于:

dmd a.d b.d c.d

.sar文件只是绑定"一堆源文件"到单个文件中的方法.

理由

1.可按单个文件表示项目或库中的所有源文件,来方便处理.
2.要使用DMD一次编译所有源文件,命令行可能会非常长,且肯定很笨拙.使用.sar文件,你甚至可以不需要makefile构建器,只需:

dmd project.sar

3.在Phobos(及大多数代码)中,因为多个文件的不便,喜欢把许多仅略微相关函数集中一个文件中.

如,在std.algorithm中,单个算法可放进多个文件中,因为它们不相互引用.这也可帮助那些不想在单个模块中自动获得"友"声明状态的人.
.sar文件可使更精细模块更具吸引力.

4.项目中的目录可以是任意的.但是项目中的多个.sar文件表明这就是代码位置.不同名字的.sar文件,可在同一目录中表示项目多个版本.

5.使用(helloworld)小程序的实验显示编译速度的变化可忽略不计.

.sar文件,因为较少的文件操作,更大程序可能会显著提高编译速度.
速度较慢的文件系统(如SD卡或网络文件系统),加速可能会很大.
据我所知,其他编译器没有这样.即便如此,.sar文件仍会有一些令人惊讶的用法.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/793365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是typescript?

typescript并不是一种全新的语言,准确来说是js的一种超级,任何合法的js代码都是可以在typescript上运行,反过来说,ts上包含着一些js上一些没有的功能 ts包含着目前很多主流的标准,甚至包含了很多目前正在实验的语法。…

如何正确使用reflect:Go反射规范与最佳实践

在Go语言中,reflect包提供了一种强大的机制,允许我们在运行时检查和操作类型信息。正确使用reflect可以帮助我们编写更灵活和动态的代码。以下是一些如何正确使用reflect的示例和最佳实践: 1. 理解reflect.Type和reflect.Value 首先,我们需要理解reflect.Type和reflect.V…

Claude-3超越GPT-4:下一代AI在编程、学术和写作领域的突破

在当今这个信息爆炸的时代,人工智能技术的进步为我们提供了前所未有的便利。尤其是在编程、学术研究和专业写作等领域,AI的辅助作用变得尤为重要。最近,我有幸体验了一款新型的人工智能工具——Claude-3,它的表现让我惊讶不已&…

golang 归并回源策略

前言 下面是我根据业务需求画了一个架构图,没有特别之处,很普通,都是我们常见的中间件,都是一些幂等性GET 请求。有一个地方很有意思,从service 分别有10000 qps 请求到Redis,并且它们的key 是一样的。这样…

小于n的最大数 Leetcode 902 Numbers At Most N Given Digit Set

这两个问题的本质就是一个棵树,然后根据n对树做剪枝。难点在于剪的时候边界条件有些坑,get_lower_largest_digit_dic是这两个题目的共同点 题目一: 小于n的最大数 算法题目:小于n的最大数 问题描述:给一个数组nums[5…

『python爬虫』巨量http代理使用 每天白嫖1000ip(保姆级图文)

目录 注册 实名得到API链接和账密 Python3requests调用Scpay总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 注册 实名 注册巨量http 用户概览中领取1000ip,在动态代理中使用.用来测试一下还是不错的 得到AP…

什么是rsync协议

2024年4月5日,周五上午 rsync协议是一种用于文件同步和传输的协议,旨在高效地在两个位置之间传输文件或文件夹,并且在传输时只传输文件的差异部分,从而减少带宽占用和传输时间。 以下是rsync协议的主要特点和工作原理&#xff1a…

Ribbon有哪些负载均衡策略

负载均衡类都实现了IRule接口。 RandomRule:随机的选用一个实例 RoundRobinRule:轮询的使用实例 RetryRule:在轮询的基础上加了一个错误重试机制,在deadline时间内会不断的重试 WeightResponeTimeRule:根据权重去做…

55555555555555

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

Spring-Boot社区论坛

技术栈 JDK8Spring-BootMyBatisShiroFreemarkerMySQLBootstrap3 特性 社区兼容性(IE9)页面自适应布局本地登录,注册登录时有验证码使用 Spring-Boot 开发使用MyBatis操作数据库目前sql语句只支持MySQL,如果要切换数据库&#x…

15、Lua 元表(Metatable)

Lua 元表 Lua 元表(Metatable)__index 元方法__newindex 元方法为表添加操作符__call 元方法__tostring 元方法 Lua 元表(Metatable) 在Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作。 因此Lua 提供了元表(Metatable)&#xf…

《QT实用小工具·十二》邮件批量发送工具

1、概述 源码放在文章末尾 该项目实现了邮件的批量发送&#xff0c;如下图所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef SMTPCLIENT_H #define SMTPCLIENT_H#include <QtGui> #include <QtNetwork> #if (QT_VERSION > QT_VERSION_CHECK(5,0,…

初识CSS

目录 前言&#xff1a; CSS的介绍&#xff1a; CSS的发展&#xff1a; 1&#xff09;CSS1.0&#xff1a; 2)CSS2.0: 3)CSS2.1: 4&#xff09;CSS3&#xff1a; CSS特点&#xff1a; 1&#xff09;丰富的样式定义&#xff1a; 2&#xff09;易于设置和修改&#xff1a; 3&…

彩虹聚合DNS管理系统,附带系统搭建教程

聚合DNS管理系统&#xff0c;可以实现在一个网站内管理多个平台的域名解析&#xff0c;目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。 本系统支持多用户&#xff0c;每个用户可分配不同的域名解析权限&#xff1b;支持API接口&#xff0…

Flask Response生成流式数据api;iter_lines,iter_content流式数据遍历区别

1、Flask Response生成流式数据api 注意return与def generate():是同级的 from flask import Flask, Responseapp Flask(__name__)app.route(/stream) def stream_data():def generate():for i in range(5):time.sleep(1)yield f"Data chunk {i}\0" # 在每个数据…

卷积神经网络-池化层

卷积神经网络-池化层 池化层&#xff08;Pooling Layer&#xff09;是深度学习神经网络中的一个重要组成部分&#xff0c;通常用于减少特征图的空间尺寸&#xff0c;从而降低模型复杂度和计算量&#xff0c;同时还能增强模型的不变性和鲁棒性。 池化操作通常在卷积神经网络&am…

doesn‘t contain a valid partition table

查看硬盘空间 $ fdisk -l Disk /dev/mmcblk0: 29 GB, 31037849600 bytes, 60620800 sectors 947200 cylinders, 4 heads, 16 sectors/track Units: sectors of 1 * 512 512 bytesDisk /dev/mmcblk0 doesnt contain a valid partition table Disk /dev/mmcblk0p1: 1 MB, 10485…

动态规划:线性dp

1.最长公共子序列(LCS) dp[i][j]含义&#xff1a;序列Ai(a1-ai)和Bj(b1-bj)的最长公共子序列长度 分析两种情况&#xff1a; &#xff08;1&#xff09;当ai bj时&#xff0c;已经求得Ai-1和Bj-1的最长公共子序列 dp[i][j] dp[i-1][j-1] 1 &#xff08;2&#xff09;当…

2024 年最新使用 Wechaty 开源框架搭建部署微信机器人(微信群智能客服案例)

读取联系人信息 获取当前机器人账号全部联系人信息 bot.on(ready, async () > {console.log("机器人准备完毕&#xff01;&#xff01;&#xff01;")let contactList await bot.Contact.findAll()for (let index 0; index < contactList.length; index) {…

第三方短信-短信合作-106短信

第三方短信-短信合作-106短信 1、你是否也有需要发送短信的业务、但是自己没有短信服务的情况 2、是否需要大量发送短信、但是又不想通过自己的真实手机号发 3、您是否是开发者、但是没有自己的短信服务&#xff0c;需要发送短信可以使用/借用我的短信服务进行发送&#xff0c…