Pull to refresh

Comments 7

Столько вкусных фич! Даже не верится, что это будет все еще обеспечивающий высокую производительность C++. Надеюсь увидеть это в стандарте (и поддержку компиляторами) как можно быстрее.
Будет забавно, если мы напишем про одно и то же выступление :) Предлагаю уведомлять друг друга о начале работы
В стандарт эти новшества попадут не ранее, чем в C++23

Через шесть лет!?? Это же просто вечность в IT…
к тому времени уже C# .NET Core 2.0 будет полностью компилиться в натив через C++
на данный момент github.com/dotnet/corert пока еще сырой в этом плане
Это конечно все конечно очень круто, но практика показывает, что 99% людей не нужен непосредственный доступ к самой модели: им просто нужно что-то генерить, быстренько, текстовой строкой. И вот тут-то можно посмотреть на язык D, который просто дает возможность выдавать строку и вставлять ее в сорцы на этапе компиляции. Так же работает и студийный Т4, который по сути просто генерит текст. Магия связаная с обходом AST никогда почему-то не задается вопросом, а зачем навешивать проперти вокруг полей если можно все сразу — и поля и проперти — описать одновременно. Это конечно очень круто что так можно делать, но мне кажется мало кто будет этим реально пользоваться. Самое главное что для инструментов анализа, например, метаклассы намного более болезненные чем просто emit текста (ровно как и препроцессор), потому что нужно все эти сложные конструкты парсить и разворачивать на этапе компиляции, дабы получать для них точные анализы, фиксы итд.
Правильно ли я понял что это похоже на Lombok для Java? Там идёт расширения языка за счёт аннотаций, которые применяются на этапе компиляции.
@Data public class Human{
  private String name;
  private int age;
}

Создаст сеттеры, геттеры, методы toString, equals и hashCode.

Да. Насколько я вижу, по сравнению с Java, в предложенном варианте метаклассов есть, как минимум, 2 ограничения:


  1. Метаклассы применимы только для классов. Поля и методы так аннотировать не получится. Результат — появление метаклассов вроде classx, где из-за одной небольшой фичи приходится добавлять метакласс с её поддержкой
  2. Не более 1 метакласса на класс. Чтобы использовать несколько сразу, придётся писать код вида:
    $class MyClassMeta : classx, value {};
    MyClassMeta MyClass { ... };
Sign up to leave a comment.

Articles