问题标签 [d]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 我可以在 D(而不是 C)中创建 Python 扩展模块吗
我听说 D 与 C 链接兼容。我想用 D 为 Python 创建一个扩展模块。我是否忽略了它永远不会起作用的某些原因?
embedded - 嵌入 D(编程语言)
我喜欢我读过的很多关于 D 的内容。
- 统一文档(这将使我的工作更轻松。)
- 语言内置的测试能力。
- 调试语言中的代码支持。
- 转发声明。(我一直认为两次声明同一个函数是愚蠢的。)
- 内置功能替换预处理器。
- 模块
- Typedef 用于正确的类型检查而不是别名。
- 嵌套函数。(咳嗽帕斯卡 咳嗽)
- 输入和输出参数。(这是多么明显!)
- 支持低级编程 - 嵌入式系统,哦,是的!
然而:
- D 可以支持不运行操作系统的嵌入式系统吗?
- 它不支持 16 位处理器的明确声明是否完全排除了在此类机器上运行的嵌入式应用程序?有时你不需要锤子来解决你的问题。
- 垃圾收集在 Windows 或 Linux 上非常有用,但不幸的是,嵌入式应用程序有时必须进行显式内存管理。
- 数组边界检查,你喜欢它,你讨厌它。非常适合设计保证,但对于性能问题并不总是允许的。
- 多线程支持对嵌入式系统(不运行操作系统)有何影响?我们有一个客户甚至不喜欢中断。少得多的操作系统/多线程。
- 是否有适用于嵌入式系统的 D-Lite?
所以基本上 D 适合只有几兆字节(有时小于 1 兆字节)的嵌入式系统,不运行操作系统,其中最大内存使用量必须在编译时(根据要求)知道,并且可能在小于 32 位的东西上处理器?
我对其中的一些功能非常感兴趣,但我觉得它是针对桌面应用程序开发人员的。
具体是什么使它不适合 16 位实现?(假设 16 位架构可以处理足够数量的内存来保存运行时,无论是在闪存还是 RAM 中。)仍然可以计算 32 位值,尽管它比 16 位慢并且需要更多操作,使用库代码。
c# - D 的作用域失败/成功/退出是否必要?
当使用具有 try/catch/finally 的语言时,D 的失败/成功/退出范围语句仍然有用吗?D 似乎没有 finally 这可以解释为什么在 D 中使用这些语句。但是对于像 C# 这样的语言,它有用吗?我正在设计一种语言,所以如果我看到很多专业人士,我会添加它。
d - 基于D中的关联数组排序
我正在尝试遵循 D 应用程序在各个地方给出的示例。通常在学习一门语言时,我会从示例应用程序开始并自己更改它们,纯粹是为了测试东西。
一个引起我注意的应用程序是计算传入的文本块中单词的频率。由于字典是在关联数组中构建的(元素存储频率,键是单词本身),输出没有任何特定的顺序。因此,我尝试根据网站上给出的示例对数组进行排序。
无论如何,该示例显示了一个 lambda 'sort!(...)(array);' 但是当我尝试代码时 dmd 不会编译它。
这是归结的代码:
当我尝试编译此代码时,我得到以下信息
谁能告诉我我需要在这里做什么?
我使用 DMD v2.031,我尝试安装 gdc 但这似乎只支持 v1 语言规范。我才开始看dil,所以我不能评论它是否支持上面的代码。
memory - D/Tango 中的 malloc 和 free 不释放内存?
这是 Windows 中一个简单的 d/tango 代码:
当我运行程序时,内存保持低~2MB,当我为指针分配一个100MB的数组时,内存使用量跳到~100MB,这很好。但是,在程序结束后,可用内存仍为 100MB(我正在查看任务管理器)。
我以为可能是 Windows 页面文件缓存之类的,所以我尝试了一个简单的 C++ 程序:
我已经用 g++ 编译了它,一切似乎都像它应该的那样工作。程序启动时 - 内存使用量~900kb,分配后~100MB,释放后~1,2MB ...
那么,我做错了什么还是这是一个错误?
enums - 你能引用一个命名的枚举,就好像它在 D 中是匿名的一样吗?
我正在做一个到 C 库的 D 桥,这已经使用 typedef 的枚举提供了 C 代码,它像一个常量一样引用它,但可以将它命名为函数参数等。例子:
目前,我必须这样引用它:
但我宁愿:
我可以这样做:
但是我不想在库模块中这样做,所以我必须在使用它的地方这样做,这会很烦人。
有没有办法做到这一点?
string - 我应该如何处理 D 中的 C 字符串?
我正在将 C 库的头文件转换为 D 模块,并且想知道我应该如何处理 C 字符串。
使用 DMD 1,这有效:
但是使用 DMD 2(我个人使用,但我希望模块对两者都适用)字符串是 const 的,因此要使用模块获得相同的代码来工作需要
我该怎么办?只需使用char*
并使“客户端”代码以某种方式使字符串可变?还是根据编译代码的编译器版本修改类型?如果是前者,使它们可变的最佳方法是什么?我以为 .dup 会做到这一点,但编译器没有它。如果是后者,我将如何去做?我试过这个:
但遗憾的是,DMD 2 版本不是 DMD 1 的有效代码,并且版本块中的所有代码都必须是编译代码的编译器的有效代码,即使该代码不会包含在生成的可执行文件中。因此,目前代码在两者中都可以编译,但是您必须先修改别名,正如您可以想象的那样,这并不理想。
struct - 如何在 D 中初始化全局结构数组?
为了帮助我用 D 问题(=p)填充 SO,我遇到了另一个问题;全局初始化结构数组。观察:
结果是:
翻阅Digital Mars的文档,我真的看不到任何对我来说完全明显的东西,所以我再次求助于 Stack Overflow 的勇敢居民!我猜错误消息与真正的问题没有太大关系,因为 [0] 肯定是一个标识符(但dmd
认为它是一个声明符,AFAICT 查看文档,它不是)?
gcc - 改进 gcc 构建时间
我正在尝试改进 GCC(GDC) 的 D 前端。
我刚刚用 GCC-4.3.1 编译了 d 前端。但是与我使用 GCC-4.1.2 时构建它相比,它花了很长时间。这是 gdc 的版本:
使用内置规范。
目标:i686-pc-linux-gnu
配置为:../configure --enable-languages=d --prefix=/usr/local/gdc --enable-static --disable-shared
线程模型:posix
gcc 版本 4.3.1 (GCC)
我会说构建需要将近 30 分钟,但是使用 4.1.2 时,大约需要 10 分钟。我怎样才能减少所需的时间?我要做的就是更改 D 文件夹中的内容,仅此而已。
osx-snow-leopard - 雪豹上的 DMD 2
有没有人在 Snow Leopard 上尝试过 Digitalmars D 编译器(第 2 版)?我想升级,但我宁愿有一个工作的 D 编译器。