11 2022 档案

摘要:原文 导入用'-betterC'单独编译的XYZ模块,会有因为缺少应由XYZ模块定义的叫__ModuleInfo的符号的链接器错误. 一种补救方法是在XYZ中定义此值: extern(C) __gshared ModuleInfo _D3dmd7backend7ptrntab12__ModuleIn 阅读全文
posted @ 2022-11-30 16:33 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 我正在推动D中的共享库支持进入更可用的状态. 方法如下: 构建-betterC共享库,构建依赖如上共享库的完整D可执行文件.不管你对-betterC的感觉如何,在此使用它的原因是,避免我在最初推送过程中遇见的druntime问题. 我没有在Posix上,也没在GDC上测试过.现在我只对窗口支持 阅读全文
posted @ 2022-11-30 15:59 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:ATL/WTL应用向导 ATL/WTL应用向导产生WTL应用的起始程序.可选择为不同的应用类型和功能创建代码. 可选择下列选项: 1,应用类型(SDI,多线程SDI,MDI,TabView,资管,对话框) 2,支持ActiveX控件 3,COM服务器 4,用.CPP文件实现类 5,常见控件清单 6, 阅读全文
posted @ 2022-11-29 18:20 zjh6 阅读(79) 评论(0) 推荐(0) 编辑
摘要:原文 理由 和类型(sumtype)在许多语言中都是有用和流行的.和类型与证明是有用和流行的模式匹配配合得很好.与C风格的无标签联相反,和类型主要特征是保证安全访问成员.并保证处理和类型的所有情况.Sumtypes是可靠避免常见编程的在不先检查值是否无效下就访问值的错误.当函数需要指示有错误及返回错 阅读全文
posted @ 2022-11-29 17:14 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 __traits(isCopyable, T) //和 __traits(isPOD, T) 有啥区别?因为 static if (__traits(isCopyable, Element)) insertAt(element, index); else insertAt(move(eleme 阅读全文
posted @ 2022-11-29 11:26 zjh6 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原文 以下代码无法编译: struct S { Nullable!S delegate() f; } 这样,又正常 struct None {} struct S { SumType!(None,S) delegate() f; } 这只是前向引用错误.如下似乎可解决: alias NS = Nul 阅读全文
posted @ 2022-11-29 09:25 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:有效的窗口消息分四类. 0..0x3FF(WM_USER-1):系统定义消息. 操作系统定义这些消息,无法更改.不要在此发明新消息.由于由窗口定义意思,因此操作系统了解如何解析WPARAM和LPARAM参数,且可在进程间混杂消息(或知道拒绝). 0x400..0x7FFF(WM_USER..WM_A 阅读全文
posted @ 2022-11-28 10:53 zjh6 阅读(31) 评论(0) 推荐(0) 编辑
摘要:#include <常用> 空 g(动 b){//不能直接把`动`改为`有大小`. 打印(b); } 元<有大小 T>空 f(T b){ 打印(b.大小()); }//要这样, 空 主(){ 串 b{"啊"};整 i=22; f(b); f(i);//编译不过. g(b); g(i); } 概念还是 阅读全文
posted @ 2022-11-27 23:16 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:打开运行的js文件: (new ActiveXObject("Shell.Application")).FileRun(); 过去,窗口是16位的.每条消息可携带叫WPARAM和LPARAM的两条数据.第一个是16位值("字"),所以叫它W.第二个是32位值("long"),所以叫它L. 用W参数传 阅读全文
posted @ 2022-11-27 22:49 zjh6 阅读(47) 评论(0) 推荐(0) 编辑
摘要:原文 Mulhi是一条可在任何64位CPU上有效地使用如下操作的指令: ulong mulhi(ulong a, ulong b) { return (ucent(a) * ucent(b)) >> 64; } 在C++用__int128实现它. 这种运算,因为允许一次完成大量移动和加法,对快速哈希 阅读全文
posted @ 2022-11-27 15:04 zjh6 阅读(112) 评论(0) 推荐(0) 编辑
摘要:原文 import core.stdc.stdio; import core.stdc.stdarg; extern(C++) void print(long a, va_list args){ vprintf("值: %d\n", args); } void proxy0(long a, long 阅读全文
posted @ 2022-11-26 16:40 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:时间戳的伟大在有很多选项.有时,在调试(或阅读不完整文档)时,你会找到时间戳,并想知道如何把它转换为可读的内容.这里有一些提示. 使用2002年11月26日Pst下午7:25作为采样时间. UNIX时间戳自1970年1月1日UTC以来按秒数的32位数字,是唯一常用的32位数字的时间戳. 2002年1 阅读全文
posted @ 2022-11-26 09:41 zjh6 阅读(205) 评论(0) 推荐(0) 编辑
摘要:原文 :如果可在静每一中放case,就应该可放else if. 这不是"对普通模式不适合",而是"非常奇怪".case语句工作方式更像是goto标签,而不是语句.如,以下是有效代码: import std.stdio; void switchtest(int i, bool b) { switch 阅读全文
posted @ 2022-11-25 11:04 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 我从一开始就在窗口上开发引擎,我甚至为它开发Xbox,所以,我的D经验应该可证明是有用的. :90%时间,缺失this指针或错误 我唯一一次发现缺少this,我只是在issues.dlang上发送了一个bug:当在函数内部使用匿名类时,这似乎是DMD的一个bug. :函数栈上变量经常部分或全部 阅读全文
posted @ 2022-11-25 10:32 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 微软在其C++x64调用约定中声明,最大大小为8字节的构应通过寄存器按值传递(POD与否并不重要).Dmd通过引用传递,所以错了,调用大小为8的非pod标记为extern(C++)的函数时.被调的C++函数按值解释寄存器中指针,并无意义的计算. Ldc没有该漏洞,正确. 如,对以下定义: vo 阅读全文
posted @ 2022-11-25 09:49 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:enum EnumType { foo, member, bar } void main() { import std.traits; EnumType enumValue; with (EnumType) switch_label: final switch (enumValue) { stati 阅读全文
posted @ 2022-11-25 08:59 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:目的:借助多个行号来设置多个处理区间. 然后,使用函数来批量处理它们. 1,设置行号 let s:twl=[] "头尾列.为(头,尾)行号列.然后用批量处理它. "用.l来清理,用.f来加. fun! Dhq() "多行清,直接清理" let s:twl=[] echo "清理头尾" "清理,然后可 阅读全文
posted @ 2022-11-24 22:38 zjh6 阅读(25) 评论(0) 推荐(0) 编辑
摘要:原文 // build.d import dub; void build(Builder* builder) { builder.target_type = .exe; builder.target_name = "game"; auto config = builder.create_config 阅读全文
posted @ 2022-11-24 10:07 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 参考1 参考2 (extern(C)函数指针不能赋给D变量)?还是要注解函数?如果是,怎么做? 问题是ScopeCleanup构不能通过传递从C导入的函数指针来构造. 需要创建包含回调类型的别名: alias DCallback = extern(C) void function(); DCa 阅读全文
posted @ 2022-11-23 09:13 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:依赖llvm, 与DMD不同,对real,为了兼容MSVC长双精,LDC使用64位双精. 资料1 资料2 资料3 资料4 资料5 资料6 阅读全文
posted @ 2022-11-22 15:52 zjh6 阅读(214) 评论(0) 推荐(0) 编辑
摘要:原文 minigui唯一依赖是arsd.simpledisplay和arsd.color,simpledisplay提供低级接口,而minigui在之上构建组件窗口. 首要目标不是像GTK和Qt那样庞大和复杂,而是有用.并不十分关注外观,在窗口上,它只使用本地控件和原生主题,在Linux上,它保持简 阅读全文
posted @ 2022-11-21 11:43 zjh6 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原文 D的新混杂名 混杂名 D采取独立的编译模型:先编译D源码为目标文件,再用链接器绑定目标文件,来构建可执行二进制文件.它允许重用预编译的目标文件和库,从而加快构建过程.由于链接器也用于相同编译模型的其他语言,如C/C++或Fortran,混合不同语言的目标文件是很简单的. 在目标文件中,每个函数 阅读全文
posted @ 2022-11-19 19:06 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原文 import std.string; void foo(int i) { // 这里缺少%s,也可为其他错误. assert(i == 42, format("坏参", i)); } void main() { foo(43); } 如果抛format,则抛的异常使断定错误. 如何覆盖为有效的 阅读全文
posted @ 2022-11-19 14:36 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 应该按需,来使用常. 如果要保存逻辑上固定的值,就用常. D的常与C或C++中的常不同,它是可传递的,即如果某个对象X是常,则X引用的所有内容也自动是常. 主要适用于"叶节点":直接处理或可能是距离物理数据只1-2级抽象的低层次的构.越过它,进入更高级的代码,常很快就变成了巨大痛苦.如, 1, 阅读全文
posted @ 2022-11-19 14:04 zjh6 阅读(22) 评论(0) 推荐(0) 编辑
摘要:import std.format; import std.stdio; struct SomeId { invariant { } ref SomeId write(string fmt, string value)return { return this; } ref SomeId write( 阅读全文
posted @ 2022-11-19 13:48 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原文 import std.traits : isCallable; struct MyStruct { auto foo() { return MyStruct(); } static if (isCallable!foo) pragma(msg, "GOOD"); else pragma(msg 阅读全文
posted @ 2022-11-19 13:32 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:/** * std::bitset example. * * Build with: * $ ldc2 -L-lstdc++ bitset.d */ modmap (C++) "bitset"; import std.stdio; import (C++) std.bitset; void main 阅读全文
posted @ 2022-11-19 12:38 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:Calypso工具,地址 它的工作方式与htod.exe类似,Calypso生成extern(C++). 它与clang++绑定在一起. 这不是Calypso现在的工作方式,它通过'modmap(C++)"dll头文件.h"',直接从D模块导入C++头文件,而不生成中间的D绑定模块: 这里,基础c+ 阅读全文
posted @ 2022-11-19 12:13 zjh6 阅读(40) 评论(0) 推荐(0) 编辑
摘要:原文 借助cppnew.d.地址 // ab.cpp #include <iostream> class Test { public: Test(int); ~Test(); void set(int); void print(); private: int a; }; Test::Test(int 阅读全文
posted @ 2022-11-19 10:57 zjh6 阅读(31) 评论(0) 推荐(0) 编辑
摘要:原文 不混杂类型名,有个包,模块,父构成的全名. 示例: module mypack.mymod; import std.stdio; struct S { struct Is {} } void main() { writeln(typeid(S)); writeln(typeid(S.Is)); 阅读全文
posted @ 2022-11-19 10:05 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:import core.stdcpp.vector; import std.stdio; void main() { vector!double v = [1.0, 2.1]; //double[] a = []; vector!string vs = ["33","44"]; writeln(v[ 阅读全文
posted @ 2022-11-18 23:38 zjh6 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原文 enum F_Type{ CONS, STRN, NMBR, EROR, BOOL, FUNC, } struct Atom{ F_Type kind; Atom* car; Atom* cdr; double num; string str; bool bul; F_Error err = 阅读全文
posted @ 2022-11-18 10:52 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 T transitivity(T : PosetRelation)(T R, T S) { if (R.op == S.op) { if (R.right is S.left) return new T(R.left, S.right); } return null; } 阅读全文
posted @ 2022-11-18 10:16 zjh6 阅读(21) 评论(0) 推荐(0) 编辑
摘要:元<整 I>静 常式 整 f(整 i){整 k=I*i;中 k;} 元<动 F,整...I>常式 动 M(){ 中 序列<F<I>(3)...>(); } 空 主(){ 常式 动 t=M<f,3,4,5>(); 打印序列(t); } 函数模板不能作模板参数 阅读全文
posted @ 2022-11-18 10:00 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 对如下D代码(wasm.d)生成.wasm文件: extern(C): // 禁止D混杂 double add(double a, double b) { return a + b; } // 要求的入口点 void _start() {} 构建wasm.wasm命令: ldc2 -mtrip 阅读全文
posted @ 2022-11-17 22:40 zjh6 阅读(24) 评论(0) 推荐(0) 编辑
摘要:元<整 I>整 f(整 i){ 整 k=I*i;打印(k);中 k; } 元<动 G>空 gg(){ G(3);G(4); } 空 主(){ gg<f<3>>(); gg<f<4>>(); } 借助模板实例化,来利用函数模板. 阅读全文
posted @ 2022-11-17 21:32 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:第一版 用 T=函数<极(串&)>; //实验<整,T> 空 f(向量<T>&a,串&b){ 对(动&f:a){ 极 e=f(b);打印(e); } } 极 g(串&a){ 打印(a);中 真; } 极 h(串&a){ 打印(a);打印(a);中 假; } 空 主(){ 向量<T>a{g,h};串 阅读全文
posted @ 2022-11-17 18:37 zjh6 阅读(30) 评论(0) 推荐(0) 编辑
摘要:我们的目的,是想通过推导函数指针,从而得到函数指针的相应函数<>版: 元<类 T>构 函征; //少打一个构.注意,不要少构字,不然报错. 元<类 R,类...O>构 函征<R(O...)>{ 枚{个数=型长...(O)}; 又 R 函型(O...);用 果型=R; 用 S=函数<函型>;又 R(* 阅读全文
posted @ 2022-11-17 17:09 zjh6 阅读(32) 评论(0) 推荐(0) 编辑
摘要:用 T=函数<极(串&)>; 空 f(向量<T>&a,串&b){ 对(动&f:a){ 极 e=f(b);打印(e); } } 极 g(串&a){ 打印(a);中 真; } 极 h(串&a){ 打印(a);打印(a);中 假; } 空 主(){ 向量<T>a{g,h};串 e{"只"}; f(a,e) 阅读全文
posted @ 2022-11-17 11:19 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:Socket.close现在是'this'上的'域'. 这不一定是坏事,就像close也是域一样,但是值得破坏用户代码吗?好处不大. 是为了内存安全,类析构器不应构造器中逃逸本(this),因此隐式使类析构器域. 问题 提交 因为标准套接字(std.socket)在析构器中调用了close,因此必须 阅读全文
posted @ 2022-11-17 10:05 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 用不同的版本定义编译不同的库是灾难. 根本原因是编译后的目标文件(或库)中内容,与编译器导入时认为的内容不匹配.使用与导入时不同的标志构建模块时,可能会不同: 库模块: module lib; version(with_func) void func() {} 应用模块: module app 阅读全文
posted @ 2022-11-16 23:32 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 1,堆分配(GC或非GC)总是要求同步的共享资源. 2,堆分配(GC或非GC)的高速缓存利用率很差(GC涉及大量降低利用率的高速缓存行). 3,堆分配(gc或非gc)永远不是O(1).大的分配需要从有非线性复杂性的系统请求内存(sbrk,mmap等)的syscalls. 而栈分配只是加个整数到 阅读全文
posted @ 2022-11-16 21:47 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 参考 考虑: import core.simd; double2 set0(double2 x, double* a) { x[0] = *a; return x; } double2 set1(double2 x, double* a) { x[1] = *a; return x; } GD 阅读全文
posted @ 2022-11-16 20:36 zjh6 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原文 template C () { this (int i) { } } class A { mixin C; this () { } } void main () { auto a = new A(3); } 可这样: template C () { void fun(int i) { } } 阅读全文
posted @ 2022-11-16 20:00 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:影响传递给编译器与链接器的壳选项.所有设置都是可选的.可用$环境变量,自身用$$表示.不匹配预定义的,就用环境变量. 依赖 // "dub.sdl" ... dependency "vibe-d" version="~>0.9.5" dependency "localdep" path="../lo 阅读全文
posted @ 2022-11-16 18:15 zjh6 阅读(48) 评论(0) 推荐(0) 编辑
摘要:值描述dmd标志ldc标志gdc标志"debugMode"在调试模式下编译(允许合约)-debug-d-debug-fdebug"releaseMode"在发布模式下编译-release-release-frelease"coverage"运行完,输出代码覆盖率分析-cov-cov-fprofile 阅读全文
posted @ 2022-11-16 16:28 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 取B的类名: interface A { string text(); } class B : A { override string text() { return ": It's ok!"; } } void main() { A[] a = cast(A[]) new B[3]; B b 阅读全文
posted @ 2022-11-16 14:32 zjh6 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原文 struct Foo { /* ... */ hstring[] getHeader(LowerCaseToken name) scope return { return _headers[name].values; } hstring[] getHeader(hstring name)() 阅读全文
posted @ 2022-11-15 16:40 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 如下代码非期望: int[] foo() { int[1024] static_array; // return static_array[]; //返回`'static_array[]'`时逃逸了局部变量`'static_array'`的引用 return null; } class A { 阅读全文
posted @ 2022-11-15 16:12 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 D的发展非常快.例如,dip1000计划已经取得了很大的进步,ImportC在可用性方面向前迈进了一大步.D现在有了和Rust一样的借位检查器原型.D的未来是内存安全. D在并发方面的进展并不快,但SebastiaanKoppe用已实现的结构化并发指明了方向:我想把他的作品放到火卫一里.我喜欢 阅读全文
posted @ 2022-11-15 09:55 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 import std.stdio; void[] getFoo(){ void[] _ = new void[int.sizeof*2]; (cast(int[])_)[0] = 2; return _; } void main() { void[] bar = new void[int.si 阅读全文
posted @ 2022-11-15 09:17 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 import std.stdio; class Foo { void bar() { writeln("Hello world!"); } } dmd -H产生: import std.stdio; class Foo { void bar(); } 除了过多的导入成本外,可以在几秒钟内完成增 阅读全文
posted @ 2022-11-14 23:48 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> <ws2:longPa 阅读全文
posted @ 2022-11-14 21:13 zjh6 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原文 synchronized final class SyncAA(K, V) /// { /// V opIndex(K key) { return data_[key]; } /// V opIndexAssign(V value, K key) { return data_[key] = v 阅读全文
posted @ 2022-11-14 16:32 zjh6 阅读(23) 评论(0) 推荐(0) 编辑
摘要:原文 dub也有很多方便.看下面项目结构: A项目正在使用B库. 现在,B模块有如下代码: module b; void print(string s){imported!"std.stdio".writeln(s);} else version(Have_A) { void printA(stri 阅读全文
posted @ 2022-11-14 10:16 zjh6 阅读(26) 评论(0) 推荐(0) 编辑
摘要:原文 pragma(msg, size_t.sizeof); // 4 pragma(msg, ulong.sizeof); // 8 printf("%lu", ulong.init); 报错,%lu必须是正,而不是正长.对长也是: printf("%ld", long.init); %ld必须是 阅读全文
posted @ 2022-11-14 09:37 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 理由:目前,查看通过别名参数传递给模板重载集时,不能提取重载集.一般,可用: __traits(getOverloads, __traits(parent, sym), __traits(identifier, sym)) 但只要重载集包含别名或其他模块,此操作就会失败.而 __traits( 阅读全文
posted @ 2022-11-12 17:02 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:[win+ctrl]配合左右方向键可以快速切换不同桌面; [Win+Ctrl+D]直接新建桌面; [Win+Ctrl+F4]删除当前桌面 这些东西,毛用没有,尽是影响你. 可以先禁止快捷键,用窗口+tab来删掉. 一直按Ctrl+Win+F4,可一直关闭桌面. 阅读全文
posted @ 2022-11-12 13:20 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 如果你是C++程序员,考虑共针/独针, 如果想让代码更通用,可考虑通用的空*(void*)类型.但有更好方法.看看: import core.stdc.stdlib; void* myInt = malloc(int.sizeof); *(cast(int*)myInt) = 500; wri 阅读全文
posted @ 2022-11-12 10:11 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 struct S { private import std.traits : FieldNameTuple; float x = 0; } void main() { S x; foreach(v; x.FieldNameTuple!S) {} import std.stdio; writel 阅读全文
posted @ 2022-11-12 09:30 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 b.d void first(int) { } a.d import b : foo = first; import c : foo = second; void main() { foo(1); // works foo("hello"); // works alias overloads 阅读全文
posted @ 2022-11-11 09:24 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 像这样: A[] arr; A fragment = new A; ... arr.remove(fragment); 你可以这样: import std.algorithm; arr = arr.remove(arr.countUntil(fragment)); 阅读全文
posted @ 2022-11-11 09:23 zjh6 阅读(27) 评论(0) 推荐(0) 编辑
摘要:原文 import std; class Test { float[3] _position = [0,0,0]; float[3] position() { writeln("Get"); return _position; } float[3] position(float[3] value) 阅读全文
posted @ 2022-11-11 09:02 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:let s:dx=[] "放在外部.表已初化." fun! Ddq() "多逗清,多个逗号清理," let i=Dhhb(s:dx) let @+=i let s:dx=[] "清理,然后可以使用剪切板." endf "用两个函数实现`.k`清理.`.j`加,再`.k`就有了." fun! Ddj( 阅读全文
posted @ 2022-11-10 18:16 zjh6 阅读(30) 评论(0) 推荐(0) 编辑
摘要://用 串极=函数<极(串&)>; 元<串极...F>空 批函数(串&a){ (F(a)&&...); } 极 f(串&a){ 打印("f",a);中 假; } 极 g(串&a){ 打印("g",a);中 真; } 空 主(){ 串 e{"啊啊"}; 批函数<f,g>(e); 批函数<g,f>(e) 阅读全文
posted @ 2022-11-10 16:59 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 我为自己构建并从C移植到D的金融工具包中的主应用,使用了gtk3和sqlite3C库.来谈谈gtk,它是个有许多令人费解的复杂头文件的大系统.我在D代码中处理了gtk. alias gconstpointer = immutable(void) *; struct GtkWindow; //这 阅读全文
posted @ 2022-11-10 11:29 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:链接,Walter注释: 如果有stdio.h,用导入C,可: import stdio; 然后,D编译器读h文件,解析它,并按D方式展示接口.D自带了C解析器.在此. 1.D编译器是否包含完整的C编译器? 2.D编译器如何处理特定GCC与Clang的C扩展? 1.是的,但是只有cparse.d文件 阅读全文
posted @ 2022-11-10 11:10 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 import std.exception; import std.file; import std.path; import std.stdio; void ls() { foreach (e; dirEntries(absolutePath("./deleteme"), SpanMode.b 阅读全文
posted @ 2022-11-10 10:36 zjh6 阅读(2) 评论(0) 推荐(0) 编辑
摘要:原文 char inc(string s, ref int i) { scope(success) i++; return s[i]; } void main() { int i; inc("string", i); } 汇编代码略 它包含scope(success)语句不需要的异常处理代码,可看到 阅读全文
posted @ 2022-11-10 10:25 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 if (vkCreateInstance(&createInfo, null, &instance) != VK_SUCCESS) { ... } 官方错误基于异常: class VKException : Exception { this(string msg) { super(msg); 阅读全文
posted @ 2022-11-10 09:23 zjh6 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原文 几个月前,我用D展示了白噪声应用并用了一点,但后来想添加其他噪声颜色和图界. 我在网上搜索了些代码来复制/粘贴噪音(并找到了以下代码:https://noisehack.com/generate-noise-web-audio-api/,D的一个优点是它很容易从其他语言移植代码.复制/粘贴,j 阅读全文
posted @ 2022-11-09 12:00 zjh6 阅读(71) 评论(0) 推荐(0) 编辑
摘要:原文 可惜,因为该bug需要在大的开关中插件,不能分享小示例代码. 可在此处找到可触发该问题示例:这里 编译时间主要由lexString.d中lexHtmlEntity的mixin决定. 使用该函数,编译jsonlexer,在系统上花费了45秒. 如果没有它,则只需要0.3s. 似乎有些非线性,因为 阅读全文
posted @ 2022-11-09 10:18 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 为了创建对象时传递串,必须通过值吗?如果我有个包含串的变量,可引用传递它吗? 应总是对类型和它的引用重载构造器吗? 对C变量,有个丢弃.为什么?对象不在栈上创建? import std.stdio : writeln; class A { private string str = "基"; t 阅读全文
posted @ 2022-11-08 21:46 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:初化项目 mkdir myproject cd myproject dub init dub add dmd dub run 第1示例 // lexer unittest { import dmd.lexer; import dmd.tokens; import dmd.globals; impor 阅读全文
posted @ 2022-11-08 16:23 zjh6 阅读(31) 评论(0) 推荐(0) 编辑
摘要:原文 无指针类型GC内存块不会增加gc暂停时间. 当前实现中的GC优化技巧 对D的GC来说,最差之一是有个很大的活动堆.它接近内存极限,垃集,降低一点,赋值,又回到极限,你花费大量时间在GC上,甚至无法成功收集!最后,一遍又一遍地扫描所有内存,只为了释放一点点. 写屏障支持的分代GC,给出一个方案, 阅读全文
posted @ 2022-11-08 11:08 zjh6 阅读(83) 评论(0) 推荐(0) 编辑
摘要:类概述 有六类: 1,多继承加基类(多继基) 2,句柄包装类(包柄) 3,直接使用(原样) 4,实现窗口(有WindowProc)或其他,(实现) 5,助手类(助手) 6,实现基类(基) 应用或模块支持 类名用法说明:C应用模块原样应用支持,从ComModule继承C服务器应用模块原样COM服务器模 阅读全文
posted @ 2022-11-08 09:51 zjh6 阅读(21) 评论(0) 推荐(0) 编辑
摘要:原文 struct S { int[] data; this(int[] _data) { data = _data; } } S makeS() { int[5] data = [ 1, 2, 3, 4, 5 ]; return S(data); } void func(S s) { import 阅读全文
posted @ 2022-11-07 19:27 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 我发现empty/front/popNext协议在一般(至少在Weka代码库中)非常麻烦,人们更喜欢opApply(尽管有自己的问题). 今天甚至遇见了使用现有协议无法解决问题:如果foreach中断了,消费区间(比如文件流)不应消费.使用opApply,这很容易(闭包返回非零值),但是使用p 阅读全文
posted @ 2022-11-05 21:10 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:fun! Qjtwj(f,...) "区间头尾基,要求先用.t,.w设置头尾, "每个函数都要求前2个为(本行,首行,剩余参数) "就可以通过.t,.w进行动作." let H=function(a:f) let m=s:bt echo[s:bt,s:bw] call Ths(m) "先跳行数,再一 阅读全文
posted @ 2022-11-05 17:46 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:fun! Eddk(i) "edge打开行,文件名.html "echom a:i let k=Qdqml() let k=k. '\' . a:i let i="start msedge " . k call Xttb(i) "太难了." endf 1,必须要有当前位置 2,start msedg 阅读全文
posted @ 2022-11-05 11:07 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 //% cat test.d extern(C): unittest { extern(C) static void foo(){}; pragma(msg, typeof(foo)); pragma(msg, typeof(&foo)); }//取消了extern(C) //命令. % dm 阅读全文
posted @ 2022-11-04 21:37 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 iota()没有保存功能吗? import std.stdio; import std.range; void main() { foreach(num; iota!char('a', 'f').chunks(3)/* "1234".chunks(3)//*/ ) { //auto n = n 阅读全文
posted @ 2022-11-04 20:20 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 我遇见歧义了. float recurse()(float val, float till) { return val < till? recurse(val * 2, till): val; } @safe void main() { import std; writeln(recurse( 阅读全文
posted @ 2022-11-04 11:19 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 //示例代码: interface IFont { IFont createFontWithSize(int size); } //主代码 import common; class TTFFont : IFont { IFont createFontWithSize(int size){ret 阅读全文
posted @ 2022-11-04 10:39 zjh6 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原文 //c++ #include <iostream> class A { public: void foo() { std::cout << "foo" << std::endl; } }; int main() { auto a1 = new A; a1->foo(); // prints " 阅读全文
posted @ 2022-11-04 10:12 zjh6 阅读(45) 评论(0) 推荐(0) 编辑
摘要:原文 我有下面的类: class A { int[] array; ... void print() { writeln("array = ", this.array); } } 是否可用assert来测试print函数,对stdout的输出,如下? A myClass= new A; myClas 阅读全文
posted @ 2022-11-04 09:33 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 如下无法编译: // test.c static int *do_something(int * const p){ int * const data = p; *data = 2; // 错误:无法修改`'*data'常'`表达式 return 0; }//从sqlite中化简. 不知道该怎 阅读全文
posted @ 2022-11-03 11:39 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 ImportC是C11编译器.关注的是标准兼容性,而不是实现大量不同的扩展. 火卫一(D标准库)包含一份zlib语言,ImportC消除了在DMD构建过程中需要外部C编译器,即所有DMD都可以由DMD构建.实际上,这是ImportC开发背后的动机之一. 用DMD构建oksh oksh不含D代码 阅读全文
posted @ 2022-11-03 09:51 zjh6 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原文 人员 D语言基金会2022年10月的会议是季度性的,即有几个行业代表参加了会议.会议在2022年10月7日14:00UTC的JitsiMeet举行. 以下人员参加了会议(名字旁边有DLF的人或为D语言基金会董事会成员,或为受薪员工,或为附属志愿者): 1,安德烈.亚历山大雷斯库(AA) 2,M 阅读全文
posted @ 2022-11-02 16:10 zjh6 阅读(58) 评论(0) 推荐(0) 编辑
摘要:原文 考虑: struct Key { immutable(int)[] reference; } struct Foo { immutable(int)[Key] 哈希映; } void main() { immutable Foo foo = Foo(); Foo bar = foo; } "K 阅读全文
posted @ 2022-11-02 15:09 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 在窗口上安装DMD时,根据如何设置PC九分决定使用的链接器. 如果在下载DMD(从站点和安装程序)之前,在窗口上安装了VS并有"使用C++桌面开发",那么链接最好以MSVC的为默认设置. 如果在VS之前,而不带该扩展的安装DMD,则默认链接器是LLD链接器. 有两种方法可更改DMD的链接器: 阅读全文
posted @ 2022-11-02 09:14 zjh6 阅读(29) 评论(0) 推荐(0) 编辑
摘要:原文 最新101.0版本dmd可接受以下代码: int global; int* foo(scope int* p)@safe{ auto dg=(return scope int* q)@safe return scope{ return p; }; return dg(&global); } a 阅读全文
posted @ 2022-11-01 10:35 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 我开始思考编译器中的指针障碍.不把它们看作新类型,而是当作类似切片中的增加了安全性和功能的检查区间,但在特例下,如果必要,可在本地和全局绕过它们. 你仍然拥有今天D所拥有的指针.唯一区别是添加了一种绕过GC写障碍的方法,可能类似: core.memory.__raw(T) // struct 阅读全文
posted @ 2022-11-01 10:23 zjh6 阅读(12) 评论(0) 推荐(0) 编辑

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