?

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
Т.е. скрипты, выполняемые при ребуте, билде и т.д. объединяются в одного монстра с такими квалификаторами. Свят-свят-свят, изыди сатана.

Во многих программах, кажется, есть moonphaseexpr<float0to29andhalf>.

Edited at 2014-07-04 09:30 pm (UTC)

Мне кажется, что все попытки всех и всё построить имеют весьма ограниченный успех. Всегда где-нибудь ввернут рекурсию или цикл, и красоте настанет капец. :)

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

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

Вариант: сделать препроцессор наподобие кутешного, чтобы из кода
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>
};

В AngularJS есть link time и compile time вычисления :)

И где же такая классификация поддерживается хотя бы на 50%?

  • 1