01 2023 档案

摘要:上一篇2 假定隔离可应用来可变数据或可变数据的指针,如果数据是常或不变的,则D的传递性表明所有指针都是只读的. 我在写带借用和引用计数的(Neat)语言,这不是有效的借用,基本上不想用默认可变变量来借用,因为就需要如下: Vector!int vector; vector ~= 3; void ev 阅读全文
posted @ 2023-01-31 11:58 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 如果可不压缩太多代码,用作区间,则会更加灵活: auto randomAlphanumeric(string S)(size_t len) { import std.array : array; import std.random : choice, Random, unpredictable 阅读全文
posted @ 2023-01-31 09:14 zjh6 阅读(30) 评论(0) 推荐(0) 编辑
摘要:原文 化简为: struct S() { void delegate() d; } S!() f_Ds(U)() { static if (is(U == struct)) return S!() ( { foreach (i, field; U.init.tupleof) f_Ds!(typeof 阅读全文
posted @ 2023-01-30 09:25 zjh6 阅读(21) 评论(0) 推荐(0) 编辑
摘要:原文 LDC,GDC和DMD在实现int4的乘法方面不同. // test-case.d import core.simd; int4 mul_4_ints (int4 a, int4 b) { return a * b; // LDC和GDC正常,但`DMD`不正常 } 高效的int4*int4要 阅读全文
posted @ 2023-01-29 20:11 zjh6 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原文 上一精简篇 推导本(P0847)是C++23中提供了指定非静态成员函数的新方法的特征.一般,调用对象成员函数时,尽管不在参数列表中,会隐式传递该对象给成员函数.P0847允许显式化此参数,为其命名并加上const/reference限定符.如: struct implicit_style { 阅读全文
posted @ 2023-01-29 17:42 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:参考 大家知道,成员函数都有隐式对象参数,对非静态成员函数,它就是this指针; struct S_implicit { void foo() {} }; struct S_explicit { void foo(this S_explicit&) {}//显式写出来. }; 1:消除修饰带来的冗余 阅读全文
posted @ 2023-01-29 15:00 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 在项目中,我大量使用hasUDA,getUDAs和getSymbolsByUDA.dmd需要大约3.2Gb来编译它,一个dub重新编译需要大约8-14秒. 如下内容,与环境无关: static if (isSerialisable!member) { import std.path : bui 阅读全文
posted @ 2023-01-29 10:21 zjh6 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原文 是否有文档描述移除@属性(@property)不会导致错误,但会导致代码行为的改变? 正在考虑全面删除3000多个@属性.由此产生的编译错误我可修复(除非在推测实例化中,否则可能更难追踪),但我特别担心的是不会导致编译警告/错误的行为变化. 多谢了 因为@属性只是有时改变了typeof的结果, 阅读全文
posted @ 2023-01-29 08:46 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 //dll.d: module dll; export __gshared int x = 41; extern(Windows) int DllMain(void*, uint, void*) { return 1; } // //client.d: module client; impor 阅读全文
posted @ 2023-01-26 16:30 zjh6 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原文 我正在试创建bindbc.sfml的面向对象的包装器,因为我不喜欢CSFML的C风格语法. 我只是想用面向对象的包装器来扩展它,使之更接近C++的SFML语法. 对包装器,我创建了形状(Shape)类.它在原C++SFML实现中可见: class Shape : Transformable, 阅读全文
posted @ 2023-01-25 18:06 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原文 上篇 我非常确信需要隔离,类似当前语言禁止库作者写可追加的向量类型,也是可使用向量的主要原因. 一些(GC?)分配器可能有@safe释放函数,但大多数(除了GC?)因为别名而不能,这需要隔离. : 我不是.第一次得到那篇论文链接时,甚至不理解基本概念.相对而言,基于变量的借位检查器更容易理解. 阅读全文
posted @ 2023-01-25 17:37 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 D最近在内存安全的-preview=dip1000方面取得了很大进展,这九分要归功于Dennis Korpel的工作.这一进展反之又使AteEskola创建了有望在Phobos的下个版本中提供的SafeRefCounted这里. 下一步是支持std.experimental.allocator 阅读全文
posted @ 2023-01-24 22:45 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 在窗口下,有a/b/foo.d和d/c/foo.d,链接器报告库包含多个同名对象. 编译器是使用外部命令还是自己创建库? 还有,为什么大多数对象名都有唯一后缀,而那些文件名却没有呢?基本上是__模块信息Z(__ModuleInfoZ)或__初化Z(__initZ)但并非总是如此. 如何处理该问 阅读全文
posted @ 2023-01-24 21:14 zjh6 阅读(25) 评论(0) 推荐(0) 编辑
摘要:原文 也许应该内置该(自动修复更新的破坏)特性到DUB中,它已可检测编译器和它的版本,所以它已可干所有的粗活了. 我最终编写了自己的运行时和std,因此我提倡语言增强而不是在std中加入更多模板汤. 我更同意语言服务器,Jan在serve-d上做了惊人的工作,但它有两个问题: 1,编译速度慢,使得贡 阅读全文
posted @ 2023-01-24 10:27 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 template isCallable(alias callable) { static if (is(typeof(&callable!()))) enum bool isCallable = isCallable!(typeof(&callable!())); else enum bool 阅读全文
posted @ 2023-01-24 09:46 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 整合C库时如何使用@safe?,一切都需要@系统函数 @safe fn() { // 大量安全的东西 () @trusted { //在该块中`[*]`可调用像`extern C`这种`@系统`函数. //你要确保正确使用`API` @assert(/*安全使用1参*/); @assert(/ 阅读全文
posted @ 2023-01-24 09:08 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 丹尼斯 Dennis首先报告说,他已开始了一个用@default来重置属性的DIP.它应该影响什么?是否应该重置所有属性(包括像私的可见属性),还是只影响函数属性?一致共识是,它应该只影响函数属性.此后,他提交DIP,以供草案审查. 拉兹万 @属性 在解决Bugzilla老问题时,Razvan 阅读全文
posted @ 2023-01-21 19:37 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 总之,是的,扩展为推导普通函数,而不仅是模板属性是要做的. 目前没有的原因,是它使.di声明与.d定义不兼容. 虚函数表明覆盖,表明它们的属性是通过协变和逆变规则继承的,这与属性推导不兼容. :绑定到"回调"的参数不能推导其参数类型. 我发布的版本可以. .di在影响某种策略前需要更好: 1. 阅读全文
posted @ 2023-01-21 16:30 zjh6 阅读(34) 评论(0) 推荐(0) 编辑
摘要:原文 有个把标准库的std.traits.fullyQualifiedName转化为__traits(fullyQualifedName)的请求.因为Phobos实现扩展了很多模板,所以想法是通过在编译器中实现它来减少编译时间.然而,亚当认为不应使用它,定义很差,且很容易错误地元编程. 因此问题是: 阅读全文
posted @ 2023-01-21 11:35 zjh6 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原文 在Java/C#中,可创建纯静类. 这些类的方法都是静的,不能继承或实例化类: static class Algo { void drawLine(Canvas c, Pos from, Pos to) { ...... }; } 使用类: Algo.drawLine(new Canvas() 阅读全文
posted @ 2023-01-21 10:22 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 import std.algorithm : sort; import std.conv : to; import std.range; import std.stdio; enum limit = 5; enum step = limit / 10.0;/* enum step = 1; / 阅读全文
posted @ 2023-01-21 09:40 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原文 extern (C) int main () { auto s = "a".idup; return 0; } 错误消息,不能很好定位错误. 可惜,问题在勾挂内部使用typeid.dup'只是个普通模板,所以编译器不会特殊处理.根源是dup内部使用typeid来传递Typeinfo给(目前还未 阅读全文
posted @ 2023-01-20 20:31 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 举例: import std; void main() { auto c = "a|b|c|d|e".splitter('|'); c.writeln; string[]e=["a","b","c","d","e"]; assert(c.equal(e)); typeof(c).stringo 阅读全文
posted @ 2023-01-20 15:33 zjh6 阅读(23) 评论(0) 推荐(0) 编辑
摘要:原文 首先,介绍一下背景. D中的输入区间是带front,popFront,empty成员的类型: 它构成了迭代的基础.只是为了好玩,设计一个返回永久随机数序列的输入区间.也叫生成器. 如下(不是很好的随机数生成器,但暂时可以): module rnd; struct RandomNumberGen 阅读全文
posted @ 2023-01-20 15:20 zjh6 阅读(23) 评论(0) 推荐(0) 编辑
摘要:void aa(void delegate() userData) @nogc {} 不管闭包的意愿,它强制userData为nogc. 如果aa调用userData,那么正确.如果只是传递而没有调用userData,那么最简单方法是转换为无害构,或使用联. 阅读全文
posted @ 2023-01-20 10:11 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 alias aliases(a...) = a; template sort(alias f, a...) { static if (a.length > 0) { alias x = f!(a[0]); alias sort = a; } else alias sort = a; } ali 阅读全文
posted @ 2023-01-19 15:53 zjh6 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原文 is表达式 int func(); static if (is(typeof(func) R == return)) pragma(msg, R); std.traits.ReturnType实现为: template ReturnType(alias func) if (isCallable 阅读全文
posted @ 2023-01-19 09:05 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 我发现创建只设置给定属性的构造器很烦.如: class Foo { int x; int y; int z; this(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } } 对构,它会自动生成构造器,如果对类也可自动生成构 阅读全文
posted @ 2023-01-17 18:24 zjh6 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原文 int bar(){ if(__ctfe){ int[] foo = [1]; // 失败,显示`TypeInfo`不能与`-betterC`一起用 } return 0; } dmd -betterC有问题,用ldc编译相同代码则没有问题. 我对这两个编译器的不同之处的理解是,ldc根本不为 阅读全文
posted @ 2023-01-17 18:23 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 class iv{ private byte[] buffer; private ulong writePos; private ulong readPos; this(){} void write(T)(T value) if (is(T == uint)){ buffer ~= nativ 阅读全文
posted @ 2023-01-17 18:22 zjh6 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原文 更改编译器 1,已弃用遗漏冲突的extern (D) @system函数定义 同一模块中多个函数的定义,在DMD 2.095.0后已算错误. 但是,尽管有同样混杂,两个实现显式的和推导的@系统属性有区别时,编译器不发出错误. void foo() {} void foo() @system { 阅读全文
posted @ 2023-01-17 11:32 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原文 class X { private int num; struct Y { // 如何访问num? } } 我相信这对于嵌套/内部类是可能的,但我不知道是否对于结构体是可能的. 对构不成立,可这样绕过: class X { private int num; struct Y { X outer 阅读全文
posted @ 2023-01-17 10:22 zjh6 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原文 创建2022年dconf在线演示时,我在找构建约束的替代方法.在此验证概念. 我开始研究标准库的成本,考虑isInputRange的约束条件: enum bool isInputRange(R) = is(typeof(R.init) == R) && is(ReturnType!((R r) 阅读全文
posted @ 2023-01-17 10:12 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 immutable int example; version(D_BetterC) { pragma(crt_constructor) extern(C) void initialize() { example = 1; } } else { shared static this() { ex 阅读全文
posted @ 2023-01-17 10:11 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 import std.algorithm, std.range, std.conv; void foo() { assert(2 == iota(2).map!(n => to!string(n)).length); } 因为,TypeInfo,化简为: __gshared val = __t 阅读全文
posted @ 2023-01-17 10:10 zjh6 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原文 // dmd -betterC extern(C) void main(int argc, char** argv) { int[4] arr = 1; } 这是个少得可怜的四个32位存储.把它推导为*调用函数*是不必要的,编译器应该只需在此发出四个存储. 这不仅适合int类型,其他内置类型也 阅读全文
posted @ 2023-01-16 14:48 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 //dmd main.d -betterC import std.range; pragma(msg, ElementType!(char[]) ); //错误:因为它是`void`,无法传递`void`参数给`pragma` 我得到'空'输出. 实现在std.range.primitive中 阅读全文
posted @ 2023-01-16 14:47 zjh6 阅读(49) 评论(0) 推荐(0) 编辑
摘要:原文 自,在betterC中可赋值A数组片给B数组片,但其它数组操作不行. 不工作代码示例. version (D_BetterC) extern(C) void main() { int[3] a, b; a[] = 0; // 工作 a[] = b[]; //工作 a[] = 1; // /错误 阅读全文
posted @ 2023-01-16 13:35 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 #18493期揭露了betterC实现中的疏忽:-betterC不支持触发异常,但却不要求不抛环境.#8184修复了自动生成隐式加到聚集字段后复制的试抓,但仍有基本问题.此PR试修复它. 我和AA/WB邮件讨论: 我:打算让-betterC在用引用计数异常,还是-betterC总是不抛? WB 阅读全文
posted @ 2023-01-16 13:34 zjh6 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原文 x86_64架构的未定义符号: EV_SET是仅引用结构的D函数.它实际上是一个(已翻译的)C宏. 调用EV_SET函数本身不应导致链接问题. 当然除非用'-betterC'. 更正链接:这里 其中指出: extern(D) void EV_SET64(kevent64_s* kevp, ty 阅读全文
posted @ 2023-01-16 13:32 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 //dmd -betterC mixin(`void foo(){}`.idup); //错误:`'TypeInfo'`不能与`-betterC`一起使用 这会导致mir.bitmanip和mir-cpuid中的BetterC回归 我也有类似的问题.用betterC编译时,在CTFE中phob 阅读全文
posted @ 2023-01-16 11:40 zjh6 阅读(21) 评论(0) 推荐(0) 编辑
摘要:原文 当前懒参数表明创建引用局部变量的闭包.允许逃逸懒参数,而不在堆中分配局部变量,会导致泄漏某个栈域指针的内存错误. extern(C) int printf(const char*,...) @safe; auto foo(lazy double i) @safe { return { retu 阅读全文
posted @ 2023-01-15 17:22 zjh6 阅读(24) 评论(0) 推荐(0) 编辑
摘要:原文 我在林操上安装了ldc2,我想为窗口编译程序. 我也下载了windows版本,并把libs放到linux版本的libs目录中,我正在试编译简单测试应用: //ldc2 hello.d --mtriple x86_64-windows-msvc import std.stdio; void ma 阅读全文
posted @ 2023-01-15 10:16 zjh6 阅读(34) 评论(0) 推荐(0) 编辑
摘要:原文 我一直在用亚当最初的工作,来实现迷你运行时.我让如下工作: assert(false, "断定内容"); 它是_d_assert_msg. 现在的问题是_d_assert_msg和_d_arraycatnTX的组合. 两个现在都实现了,但是在我的测试中失败了: string t = "test 阅读全文
posted @ 2023-01-14 21:43 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 unittest { const ushort tru = 1028; ushort ee = tru; ee <<= 5U; ee >>= 5U; assert(((tru << 5U) >> 5U) == ee); } 出现该问题是因为(ee>>=5),尽管ee是个正类型,是按有符号右移完 阅读全文
posted @ 2023-01-14 18:04 zjh6 阅读(31) 评论(0) 推荐(0) 编辑
摘要:原文 假设有包含存储内存缓冲的内存管理器. 你想分发这些内存块给程序的其他部分.块大小为PAGE_SIZE.类似这样: enum PAGE_SIZE = 4096; enum BUF_POOL_NUM_PAGES = 1024; class BufferPool { align(PAGE_SIZE) 阅读全文
posted @ 2023-01-14 14:47 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:vimwiki 简单ocr,各种简单的ocr simd加速json 文本转图表语言 md编辑器 d图像编码 类大纲d2uml d样板 d依赖 轻量d代数和矩阵操作 d的ll1解析器生成器 现代链接器 小c编译器 C++兰亭库 html转md 快速d的html5的解释器 开源物理渲染器 m3u8工具, 阅读全文
posted @ 2023-01-14 12:08 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 加新成员至zip,哪里错了? void zipAddArchiveMember(ref ZipArchive zip, in string file) { import std.conv: to; import std.file: readText; import std.string: re 阅读全文
posted @ 2023-01-14 11:05 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 为何不按元素操作元组? 假定,在Tuple!(int, int)中存储2维点.直接a + b就可产生另1个Tuple!(int, int). 直接,用c[] = a[] + b[]的话,会动态分配,并强制用户创建显式的目的变量(c). 假定可直接如下,这就有点笨拙. T opBinary(st 阅读全文
posted @ 2023-01-14 10:05 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 代码如下: import std.stdio; class a { public: this(){} ~this(){} class b { public: this.outer.c C = new this.outer.c(); this() { writeln(this.C.i); } ~ 阅读全文
posted @ 2023-01-13 17:48 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 马丁 Martin告诉下个LDC版本会晚一点发布,他没有太多时间,仍然需要解决一些合并DMD和DRRuntime仓库的细节. 他刚测试了2.101.0RC1的对称代码基.目前还不算太差,但很难确定,因为需要更新几个dub包.一个可见好处是,它发现了一些与复制构造器相关的现有八哥.还发现了一个要 阅读全文
posted @ 2023-01-13 17:09 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 mixin template helper() { mixin("writeln(12);"); }// struct Foo { void opDispatch(string name)() { import std.stdio; mixin helper!(); //mixin("writ 阅读全文
posted @ 2023-01-13 09:10 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:fun! Fzzs() "复制注释,复制代码的注释" "1,复制进指定文件(假定已复制)," "2调用外部处理,3打开" let i="e:\hzs.cpp" call Fzjwj(i) call Xttb("复制代码注释") "调用外部,用edge打开了.hzs为行注释的意思" let j="e: 阅读全文
posted @ 2023-01-12 11:59 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 如下代码,使dmd在使用-lowmem选项时,抛OutOfMemoryError. //--main.d-- struct Array(T) { T[] _payload; this(int b) { import std; _payload.length = b; } } struct A 阅读全文
posted @ 2023-01-12 10:12 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 然而,C缓冲区溢出,一直是C代码生产的头号问题.Valgrind等,只在有导致溢出的测试用例时,才检测溢出.这就是为什么它不如静态检查. Clang的静态分析器只能检测小部分缓冲区溢出. D可干C能做的一切.还有更多.Valgrind也可以同D代码工作. 最好的语言,甚至不需要工具. 完全正确 阅读全文
posted @ 2023-01-09 15:46 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 我写了些代码,做了一些转换实验.我发现有时,对比转换(cast),仅std.conv.to!工作,我不知道为什么,因为我假设他们是一样的.我有如下接口: interface ICustomDrawable { void render(sfRenderWindow* renderWindow); 阅读全文
posted @ 2023-01-08 23:32 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 我认为在-betterC下,不可用动态数组. extern(C) void main() { import core.stdc.stdio : printf; int[] A; printf("Hello betterC\n"); } //dmd -betterC -run Example_0 阅读全文
posted @ 2023-01-08 22:56 zjh6 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原文 auto s = 1234.to!string.map!q{a - '0'}.sum; 正常.但 alias comb = to!string.map!q{a - '0'} 报错. import std; alias comb = map!q{a - '0'}; void main() { a 阅读全文
posted @ 2023-01-08 22:43 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 string foo()() { string a, b; return a ~ b; } enum s = foo(); //./dmd -c -betterC test.d //出错. 修复 缺少的,好像是Object.RTInfoImpl.化简为 class C { int a,b,c; 阅读全文
posted @ 2023-01-08 17:28 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 昨晚我想出个主意. 如果存储器(变量,函数参数,构或类字段),在编译时存储类型,为什么不在编译时存储分配器呢? 也即,既不在类型也不在值中,而是按属性存储分配器信息. 首先,它引入了新的有趣的惯用法(如"new void","new __stack")等. 其次,如果可能,它不会生成大量模板代 阅读全文
posted @ 2023-01-08 09:58 zjh6 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原文 带-betterC用DMD编译: // 工作 int f_1(int a){ enum int[]foo = [1,2,3]; if(__ctfe) return foo[1]; return 1; } // 工作 int f_2(int a){ static immutable int[] 阅读全文
posted @ 2023-01-07 22:19 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 系统语言中的内存安全第3部分 本系列中的第一篇,演示如何使用新的DIP1000规则让切片和指针内存安全的引用栈.本系列的第二篇介绍了,ref存储类及DIP1000如何与(类,构和联等)聚集类型一起工作. 中文第1篇 中文第2篇 目前,该系列故意避开模板和自动功能.这使得前两篇文章更简单,因为不 阅读全文
posted @ 2023-01-07 21:44 zjh6 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原文 原文章内容太多,仅节选了方法及结论. 通过成功把内核Linux模块移植到D语言,来证明在Linux内核中使用现代语言的可行性.移植了virtio框架的virtio_net网络驱动. 设计和实现依赖指定D语言技术,以改进Linux内核驱动.由于D语言提供的安全优势,性能成本可忽略不计. 提供了一 阅读全文
posted @ 2023-01-07 21:26 zjh6 阅读(31) 评论(0) 推荐(0) 编辑
摘要:1,先安装油猴.crx. 2,再搜索Open-the-F-king-URL-Right-Now,安装它! 这些大网站,店大欺客,早晚完蛋! 阅读全文
posted @ 2023-01-07 16:18 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 我正在用CSFML的D绑定,并且创建了自己的UI库,来将元素绘画到屏幕上. 其中一个我创建的类是,包含用户点击按钮时调用的叫点击按钮时(onButtonClick)的函数的按钮类. 目前,一切运行良好. 我想添加几个并排按钮,来表示列表中元素,并为列表中指定元素们每个分配唯一的λ式,这是我当前 阅读全文
posted @ 2023-01-07 16:03 zjh6 阅读(72) 评论(0) 推荐(0) 编辑
摘要:原文 BetterC代码没有GC,所以禁止使用GC.但是许多人已正确指出,没有GC会削弱CTFE.CTFE应该可使用GC,这是有GC的一个主要优势(并削弱没有GC的CTFE语言). 所以,做了些实验,发现一般是有效的.在搜索bugzilla时,我发现了一个不管用的示例:在此. 并在此修复了它. 修复 阅读全文
posted @ 2023-01-07 13:34 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 我正在试写脚本来解析c头文件,然后输出多语言的基本绑定. 前段时间在论坛上看到D编译器可作为库使用,并发现lexer页 但: import dmd.lexer: Lexer 失败. 要如何才能调用lexer(或解析器)? dmd是个单独的代码基,在普通D构建中不可用. 必须提供它,然后链接进它 阅读全文
posted @ 2023-01-07 10:21 zjh6 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原文 import std.range.iota; auto r = iota(5, 0); //r为空区间 auto r = iota(5.0, 0); //这里为异常 很难调试,这样好吗? 简之,iota的常规popFront()是个平凡的 front += step 但对浮点,它是++n.因此 阅读全文
posted @ 2023-01-07 10:10 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 参考 在D中,经常使用助手来生成串插件等代码: public string ctfeHelper()(string a) { return "int " ~ a ~ " = 42;"; } extern(C) int main() @nogc { mixin(ctfeHelper("a")); 阅读全文
posted @ 2023-01-07 09:49 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 大家好,我再次试用亚当的wasm最小运行时,昨天我取得了很大的进步. 目前,唯一没有实现特性是try/catch/finally/throw等,主要是因为引擎不用它,我想问你们当前使用它的反馈,我已写了一个仅测试wasm运行时的文件: // ldc2 -i=. --d-version=Care 阅读全文
posted @ 2023-01-06 23:40 zjh6 阅读(33) 评论(0) 推荐(0) 编辑
摘要:原文 库地址 A a = new A(); a.setName("Bob"); a.setAge(20); a.isProbation(false); a.isActive(true); ... 这样构造太冗余. A a = new A("Bob", 20, false, true); 而如上多参构 阅读全文
posted @ 2023-01-06 18:48 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 我在玩betterC时发现,如果不小心忘记给编译器提供-betterC,它仍然会编译,但是,不会检查边界. 问题是:如果我忘记使用-betterC,为什么没有检查边界? module test; extern(C) void main() { import core.stdc.stdio : 阅读全文
posted @ 2023-01-06 15:01 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 我遇到了意想不到问题,它似乎只发生在单元测试中,而不是单元测试外. unittest { class Ab { int a; string b; static class Builder { int _a; string _b; Builder a(int a) { _a = a; retur 阅读全文
posted @ 2023-01-06 14:38 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 假设有个D主程序(无@nogc标记),两者 A:调用多个自身调用malloc/free的C函数;并且还 B:调用多个通过import core.stdc.stdlib;调用malloc/free的D函数. 假设正确使用malloc/free,是否会使D主程序崩溃? core.stdc.stdl 阅读全文
posted @ 2023-01-06 14:28 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 无法工作的代码示例: extern(C) void main() { alias int3 = int[3]; union U { ulong a = 1; uint[3] b; } //除非类型大小为`1,`否则无法组整个数切片设置为非零值. { ushort[] a; a[] = 1; } 阅读全文
posted @ 2023-01-05 10:53 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 我好像发现了比较乱的场景,基类有旧和新方法,我想让用户迁移到新方法: class Base { deprecated("改用新方法") abstract string oldWay(); abstract string newWay(); } class Child : Base { /+ / 阅读全文
posted @ 2023-01-05 10:01 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 假设有个狗: class Dog { @property { string name(); void name(string name) { _name = name; } } private { string _name; } } 如下构建: void main() { Dog d = ne 阅读全文
posted @ 2023-01-04 16:00 zjh6 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原文 对比: _Array_ptr<int> p (nor) int p[..] = a; 我更喜欢: int a[5] = { 0, 1, 2, 3, 4}; @checked int p[] = a; // p指向5个元素 另一示例: /* 此函数在数组中搜索`整数`.如果找到整数,则返回数组中 阅读全文
posted @ 2023-01-04 15:46 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 如果N>平台栈对齐,则不考虑栈变量的align(N). 这对栈对齐到16字节的64位编译中的float8(AVX,32字节对齐),来说尤其如此.注意AVX理论上,也可在32位编译,但是目前dmd既不暴露intrinsic,也不暴露内联汇编中的YMM0-YMM7,所以还不会在那碰到该问题. 据我 阅读全文
posted @ 2023-01-04 15:03 zjh6 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原文 我正在使用C的SFML的D绑定,并且正在创建自己的draw模板函数. 我先检查传入对象是否具有适当类型,如果是,我调用适当函数: template isDrawable(T) { enum isDrawable = is(T == sfCircleShape*) || is(T == sfRe 阅读全文
posted @ 2023-01-04 14:21 zjh6 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原文 我用了两个示例,来研究删除.stringof及减少一些串连接. 左边: module dcompute.driver.ocl.util; import std.range; import std.meta; import std.traits; //单独处理数组,部分这样来避免窄串 @prop 阅读全文
posted @ 2023-01-04 10:03 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 想要这样: bool func (const out Key k, const out Val v) { k = this.key.dup; v = this.val.dup; return true; } 你可以这样: import std.typecons; auto func(Key, 阅读全文
posted @ 2023-01-03 14:59 zjh6 阅读(32) 评论(0) 推荐(0) 编辑
摘要:原文 想表达插入指定的mixin模板到子类中,但是说的是,要覆盖指定方法.因此开发人员,可只覆盖方法而不实际插件(mixin)到mixin模板中. 如果可表达,在每个子类中,可求值指定的mixin模板,那就太好了.使用class mixin Foo; import std; mixin templa 阅读全文
posted @ 2023-01-03 11:33 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 至少在应用的开发和调试阶段,toString是一种转发有关对象文本信息给用户的,至关重要的方法.(向该线程道歉,我再次考虑该问题,并借用了类名): class Animal { override string toString() { return "Animal()"; } } class 阅读全文
posted @ 2023-01-03 10:42 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 大家好,我已为那些希望在betterC中,不用丢失接口实现的使用类的人做了该小项目. 该库只是定义了,必须继承的CppExtend及CppInterface类.它有个简单的New!T分配器和Destroy!T析构器. 工作原理是在输入上,定义和重定义函数,在类内部,类的实现是私有的,通过引用基 阅读全文
posted @ 2023-01-03 09:30 zjh6 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原文 可取类对象而不是类变量(即类实例化)而是对象定义自身地址吗? class MyClass {char c} ... MyClass MyClassVar; writeln(&MyClassVar); // 编译 writeln(&MyClass); // 不能编译 类定义没有地址,因为它是只在 阅读全文
posted @ 2023-01-01 10:42 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原文 很简单:在像D类编译语言中,程序会经历3个阶段: 1)源码:编写人类可读的文本. 2)编译:编译器编译程序.这就是"编译时".编译时,就是编译程序的时候. 3)二进制可执行文件:编译结果.运行它时,就是"运行时". 每次运行程序时就是运行时. (2)阶段是暂时的,只在编译器内部. 可分为几个步 阅读全文
posted @ 2023-01-01 10:04 zjh6 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原文 所以,在使用D一段时间后,我发现很多时候,都没有使用out,但是在使用时,它可能非常混乱,因为如果不阅读文档,特别是,如果正在阅读代码不是你写的,就会不清楚有些东西是out参数.在使用out前,我自己更多的使用了(&)地址操作符,因为它清楚表明要初化目标变量,但有一种更好,更安全方法可完成它: 阅读全文
posted @ 2023-01-01 09:30 zjh6 阅读(169) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示