08 2022 档案

摘要:#IfWinActive ahk_class Vim RAlt::NumpadAdd #IfWinActive 先加上,同时如果RAlt另有映射,放在这里面: #IfWinNotActive ahk_class Vim RAlt::其他功能 #IfWinNotActive 然后在,vim中加上: n 阅读全文
posted @ 2022-08-31 21:50 zjh6 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原文 如果设置std.conv.RefCounted的析构器为@safe,则下面的代码用-preview=dip1000成功编译,但不应如此.如果使用中域而不是域容器局部,它编译正确的不,但用户不应手动.编译器不应编译逃避局部引用的易错代码.参考 import std.stdio; import s 阅读全文
posted @ 2022-08-31 21:16 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 化简示例: @safe void check() { int random; auto createGenerator() { return RndValueGen(&random); } scope gen = createGenerator; } struct RndValueGen { 阅读全文
posted @ 2022-08-31 17:45 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 C c; class C { ~this() @safe { c = this; } } 这是可以接受的,但不安全.我建议始终按"域"标记析构器 赋值类引用给另一个类引用是安全的.我同意 除非赋值垃圾,更详细的不安全示例: import std.stdio: writeln; import c 阅读全文
posted @ 2022-08-31 14:43 zjh6 阅读(5) 评论(0) 推荐(0) 编辑
摘要:我会远离快速数学.但是,如果你想用它,就得靠你自己了,因为D假设IEEE数学. 因此断定可引入新的_未定义行为_. "快速数学",也因编译器而异,有时会使事情变慢! 甚至需要它来提高性能吗?不确定,因为只是矢量化,无论是自动的还是显式的,都会带来更好的结果.至少,这是我使用LLVM后端的经验. 最好 阅读全文
posted @ 2022-08-31 11:31 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 void main() @safe { int i = 1; static int j = 2; auto dg1 = () shared @safe => i; // 错误 auto dg2 = () shared @safe => j; // 无误?? } 闭包上的shared属性应用至抓 阅读全文
posted @ 2022-08-31 10:31 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原文 interface Foo { } 一些人想用com.命令dmd -betterC file.d,对ldc是可以,而dmd不成立. 根据规范: COM接口定义为从core.stdc.windows.com.IUnknown接口派生的接口. 示例不是COM接口,因而BetterC上不可用,即使L 阅读全文
posted @ 2022-08-31 10:18 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 module object; alias size_t = typeof(int.sizeof); alias ptrdiff_t = typeof(cast(void*)0 - cast(void*)0); alias sizediff_t = ptrdiff_t; // 后向兼容 only 阅读全文
posted @ 2022-08-30 11:34 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 应允许__traits(parameters)出现在函数的任何部分,而不仅仅是body和in和out合约中. 应允许如下: typeof(__traits(parameters))[0] f(Ts...)(Ts args) { ... } void f(Ts...)(Ts args) if ( 阅读全文
posted @ 2022-08-30 10:58 zjh6 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原文 dmd以下代码段错误,LDC无误. enum Test {A, B, C} Test test = Test.A; extern(C) void main() { switch(test) { default: break; } } 无法在Linux上使用dmd主分支重现,可能仅限于Windo 阅读全文
posted @ 2022-08-30 10:23 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:import std.stdio; import core.sync.rwmutex : ReadWriteMutex; enum PAGE_SIZE = 4096; alias PageId = uint; ubyte[] toBytes(uint value) { ubyte[] bytes = 阅读全文
posted @ 2022-08-30 10:04 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 import std.array; import std.format; public class BinaryOperatorExpression { private { string operator; Expression firstExpr; Expression secondExpr 阅读全文
posted @ 2022-08-30 09:44 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 struct std_string { std_string* ptr; ulong[3] data; this (ulong data) { this.data[] = data; this.ptr = &this;//这里 }//生命期不一致. this(const scope ref s 阅读全文
posted @ 2022-08-29 11:15 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 class Bar { } class Foo { Bar get() { return new Bar; } alias get this; } void main() { auto foo = new Foo; void test(Bar delegate() dg) { assert(d 阅读全文
posted @ 2022-08-29 11:14 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 gettext国际化包. Mathias 问题,dmd正在移动具有复制构造器的结构.导致了不能移植core.stdcpp.但是LDC和GDC按期望工作. d作者认为事情是因为,其中一个复制构造器正在传递右值,导致复制到栈上,而未更新内部指针. 建议进一步简化该示例,以确定问题. GDC行为是由 阅读全文
posted @ 2022-08-29 10:53 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:getcurpos()与cursor等位置函数,都要小心使用. fun! Zlgbp(p) "置列光标偏.偏移,p可为正或负" let [a,b,c,d,e]=getcurpos() let m=e+a:p "let m=e-1+a:p" "问题就在这里,这里一定要-1,不要问题找半天" "e-1是 阅读全文
posted @ 2022-08-28 22:01 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 理想方法是让每个头文件都有自己的模块. 这几乎需要DMD合并C预处理器,对吧?因为这是可靠确定包含哪些标头的唯一方法. 最好方法是实现C23的带相同标签的相同类型是一样的,标签兼容规则的一些变体.导入到全局C命名空间表明,不能使用类型定义冲突的两个C标头.理想,使用D中的C应该比使用C中的C更 阅读全文
posted @ 2022-08-28 11:16 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 @disablenew可禁止new符号,这样垃集就不会管理它,然后出现导致析构器/终结器混淆的麻烦.但它目前也禁止域. class A { @disable new(); } void main() { scope A a = new A(); } 禁止new的目的更多与管理生命期有关.与按特 阅读全文
posted @ 2022-08-28 10:38 zjh6 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原文 标::元组,无法优化性能.可平凡复制可使memcpy复制对象进二进制缓冲. 元<整 I,型名 T>构 元素持有者{ 用 类型=T;T 值; }; 元<型名 S,型名...T>构 元组实现; 元<型名...T,整...I> 构 元组实现<引序<I...>,T...> :元素持有者<I,T>... 阅读全文
posted @ 2022-08-28 10:01 zjh6 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原文 应编译,但未编译: struct MyType { private @system int* _content; // 设计为_content永不局部数据 @trusted pure this(return ref int i){_content = new int(i);} // 注意,未标 阅读全文
posted @ 2022-08-27 11:48 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:前文在此,请先阅读. 这里: ref int* index() return scope { return *ptr; } 编译器这样看: ref return scope T index(); 按ref和return scope附加到this.a是this.因为a是scope,所以a.index( 阅读全文
posted @ 2022-08-27 11:09 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 struct ReverseBitRange { /// 每个size_t中字节数 enum bitsPerWord = size_t.sizeof * 8; private { const(size_t)*bits;//指向下一个待检查字节 size_t cur; // 需要允许使用bsf搜 阅读全文
posted @ 2022-08-27 10:16 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 void foo(参数) { Object lock = (特定条件) ? realLock : null; synchronized(lock) { // 复杂代码. } } 即,根据特定条件,复杂代码块要么需要同步保护,要么不需要. 方法foo有很多参数,我尽量避免重构内部代码块为单独的方 阅读全文
posted @ 2022-08-27 10:03 zjh6 阅读(24) 评论(0) 推荐(0) 编辑
摘要:NaN还有另一个用途.如,数据收集不完整(传感器阵列中有一个坏点),则为该数据点提供NaN值,帮助显示数据分析结果:哪一部分取决于丢失数据. 想想空指针,只要试用它们,就会爆炸.完全正确的机制,它应在接近初化的地方. 最重要的是我发现*有*一个问题. DEADBEEF把隐藏漏洞变成了可重现的漏洞.如 阅读全文
posted @ 2022-08-27 09:03 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:getline,是以1开始的. range(),这个区间也非常危险,是分情况,左闭右闭的. 还有,col等. vim中有两套,1种以1开头,1是普通的0开头. 阅读全文
posted @ 2022-08-26 16:54 zjh6 阅读(6) 评论(0) 推荐(0) 编辑
摘要:它甚至进度不到1/10. 它几乎什么都不做.唯一可辨别的区分是typeof: struct S { int prop1() { return 1; } @property int prop2() { return 2; } } pragma(msg, typeof(S.prop1)); // int 阅读全文
posted @ 2022-08-26 11:27 zjh6 阅读(208) 评论(0) 推荐(0) 编辑
摘要:原文 从数据源传递32位数据,构造器,一切都很好,但我不能用foo()方便函数保持对象活着. 示例: import std.stdio; struct S { char[size] bytes; alias toString this; string toString() const { scope 阅读全文
posted @ 2022-08-26 11:08 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:恕我直言,这是更好的方法,甚至不是异常,而是错误. 只要你有NaN值,程序就是无用和损坏的. 只要变量变为NaN,就应该抛它,而不仅是在操作时. 如下成立时它应该抛: 1,初化值为NaN并在操作中使用 2,在初化外,置值为NaN 3,从函数返回NaN 这解决所有问题,因为: 你永远不会在整个程序中传 阅读全文
posted @ 2022-08-26 10:40 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:我们给文件加上模式行: let s:llb='"/* vim: set ft=vim.lml : */"' 加上如上内容,vim.lml,这里用点连接,表示是vim文件,且为lml子类型,然后,可在 E:\Vim\vimfiles\after\ftplugin目录中的lml.vim文件中搞事情,比如 阅读全文
posted @ 2022-08-25 18:41 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:即使在正确计算中,0.0也不是稀有的值.NaN总是错误的.0初化不会让它更好. NaN传播.0.0不能. 检测所有代码来检测0.0是否有效?不,误报太多了,因为0.0是浮点常用值. 除非它是全局/静态变量,C和C++初化它们为垃圾.是最糟糕的选择,因为它很难追踪. 其他语言,基本上不默认初化浮点数为 阅读全文
posted @ 2022-08-25 10:49 zjh6 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原文 在dub上称为arsd-official,该库是一组大约80个一般独立模块,可从中单独挑选函数: terminal.d用于交互式文本应用(类似ncurses和getline库), 用于图形应用的simpledisplay,simpleaudio和joystick操作杆(类似SDL库) cgi. 阅读全文
posted @ 2022-08-25 10:02 zjh6 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原文 用-preview=dip1000标志,应可编译,但未编译. @safe int[] fun() { import std : 数组, map; 域 r = [1,2,3].map!"a+3"; return r.数组; } 如果直接返回r,数据引用会逃逸,但数组会复制数据.无论有域与否,应允 阅读全文
posted @ 2022-08-25 09:23 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:命令='gvim "文件名" -c "call 函数()" ' 系统(命令) 阅读全文
posted @ 2022-08-24 17:54 zjh6 阅读(21) 评论(0) 推荐(0) 编辑
摘要:C++元串用法. 元<常符*c,类...N> 空 动作(N&...t){//m为符们. 串 e=c;... } 模板参数,用常符*c,用好了,非常巴适. 阅读全文
posted @ 2022-08-24 16:05 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 如何格式化串,来显示打印\n和\t等? r"ab\n" //或 `ab\n` //或 "abc\\ndef\\tghi" 但如果是运行时串,可能必须用std.regex.replaceAll等来手动转义字符.或用管道手动替换: string myString = ...; string esc 阅读全文
posted @ 2022-08-24 09:25 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:if(snipMate#CanBeTriggered()) call snipMate#TriggerSnippet() "如果可以触发snipmate" return endif 上面,还可以再改下,改为这样: if(snipMate#CanBeTriggered()) "call snipMat 阅读全文
posted @ 2022-08-23 22:25 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:vsp分割窗口进入插入模式,要退出它. 这样做: call feedkeys("\<esc>") 发送退出按键,这样就行了. 阅读全文
posted @ 2022-08-23 17:11 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:直觉,是这是用户错误.使用UDA的人都要知道,不是像普通表达式那样求值UDA. 即,如果想提供更好的API,建议是接受(a):U的实例,或(b)返回U的可调用,可如下编码: import std.traits, std.meta; enum isOrReturnsU(alias attr) = is 阅读全文
posted @ 2022-08-23 10:25 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 我设法制作了可保存常性的通用getParent()函数.对inout也可以. 但可对所有父输入区间生产函数这样做吗? 在常区间实现中,内部存储是非常的,只是在front()属性中隐式转换为常. 它提供了我需要的保护,但可更漂亮吗? import std; class A{ inout(A) g 阅读全文
posted @ 2022-08-23 09:32 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:U().func!0不是调用吗? 这可行,但看起来很奇怪,我正在检查UDA表达式的类型: @(U().func!0) int b; pragma(msg,__traits(getAttributes,b));//tuple(U().func) pragma(msg,typeof(__traits(g 阅读全文
posted @ 2022-08-22 23:29 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:元<极 降序=0,整数 F,整数 T>极 有序一(F&f,T&t){ 如 常式(降序){ 中(f>=t); }异{ 中(f<=t); } } 元<极 降序=0,整数 F,整数 G,整数...T> 极 有序(F&f,G&g,T&...t){ 静 常式 整 I=型长...(T); 极 i=有序一<降序> 阅读全文
posted @ 2022-08-22 17:03 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 struct U { auto ref func(int i)() { return this; } } void main() { { alias type = typeof(U().func!0); pragma(msg, type); // pure nothrow @nogc ref 阅读全文
posted @ 2022-08-22 14:45 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 正确使用受者 异网受者有通过端点构造的重载函数,创建受者之后就可以接受了,代码如下: 用 异网::ip::传控; 传控::受者 受者(io环境,传控::端点(传控::v4(),端口)); 受者.异步接受(套接字,[](异网::错误码 ec){}); 该代码一般情况下没问题,但是如果端口被占用就 阅读全文
posted @ 2022-08-22 10:39 zjh6 阅读(54) 评论(0) 推荐(0) 编辑
摘要:原文 strand,锁+发送队列和提交+发送队列,哪种方法更好呢?性能说话.答案是提交+发送队列>锁+发送队列>strand. 提交方法连续发送数据的另一个好处是,内部io线程需要连续发送数据时是无锁的,只有提交那里有锁,锁的范围很小,同时也影响io线程发数据的效率,它的效率无疑是最高的. 另一个场 阅读全文
posted @ 2022-08-22 10:03 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原文 通用,hashOf函数: override size_t toHash() const { return hashOf(y, hashOf(x)); } 这里: enum defaultClassConstructor = q{ this(typeof(this.tupleof) params 阅读全文
posted @ 2022-08-22 09:37 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 import std.checkedint; Checked!(int, WithNaN) n; assert(n.isNaN); assert((123 * n).isNaN); assert((123 / n).isNaN); assert((123 + n).isNaN); assert 阅读全文
posted @ 2022-08-21 22:01 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:可这样: static assert(float() is float.nan); 这仅适合float.init,但如果操作它并返回nan,那不一定是真的,因为nans有几种位模式. static assert(float() is real.nan); static assert(double() 阅读全文
posted @ 2022-08-21 09:52 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 import std; void doSomething(int i, string s) { writeln("%s-%s".format(i, s)); } void main() { foreach (t; cartesianProduct(iota(1, 4), ["abc", "de 阅读全文
posted @ 2022-08-21 09:00 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 C中的X宏非常适合从表格数据生成编译时代码.尤其是对微控制器上的引脚分配及其各自的功能,我还没有看到其他语言提供如此简洁,易于维护的方式来交互和表示数据. 挑战不大: //你示例 enum Color { red, blue, green } static immutable colorStr 阅读全文
posted @ 2022-08-21 08:50 zjh6 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原文 我不明白.带NaN操作都会产生NaN结果.如果有NaN结果,可追溯到它的源头.而这对0初化很难. 为何要用浮点来绘画坐标?此外,我想知道是否在调用一个函数时,我会在其中放一个printf.或在调试器中置断点.这是例行调试工作.然后查看参数值.回到过去,我会让嵌入式系统单击扬声器来查看它是否输入 阅读全文
posted @ 2022-08-20 15:04 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 import core.sys.windows.setupapi; void main() { SP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetail; uint Offset = DeviceInterfaceDetail.Device 阅读全文
posted @ 2022-08-20 10:48 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 import std.stdio; import std.random; import fast_noise; void main() { // 示例 FNLState noise = fnlCreateState(); noise.seed = unpredictableSeed(); no 阅读全文
posted @ 2022-08-20 10:14 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 enum PAGE_SIZE = 4096; enum HEADER_SIZE = (uint.sizeof) * 6; enum TUPLE_SLOT_SIZE = (uint.sizeof) * 2; struct TupleSlot { uint offset; uint size; } 阅读全文
posted @ 2022-08-20 10:10 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:极点五笔啥都好,就是有个,不一会儿,就变半行的问题.每次都要再手动去调整,真是折腾. 现在,可以借助AskAdmin来搞定.禁止其他软件访问skin目录.这样极点五笔,就不会变半行了. 软件地址 此方法,仍不可靠. 阅读全文
posted @ 2022-08-19 20:17 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 根据官方文档处理shared变量时,只允许原子操作它们.但是由于只能一个线程访问synchronized类,因此即使在shared环境中,允许访问其成员也是合理的,编译器至少应允许如下小代码: synchronized class A{ private: int a; public: this 阅读全文
posted @ 2022-08-19 20:00 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 即使未定义dsds和sadsad,此代码也可以编译. import std.typecons : Tuple; sadsad executeFunction(Mtypes...)(dstring func, Tuple!(Mtypes) args) { static foreach(type; 阅读全文
posted @ 2022-08-19 16:01 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:1,yt,另开当前选项卡. 2,<<与>>左移与右移选项卡. 3,yy复制链接 4,p当前窗口打开剪切板链接,P新标签中… 阅读全文
posted @ 2022-08-19 15:46 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 原文2 工具: core.Thread std.concurrency.spawn std.parallelism.task / taskPool vibe.d.runTask etc. 代码: auto fun() { return spawn(...); } void gun() { au 阅读全文
posted @ 2022-08-19 15:23 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 import std.stdio; import std.parallelism; import std.conv; enum I = 1_000; enum J = 1_000; void main() { auto results = new int[I * J]; //如果想要新的任务池 阅读全文
posted @ 2022-08-19 14:48 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 void main(immutable string[] argv) @safe @live { class Test { string a; } auto testInstance = new Test; testInstance.a = "Test String"; import std. 阅读全文
posted @ 2022-08-19 14:41 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:如果依赖仓库有问题,可以这样让dub强制用本地仓库: 1,分叉git仓库 2,在/path/to/the_package处复制本地克隆. 3,让Dub知道: dub add-local /path/to/the_package 4,让Dub忽略已配置的发布标签,因此会看到当前更改的效果: dub a 阅读全文
posted @ 2022-08-19 09:16 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 struct ArenaChunk { size_t size; ArenaChunk* next; char[] memory; // 动态数组成员. } struct Arena { ArenaChunk* firstChunk; ArenaChunk* currChunk; int cu 阅读全文
posted @ 2022-08-18 21:08 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 enum itoa(int i) = i.stringof; enum major = 3; enum minor = 2; enum patch = 1; enum versionString = itoa!major ~ "." ~ itoa!minor ~ "." ~ itoa!patc 阅读全文
posted @ 2022-08-17 19:30 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 我注意到D运行时的原位数组扩展优化仅适合特定内存对齐的数组数据. 除了重复向数组加元素之外,使用以下程序来测试, -version=neither不会删除元素(这也是"好") -version=bad丢弃前面元素(移动窗口为1) -'version=good'仅当元素数据达到某个对齐值时,才会 阅读全文
posted @ 2022-08-17 16:02 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 //empty.d: void main() { } dmd -de -w empty.d 空代码,却有869KiB.如何减小? 这是正常的,默认你有很多类型信息(允许动态自省的静态数据),在隐式导入object.d中的代码,运行时(如用于GC的代码). 除了使用-betterC,真的可以摆脱 阅读全文
posted @ 2022-08-16 20:55 zjh6 阅读(26) 评论(0) 推荐(0) 编辑
摘要:有一段时间我也有类似想法,过去出现了很多潜在用例. 最明显示例是vibe.d的目前仅用作文档的@blocking等,但如果可在编译时强制@nonblocking等,就非常有用,目前只有运行时方法. 是的,一般,异步有大量这类用途.除了不占用工作线程外,响应取消请求也是好事. 说到阻塞,我设想的效果之 阅读全文
posted @ 2022-08-16 17:00 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:std.conv.octal中还有字面. 不应删除,内置二进制字面.cgi.d比vibe.d更快. 模板化druntime,简单调用dom.d,就够了. 如果可以在库代码中定义@nogc,pure甚至像@vibe_fiber_safe等等,而不是在编译器中添加,会怎么样? 我反对@nogc的(许多) 阅读全文
posted @ 2022-08-16 16:07 zjh6 阅读(68) 评论(0) 推荐(0) 编辑
摘要:原文 @safe: int global; auto f(int* x, int* y) {//xy推导为域. x = y; global++; // 确保不是从pure中推导为域 } void g(scope int* z) { f(z, z); // 通过 } 按scope显式标记x和y时,会出 阅读全文
posted @ 2022-08-16 11:26 zjh6 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原文 出现在自定义动态数组类型中. //用-preview=dip1000编译 @safe: struct Arr { int** ptr; ref int* index() return scope { return *ptr; } void assign(int* p) scope { *ptr 阅读全文
posted @ 2022-08-16 10:53 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 fn嵌套函数不会在这里推断return. int* gPtr; void main() @safe { scope int* sPtr; int* fn() { return sPtr; } gPtr = fn(); } 可能最明智方法是允许非静态嵌套函数具有"return"和"scope"属 阅读全文
posted @ 2022-08-16 10:32 zjh6 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原文 垃集规范提到,结构中具有内部指针是未定义行为. @safe代码中禁止未定义行为,但允许创建内部指针,而这可能会破坏dip1000: //用-preview=dip1000编译 @safe: struct S { int storage; int* ptr; this(int dummy) { 阅读全文
posted @ 2022-08-16 10:23 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 import std.stdio; import std.exception; private: class E1 : Exception { mixin basicExceptionCtors; } class E2 : Exception { mixin basicExceptionCto 阅读全文
posted @ 2022-08-15 10:10 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:fun! Dft(t="") "单符头." exe 'set opfunc='.a:t return "\<Esc>g@e" endf fun! Ts2(t) "只处理1个符即可." let i="dj".Qyf() echo i endf //然后 nnoremap <expr> gz Dft(' 阅读全文
posted @ 2022-08-14 21:28 zjh6 阅读(5) 评论(0) 推荐(0) 编辑
摘要:fun! Ts(t="") echo a:t if a:t=="" set opfunc=Ts return "g@e" "return "I"" endif let i="dj".Qyf() echo i endf " 实验表明,效果并不好.不折腾这种了. 阅读全文
posted @ 2022-08-14 16:38 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:设置/时间语言==语言键盘/输入语言热键 在输入语言间,或切换到极点中改一改.先选中,再点tab键. 阅读全文
posted @ 2022-08-14 16:17 zjh6 阅读(77) 评论(0) 推荐(0) 编辑
摘要:加行号: function! s:Seqno(type,...) let i = line("'[") let j = line("']") for l in range(i,j) execute l."s/^\\s*/\\0".(l-i+1).'. ' endfor endfunction fun 阅读全文
posted @ 2022-08-13 18:13 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原文 如用\u打开url.而\ui]打开[]中url.而\u$/\uu/等. "从unimpaired.vim改编" function! s:DoAction(algorithm,type) " 备份设置" let sel_save = &selection let cb_save = &clipb 阅读全文
posted @ 2022-08-13 18:09 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:更改列表,:changes显示,是更改的位置列表,可用g;和g,浏览. g+和g-用于撤销列表.可用:undolist显示它. vim默认关闭永久会话列表.用set undofile来打开. 你部分原因是,@/在函数结束时恢复了.见:help function-search-undo,可从函数中用r 阅读全文
posted @ 2022-08-13 16:51 zjh6 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原文 foo [内容] bar ''' 更多 '''更多东西 syntax region specialCommand start='\<foo\s' end='$' skip='&$' \ keepend contains=tripleQuoted syntax region tripleQuot 阅读全文
posted @ 2022-08-13 11:22 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原文 auto contextWithException(T, E)(lazy scope T expression, Exception delegate(E) handler) { Exception newException; try { return expression(); } catc 阅读全文
posted @ 2022-08-13 08:50 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:文本中每个位置的结果高亮显示,是根据该位置嵌套最深的语法匹配设置的.如果这样的匹配缺少背景属性,则就用正常组. 因此,必须独立更改每个"最终"比赛亮点.所以答案是否定的,你不能.至少,不能通过语法匹配机制. 全局变量仍与旧脚本中的相同,因此unlet像以前一样工作.唯一的区别是现在总是需要g:前缀来 阅读全文
posted @ 2022-08-12 17:42 zjh6 阅读(35) 评论(0) 推荐(0) 编辑
摘要:'foo' : 'bar', //<=> foo = 'bar' 但想用.多次运行. function! s:var2dict(...) if a:0 "动作" " let save_cursor = getcurpos()" execute "normal! I'\<ESC>ea'\<ESC>f= 阅读全文
posted @ 2022-08-12 16:12 zjh6 阅读(6) 评论(0) 推荐(0) 编辑
摘要:可以通过g@传递它们来创建可重复映射 function! s:insspace(...) if a:0 execute 'normal' v:count1.'i '."\<esc>".'`[' else " 安装" let &operatorfunc = matchstr(expand('<sfil 阅读全文
posted @ 2022-08-12 15:54 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 @safe: alias DG = void delegate() @safe; void main() { DG dg = getDg(42); stompStack(); dg(); } DG getDg(int val) { return forwardDg(val); } DG for 阅读全文
posted @ 2022-08-12 15:44 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 不能在@safe代码中拥有指向栈内存的全局变量 int** global; immutable int imm; static this() { imm = 42; } void main() @safe { f(); /* `global` 现在指向栈.*/ stomp(); /* `*gl 阅读全文
posted @ 2022-08-12 15:25 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 function! Jump(jumpcommands) let l:location = getcurpos('.') for jumpkey in a:jumpcommands execute "normal! " jumpkey if l:location != getcurpos('. 阅读全文
posted @ 2022-08-12 15:09 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 添加环境信息到可能无法访问传播异常的抛代码中. 是的,但可再次这样:抓一个,然后抛新的,并把旧的放在后面. 是的.但是,必须在每个可能想要添加环境信息的潜在抽象级别周围插入try/catch语法很痛苦.如果在战略入口点,用可插入的包装器,就更好了.如下? // 幻想的,假设的语法 auto m 阅读全文
posted @ 2022-08-12 11:28 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 void delegate() test(Object[] objs...) { return { foreach(obj; objs)assert(obj); }; } void delegate() foo() { return test(new Object, new Object); 阅读全文
posted @ 2022-08-12 11:02 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 module arsd.exception; interface ThrowableBase { void fly(string file = __FILE__, size_t line = __LINE__); //应该内置在编译器的throw语句中 // 需要时覆盖 void printM 阅读全文
posted @ 2022-08-12 10:45 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:function! MyFunc() let status = system("git status") if v:shell_error Files else GFiles endif endfunction //隐藏变长码,`vim-unicode-homoglyphs`. augroup Hi 阅读全文
posted @ 2022-08-12 09:46 zjh6 阅读(21) 评论(0) 推荐(0) 编辑
摘要:syn region markdownLinkText matchgroup=markdownLinkTextDelimiter \ start="!\=\[\%(\_[^]]*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" \ nextgroup=markd 阅读全文
posted @ 2022-08-12 09:45 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:syntax match pyOperator "<=" conceal cchar=≤ syntax match pyOperator ">=" conceal cchar=≥ syntax match pyOperator "!=" conceal cchar=? syntax match py 阅读全文
posted @ 2022-08-12 09:44 zjh6 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原文 module testcmpmodule; //公共导入 public import std.algorithm, std.math, std.stdio; import std.range, std.traits; //函数重载组. public import std.algorithm : 阅读全文
posted @ 2022-08-12 09:41 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原文 #!/usr/bin/env rdmd import std; auto contextWithString(T)(lazy scope T expression, string s) { try { return expression(); } catch (Exception e) { t 阅读全文
posted @ 2022-08-12 08:47 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:syntax match haskOperator "->" conceal cchar=→ syntax match haskOperator "<-" conceal cchar=← highlight! link haskOperator Normal setlocal concealleve 阅读全文
posted @ 2022-08-11 23:55 zjh6 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原文 按正则排序: :sort r /regex/ " 零宽度 :h /\@=" /<\@<=[^>]*>\@= :搜索标签内容,忽略>形 /<\@<=\_[^>]*>\@= :在可能的`多行`中搜索标签 :bufdo exe ":normal Gp" | update : :bufdo exe " 阅读全文
posted @ 2022-08-11 21:13 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]]) 在当前窗口,定义待高亮模式,会用{group}高亮组高亮.返回可用matchdelete()的(ID).其中ID是和窗口绑定的. 匹配区分大小写且带魔术的,但可在{patt 阅读全文
posted @ 2022-08-11 17:05 zjh6 阅读(77) 评论(0) 推荐(0) 编辑
摘要:原文 可以这样: struct MY_KEY { template opDispatch(string name) { static import bindbc.glfw; mixin(`alias opDispatch = bindbc.glfw.GLFW_KEY_`, name, `;`); } 阅读全文
posted @ 2022-08-11 15:42 zjh6 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原文 @safe void check() { int random; auto createGenerator() { int* p = &random; return p; } scope gen = createGenerator; } 它确实编译成功.两者都应成功编译,因为结构只是指针的包装 阅读全文
posted @ 2022-08-11 15:29 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原文 shared TT[] a; T processArray(T)(ref T[] p){/*...*/} //函数在参数上调用`.保留`.意思是`void`为函数`返回类型` a.processArray; //不能从`!()(shared(T[]))`推导. 即使更改函数为仅接受共享参数,. 阅读全文
posted @ 2022-08-11 10:23 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原文 测试用例: shared int[int] aa; void main () { cast()aa[1] = 1;//违反区间 } 原来工作正常. 你正在aa[1]上抛弃共享.该表达式是访问值,而不是赋值.与定义opIndex和opIndexAssign的结构(表达式调用opIndex,而不是 阅读全文
posted @ 2022-08-11 09:39 zjh6 阅读(17) 评论(0) 推荐(0) 编辑
摘要:alias ir = inclusiveRange; auto inclusiveRange(T = int)(T f = T(0), T l = T(0), T s = T(1)) { if(!l) { l = f; f = 0; } return InclusiveRange!T(f, l, s 阅读全文
posted @ 2022-08-11 08:54 zjh6 阅读(6) 评论(0) 推荐(0) 编辑
摘要:借助脚本变量来保存. fun! Ts() let i=win_getid() call Sgid(i) echo Ggid() endf Sgid(i)里面只是一个脚本变量而已.通过Ggid()来返回.同样,可以通过脚本变量在窗口间传值! 可任意传数据: fun! Ts() let i= [2,4, 阅读全文
posted @ 2022-08-10 20:56 zjh6 阅读(13) 评论(0) 推荐(0) 编辑
摘要:let window_count = winnr('$') let prev_window = winnr('#') 阅读全文
posted @ 2022-08-10 20:29 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 pure @nogc @safe BigInt opAssign(T : BigInt)(T x); //上下有何差别? pure @nogc @safe BigInt opAssign(BigInt x); 是的,这种语法允许任何隐式转换为BigInt;例如: import std.bigi 阅读全文
posted @ 2022-08-10 09:06 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 永远不要使用__gshared.这是明显安全漏洞.改为使用shared. 如果使用时遇见shared的编译错误,那是编译器在警告你.应该认真考虑线程安全,然后才在正确的位置抛弃shared. 使用__gshared,编译器假装没有看到变量是共享的.并除非仔细思考,保证会生成竞争. 顺便,有优先 阅读全文
posted @ 2022-08-09 11:17 zjh6 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原文 { import core.memory: GC; GC.disable(); scope(exit) GC.enable(); foreach (...) // 热代码. } void load_assets() { import core.memory: GC; // 分配,加载等. GC 阅读全文
posted @ 2022-08-09 08:17 zjh6 阅读(2) 评论(0) 推荐(0) 编辑
摘要:原文 struct TestArray(ulong element_n) { int[element_n] elements; this(string type)(ulong number) { pragma(msg, "类型为: " ~ typeof(type).stringof); } } // 阅读全文
posted @ 2022-08-08 23:14 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原文 struct Integers { private int z = 0; public bool empty() { return false; } public int front() { return this.z; } public void popFront() { this.z *= 阅读全文
posted @ 2022-08-08 09:09 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:function! textobj#dmk#select_a() ?``` let start_pos = getpos('.') normal!j /``` let end_pos = getpos('.') return ['V', start_pos, end_pos] endfunction 阅读全文
posted @ 2022-08-07 17:16 zjh6 阅读(8) 评论(0) 推荐(0) 编辑
摘要:float z = 85886696878585969769557975866955695.E0; //整溢出. real x = 0x1p-16383; //不能表示该数. 它是为了支持UFCS(通用函数调用语法).D兼容C的想法是,当代码有不同含义时,不要*安静*破坏代码.因此,这些,在D中会生 阅读全文
posted @ 2022-08-07 09:41 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 创建一个将在D中调用的C++函数. 使用CMake构建静态C++库,并添加依赖项(在我的例子中:SDL库) (dub init)创建新项目. 添加这些行到dub.json: "dflags": ["-L-lstdc++"], "lflags": ["-Lbuild", "-lframework 阅读全文
posted @ 2022-08-07 09:14 zjh6 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原文 D包没有关闭;谁都可随时加新模块. 可: static foreach (sym; __traits(allMembers, mixin("std.string"))) { pragma(msg, sym.stringof); } 然后必须检查sym是否是模板或函数或其他. static fo 阅读全文
posted @ 2022-08-06 09:53 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 通常在独立单元测试上工作,因为速度和更少输出,只想运行一个.而通常在文件中有几个单元测试.急需要命名单元测试. 只需要,version(newFeature) unittest {}. #! /usr/bin/env dub /++ dub.sdl: dflags "-preview=shor 阅读全文
posted @ 2022-08-06 09:14 zjh6 阅读(10) 评论(0) 推荐(0) 编辑
摘要:领域驱动设计 把值对象视为不变的.使无副作用函数,不依赖可变状态. 域事件一般不变,不应修改域代码操作的数据,相反,总是返回新数据. 大量使用UFCS域链来限制使用内存. 最好静态保证! 想用不变,传统上: struct ArrayContainer { @ConstRead private int 阅读全文
posted @ 2022-08-05 22:20 zjh6 阅读(11) 评论(0) 推荐(0) 编辑
摘要:作者:阿里 思想:AA:通过组合特征,来完成功能. 内容:涉及iota,parallel,static if,std.concurrency.receive和SumType. iota auto iota(B, E)(B begin, E end) if (!isIntegral!(CommonTy 阅读全文
posted @ 2022-08-05 18:05 zjh6 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原文 为什么是D? 强类型系统编程语言 原型立即投入生产 最佳C++集成,出色的C集成 支持的特征 几乎所有东西 class/struct,ref,指针,const,nothrow... 模板(!) 重载运算符(!!) 异常(!!!) 第0步,组织 +agora |-dub.json |-sourc 阅读全文
posted @ 2022-08-05 15:55 zjh6 阅读(82) 评论(0) 推荐(0) 编辑
摘要:原文 // Nullable,如何更好工作?技术上是`安全`的,但真不是. module turducken; import std.algorithm; import std.datetime; // 如何在`邪恶类型`上,早期解除绑定,并再后期绑定 // Turducken是答案. // 先,设 阅读全文
posted @ 2022-08-05 11:27 zjh6 阅读(21) 评论(0) 推荐(0) 编辑
摘要:#include <常用> 空 f(符 m){ 静 常 符 c{'c'},d{'d'}; 猜(m){ 若 c:若 d:打印(m);断; 默认:打印("啊啊"); } } 空 主(){ 符 c{'c'},d{'o'};f(c);f(d); } 阅读全文
posted @ 2022-08-04 23:39 zjh6 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原文 static struct S(E, T) { private T flags; private enum mask(string name) = 1 << __traits(getMember, E, name); pure nothrow @nogc @safe final { bool 阅读全文
posted @ 2022-08-04 13:23 zjh6 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原文 不要直接用.toString,用std.format.format. import std; void main() { auto x = BigInt("123123123123123123123123123123123123"); string s = format("%s", x); / 阅读全文
posted @ 2022-08-04 11:00 zjh6 阅读(6) 评论(0) 推荐(0) 编辑
摘要:概述 更好可读的函数 ●八进制字面 ●0结尾无需分配的串 ●隐藏类型 ●避免内存分配的链 ●避免返回错误 ●替换goto的嵌套函数 已有技术 ● 半浮点数 ● 用CTFE初化数组 ● 用枚举生成域名列表 ● 从C对接D 八进制字面 ●0755 ●18位字的PDP-10 今天仅用于文件权限,但它们仍然 阅读全文
posted @ 2022-08-03 10:08 zjh6 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原文 ubyte[] data = ...; File f = File("dbfile", "w"); f.rawWrite(data[]); 要用rawWrite.而不用write. 阅读全文
posted @ 2022-08-03 08:50 zjh6 阅读(3) 评论(0) 推荐(0) 编辑
摘要:原文 串不好,应用变量.很容易创建新类型.如std.algorithm中管道一样,隐式实例化模板的返回值. 我构建了arsd.exception模块,新异常重点是改进enforce. 用法 import exception2; enum MyError; enum OtherError; void 阅读全文
posted @ 2022-08-02 11:05 zjh6 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原文 module combinejsonv3; import std.file; import std.stdio; import std.json; import std.array; import std.algorithm.searching; void main() { // 保存位置 J 阅读全文
posted @ 2022-08-02 09:04 zjh6 阅读(4) 评论(0) 推荐(0) 编辑

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