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

2402d,d的静态构造器

原文
在D中是如何实现的静态构造器?印象是,druntime启动代码遍历,在可执行文件中存储的某种表.但显然这是依赖操作系统的,我试让静态构造器wasm中工作,但找不到方法.

我研究的druntime代码都勾挂到依赖于可执行格式的东西,显然还没有wasm的.

这在wasm中甚至可能吗,或我是否遗漏了一些明显的东西

它主要依赖于二进制格式,是编译器druntime之间的合作.
一般,编译器发射不可链接时去掉的指向生成ModuleInfo结构的指针到一个(__minfo,.minfo等)特殊节,把每个.d模块编译到特定的目标文件中.
链接到可执行文件/共享库后,在数据段的命名节连续存储每个链接目标文件的所有.d模块的ModuleInfo指针.

这样,druntime可通过取ModuleInfo指针的数据区间(如,通过链接器生成的__{start,stop}___minfoELF括号符号)来反射链接二进制文件的所有D模块/ModuleInfos.从那里可推导出模块构造器,单元测试等.

这在wasm中甚至可能吗,还是我错过了一些明显的东西

LDC有个外来平台回退,它使用链表编译器生成的,在初化程序时(按未定义的顺序)插入ModuleInfo指针,由C运行时,在Cmain()之前调用的CRT构造器.

因此,如果wasm不支持命名节/数据区间,但"隐式"支持可能潜在路线的初化器函数(CRT构造器).

哦,好吧,wasm-ld(即lld)支持与ELF完全相同的神奇__{start,stop}_*符号:这里

哦,伙计,我甚至为此添加了一个LDC测试,但差不多4年前就忘记了.😄
这里


http://www.kler.cn/a/232482.html

相关文章:

  • Unity中HDRP设置抗锯齿
  • QTcpSocket 服务端和客户端
  • 算法每日双题精讲——滑动窗口(长度最小的子数组,无重复字符的最长子串)
  • 现代无线通信接收机架构:超外差、零中频与低中频的比较分析
  • 基于springboot的汽车租赁管理系统的设计与实现
  • 代码随想录第二十一天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • CSS之盒子模型
  • HttpClient | 支持 HTTP 协议的客户端编程工具包
  • 【机器学习】合成少数过采样技术 (SMOTE)处理不平衡数据(附代码)
  • 懒人精灵 之 Lua 捕获 json解析异常 ,造成的脚本停止.
  • 在Python中读写Kafka队列
  • Qt应用软件【协议篇】TCP示例
  • RPC技术分享
  • 【杂谈】年尾做了这件事,我后悔了.......
  • git flow与分支管理
  • 【大数据】Flink 中的 Slot、Task、Subtask、并行度
  • 利用路由懒加载和CDN分发策略,对Vue项目进行性能优化
  • Ubuntu in VMware的问题
  • 对比 elasticsearch 和 mysql
  • Qt网络编程-QTcpServer的封装
  • 前端JavaScript篇之对原型、原型链的理解、原型修改、重写、原型链指向
  • 职业性格测试在求职应聘跳槽中的应用
  • Nginx方向代理和负载均衡配置
  • Unity3d Shader篇(六)— BlinnPhong高光反射着色器
  • PyTorch自动微分模块torch.autograd的详细介绍
  • Top 20 Docker 面试题(附答案)