Dec. 6th, 2013

thedeemon: (office)
Есть в D штука, представляющая из себя существующий исключительно на фазе компиляции гетерогенный список, внутри которого могут быть типы и простые значения (всякие числа, строки, булевые..). Изначально возник для манипуляций параметрами шаблонов. Для него доступен набор привычных операций: map, filter, итерация, взятие слайса, обращение по индексу и т.п. И поскольку элементы такого списка могут быть разных типов, сделано так, что итерация по нему обычным foreach всегда раскрывается. Это, в частности, дает простой способ гарантированно анроллить циклы без копипасты. А в сочетании со вставкой кода через mixin() позволяет делать такое:
alias funNames = TypeTuple!("sin", "cos", "tan", "asin", "acos", "atan", "exp");
...
  switch(fn) {
    foreach(s; funNames) 
      mixin("case \"" ~s~ "\" : return new Real(" ~s~ "(x.asReal));\n");
    ...
  }


Что компилятор раскрывает в
  switch(fn) {
    case "sin" : return new Real(sin(x.asReal));
    case "cos" : return new Real(cos(x.asReal));
    case "tan" : return new Real(tan(x.asReal));
    case "asin" : return new Real(asin(x.asReal));
    ...


Мелочь, а приятно.

Profile

thedeemon: (Default)
Dmitry Popov

July 2025

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930 31  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 16th, 2025 07:39 pm
Powered by Dreamwidth Studios