?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
Виды связи символа с его значением
nyaload
_winnie
Модификаторы для глобальных переменных:
constexpr - для выражений вычислимых в compile-time отдельного модуля
linkexpr - для выражений вычислимых при полной сборке системы
deployexpr - для выражений вычислимых при инсталляции системы
rebootexpr - для выражений вычислимых при старте хоста
initexpr - для выражений вычислимых при старте программы
expr<component> - для выражений вычислимых при запуске определённого под-компонента системы. Топологическая сортировка по зависимостям.

Такая разбивка позволяет разным фазам сборки-деплоя-запуска-интерпретации понимать, какие выражения обязаны быть уже вычислены, и не пытаться вычислять их динамически.
А так же отлавливать ошибки в тех случаях, когда программист пытается вычислить linkexpr через rebootexpr


  • 1
Можно попробовать реализовать с помощью шаблонов с тэгами. На оптимизацию это не повлияет, но по пальцам, при необходимости, надаёт.

Как это сделать на хаскелле, примерно представляю - фантомными типами.
На плюсах - только если очень много синтаксического шума.

Вариант: сделать препроцессор наподобие кутешного, чтобы из кода
TAGGED class foo
{
  int x;
  int foo(int y);
};

рожал
template<typename TAG> class foo
{
  tagged<TAG,int> x;
  tagged<TAG,int> foo(tagged<TAG,int> y);
  // и всякие ко-контравариантные операторы приведения к foo<TAG2>
};

  • 1