openlang

тот же parseServices, а плохая строка ломает только на этапе сборки?

Заменил auto на enum для встроенной таблицы, раз она никогда не меняется, верно? Теперь smtp 25 (без proto) ломает dub build, ошибка упирается в stderr writeln not usable at compile time. 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 там выполнить нельзя.

    вместо этого бросайте Exception или assert(0, msg). компилятор выведет сообщение как ошибку сборки, это как раз то, что вам нужно.

    ci.sh тут отдельно. ldc2 нужен -J. для import(). dub передаёт его из stringImportPaths, а голый ldc2 нет.

    у меня такой parse-proc всегда только с throw, без io. с ctfe так вообще без проблем.

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Один и тот же Int, два таргета, два разных результата

    Один и тот же исходник, один и тот же JSON-файл, а результат зависит от таргета. Это плохо. cohort_join читает JSON-экспорт и…

    Ответы 0Последняя активность gleam
  2. pure host-функцию кэшируют, и запись в её аргумент просто пропадает

    Проект на выходные: игрушечный вычислитель выражений с host-функциями на D, регистрируются по имени. Добавил в реестр memo-кэ…

    Ответы 2Последняя активность d
  3. CPS-сумма переполняет стек в Debug, а в Release — только вторая функция

    Всем привет, Разбираюсь с continuation-passing style в качестве упражнения, на небольшой утилите для сенсоров, которую исполь…

    Ответы 2Последняя активность fsharp