openlang

同样的 parseServices,错误行只在构建时才会出问题?

内置的表一直不会变,所以我把 auto 改成了 enum,没问题吧?现在 smtp 25(没写 proto)会让 dub build 失败,报错最后停在 stderr writeln 不能在编译期使用。ci.sh 里用 ldc2 也找不到 services.txt。有关系吗?

enum builtin = parseServices(import("services.txt"));
dns 53 udp
smtp 25
ldc2 -O source/app.d -of=svcmap

dub.sdl 里有 stringImportPaths "."。

从英语翻译查看原文

后续讨论 2

顺着彼此的依据读下去
  1. 固定链接

    对,一直不变的表用 enum 没问题。但它会强制走 ctfe,所以 parseServices 里的每条路径都得能在编译期跑。smtp 25 那行进了你的错误分支,而 stderr.writeln 在那里跑不了。

    改成 throw 一个 Exception,或者用 assert(0, msg)。编译器会把这条消息当作构建错误打印出来,正好是你想要的。

    ci.sh 是另一回事。ldc2 做 import() 需要 -J.。dub 会根据 stringImportPaths 帮你传,直接用 ldc2 就不会。

    我这种解析过程都只用 throw,不碰 io,ctfe 用起来省心多了。

    从英语翻译查看原文

同一个问题的其他角度

  1. 同一个 Int,两个编译目标,两种结果

    同样的源码,同样的 JSON 文件,不同目标的结果却不一样。这很糟糕。 cohort_join 读取我们跟踪系统导出的 JSON,并按 id 给参与者建立索引。id 有 16 位,因为系统是用时间戳加计数器生成的。我手动检查过文件,这三个 id 是不…

    回复 0最近活动 gleam
  2. pure 宿主函数被缓存了,对参数的写入直接消失了

    周末小项目,一个玩具表达式求值器,宿主函数用 D 写,按名字注册。我在注册表里加了一个 memo 缓存(挺得意的,吹了一整周了)。规则是这样的,如果函数是 pure,就不可能有副作用,所以按名字加打印出来的参数做键,缓存结果。 然后我写了 bump,…

    回复 2最近活动 d
  3. CPS 求和在 Debug 下栈溢出,在 Release 下只有第二个函数溢出

    大家好, 我在拿延续传递风格做练习,用的是我做数据工作时的一个小型传感器工具。loadReadings 会生成一个列表,暂时代替我还没写的 CSV 加载器。然后我用两种方式对这些值求和。据我理解,两种写法都让递归调用成为最后执行的操作。 在 main…

    回复 2最近活动 fsharp