Это вторая часть серии (надеюсь) статей про современные Source Generators в .NET. Мотивация и общее описание есть в первой части, рекомендую начинать знакомство с неё.
В этой части мы поговорим про типовые сценарии разработки генераторов.
Пользователь
Это вторая часть серии (надеюсь) статей про современные Source Generators в .NET. Мотивация и общее описание есть в первой части, рекомендую начинать знакомство с неё.
В этой части мы поговорим про типовые сценарии разработки генераторов.
Одним из наиболее глубоких открытий в физике стало самое известное уравнение Эйнштейна: E = mc². Проще говоря, оно гласит, что энергия равна массе объекта, умноженной на квадрат скорости света. Это простое на первый взгляд математическое соотношение таит в себе огромное количество физических смыслов, в том числе:
при наличии определённого количества энергии можно спонтанно создавать новые пары частиц материи-антиматерии, если их масса покоя меньше, чем количество энергии, необходимое для их создания,
если пара частиц материя-антиматерия аннигилирует, то при этом выделяется определённое количество энергии, определяемое массами аннигилировавшей пары частиц,
каждый раз, когда происходит ядерная реакция, будь то синтез или деление, если масса продуктов реакции меньше массы частиц, в ней участвовавших, E = mc² говорит о том, сколько энергии будет высвобождено в этой реакции.
Это уравнение, E = mc², описывает, сколько энергии присуще любой массивной частице, находящейся в состоянии покоя, включая то, сколько энергии требуется для её создания и сколько энергии выделяется при её разрушении.
Но что если частица не находится в состоянии покоя или если она вообще не имеет массы? В этих случаях E = mc² — это только половина значимого уравнения. Вторая половина гораздо интереснее и необходима для того, чтобы понять физический смысл происходящего.
Уже много лет мы помогаем нашим клиентам отправлять потребителям хорошие, информативные и человеческие письма. В них вместо сухого “Добрый день” мы пишем “Здравствуйте, Никита!”, а вместо “Ваш баланс пополнился” сообщаем “вы получили 25 баллов”. Но маркетологи становятся все изобретательнее, и современное письмо от интернет-магазина должно выглядеть так:
И мы хотим уметь генерировать такие письма автоматически.
Предыдущая статья серии была посвящена теории парсинга исходников с использованием ANTLR и Roslyn. В ней было отмечено, что процесс сигнатурного анализа кода в нашем проекте PT Application Inspector разбит на следующие этапы:
Данная статья посвящена второму этапу, а именно: обработке AST с помощью стратегий Visitor и Listener, преобразованию AST в унифицированный формат, упрощению AST, а также алгоритму сопоставления древовидных структур.
Expression Trees — это, пожалуй, самое удобное средство манипуляции кодом в run-time.
Расширять код метапрограммами в compile-time позволяют Roslyn Source Generators, с ними это стало проще, чем когда-либо.
Пора использовать одно во благо другого, даже если мир к этому еще не совсем готов.
Автоматическая сборка мусора упрощает разработку программ, избавляя от необходимости отслеживать жизненный цикл объектов и удалять их вручную. Однако, чтобы сборщик мусора был полезным инструментом, а не главным врагом на пути к высокой производительности — иногда имеет смысл помогать ему, оптимизируя частые аллокации и аллокации больших объектов.
Для уменьшения аллокаций в современном .NET предусмотрены Span/Memory<T>
, stackalloc
с поддержкой Span
, структуры и другие средства. Но если без объекта в куче не обойтись, например, если объект слишком большой для стека, или используется в асинхронном коде — этот объект можно переиспользовать. И для самых крупных объектов — массивов, в .NET встроены несколько реализаций ArrayPool<T>
.
В этой статье я расскажу о внутреннем устройстве реализаций ArrayPool<T>
в .NET, о подводных камнях, которые могут сделать пулинг неэффективным, о concurrent-структурах данных, а также о пулинге объектов, отличных от массивов.
Модель подходит для создания бесшовных узоров, абстрактных рисунков и стилизованных под акварель образов. Как использовать модель и как обучить нейросеть на своих картинках?
Как же часто мне приходилось слышать от рекрутеров одну и ту же фразу:
Мы работаем по Agile. Спринты по 1-2 недели
Под "Agile" они, конечно же, имеют в виду Scrum. Но я с уверенностью могу сказать, что ни в одной компании, что я работал, Agile'ом даже и не пахло. И тут я даже не говорю о том, что Agile каким он был задуман в принципе не дошел до массовой разработки (о чем рассказывал один из создателей Agile Дейв Томас на конференции GOTO 2015). Я говорю об Agile в общепринятом значении этого слова.
В дальнейшем, на техническом интервью, если спрашивать по пунктам, практически любой реальный работник компании подтвердит вам, что никакого Agile в компании нет, а используются лишь элементы Agile.
По некоторым причинам команде разработчиков либо не получается наладить работу по Agile, либо руководство знает, как лучше, и навязывает собственное видение методологии разработки. Эту проблему адресовал в своей статье Рон Джефрис (вот перевод на русский), дав красноречивое название подобным практикам — "Dark Scrum". Существует и более мягкая формулировка для тех, кто считает подобное положение вещей скорее фичей, а не багом — "Pseudo Agile" или "Post Agile".
В этой статье я постараюсь расставить точки над Ё и разобраться, что такое Agile на самом деле, и какие проблемы существуют у современных гибких методологий.
В этой публикации описаны простейшие методы вычисления интегралов функций от одной переменной на отрезке, также называемые квадратурными формулами. Обычно эти методы реализованы в стандартных математических библиотеках, таких как GNU Scientific Library для C, SciPy для Python и других. Публикация имеет целью продемонстрировать, как эти методы работают "под капотом", и обратить внимание на некоторые вопросы точности и производительности алгоритмов. Также хотелось бы отметить связь квадратурных формул и методов численного интегрирования обыкновенных дифференциальных уравнений, о которых хочу написать ещё одну публикацию.
Современные нейронные сети достигли уже столь выдающихся результатов качества предсказаний, что компании начали встраивать их в свои процессы принятия решений.
ИИ уже сегодня водит автомобили, предсказывает болезни и распознаёт ваши налоговые счета. Однако сами компании слишком мало говорят о том, почему предсказаниям нейронных сетей мы вообще можем доверять, умалчивая одну их занимательную особенность.
Всем привет! Это снова Иван Антипин, заместитель технического директора AGIMA. Весной я рассказывал здесь о матрице компетенций — удобном инструменте менеджмента. И поскольку статья вызвала интерес, я подготовил еще одну. В этот раз речь пойдет о слабом звене — том самом участке работы, из-за которого рушится весь процесс. Разберемся, как его найти, с помощью чего устранить и что потом делать. Пишу по материалам доклада Ивана Михеева.
Заголовки должны быть большими, жирными и громкими, чтобы привлекать внимание пользователя за несколько секунд. Мы перевели статью о стилях заголовков, сегодня предлагаем изучить градиенты.
Blazor Server - технология для простого написания Web-систем на платформе .Net. Для удобной работы с базами данных была создана библиотека Entity Framework, которая позволяет работать программисту напрямую с моделями, не задумываясь об SQL-запросах. Но всё ли так хорошо, если соединить Blazor и EF?
Привет! Меня зовут Дмитрий, я написал на C# свой интерпретируемый язык программирования, который назвал — OverScript. Это си-подобный язык со статической типизацией. Сразу скажу, что это не прототип, а готовый проект. Весь код на 100% мой. Я подробно не интересовался, как написаны другие языки, поэтому вся реализация интерпретатора это моя чистая импровизация. Мой подход неконвенциональный, поэтому к техническим аспектам стоит относиться без ассоциаций с тем, что вы могли ранее видеть в других языках, несмотря на то, что некоторые вещи могут казаться знакомыми.
Одни из важнейших характеристик качественного IT-продукта — отказоустойчивость и работоспособность под нагрузками. Когда речь идёт о пользовательских финансовых операциях, это важно вдвойне, а если к уравнению добавить хайлоад — втройне.
Я разрабатываю сервисы в команде платежей Ozon. Мы много времени уделяем тому, чтобы все транзакции были обработаны корректно, даже если речь идёт о нагрузке в 2к платежей в минуту (именно столько у нас было в пике в период ноябрьских распродаж). Кстати, сейчас, по результатам нагрузочного тестирования, мы выдерживаем 13к платежей в минуту.
Для этого мы готовимся заранее: пересматриваем архитектуру, дорабатываем сервисы, рефакторим код, кэшируем и оптимизируем базы данных. Серебряной пули тут нет, но могу поделиться техниками, которые помогли нам избежать возможных проблем, — будет полезно всем, кто готовит свои сервисы с прицелом на работоспособность под нагрузками.
Привет, Хабр!
На обложке демо-игра Megacity. Она содержит 4,5 млн элементов Mesh Renderer, 5000 динамических транспортных средств, 200 000 уникальных строительных объектов и 100 000 уникальных аудиоисточников. Но самое удивительное, что вся эта мощь запустилась на Iphone X при 60 кадрах в секунду . Как все это возможно?
Пару лет назад компания Unity представила свой стек DOTS, на котором и построен проект Megacity. Это некий список технологий, которые в совокупности позволяют колдовать и ускорять ваш проект в десятки раз. В корне всей магии лежат 2 простых заклинания:
- Если правильно управлять данными, процессору будет легче их обрабатывать, а если их легче будет обрабатывать, то игрокам будет легче жить.
- Количество ядер процессора растет, но код среднестатистического программиста не использует все ядра процессора. А значит игрокам все же живется туго. Фреймрейт ведет себя как Джокер - непредсказуемо.