В этой статье я хочу рассмотреть основные такие возможности, плюс показать, как можно получить ещё больше информации о типах при использовании TypeScript, и как добавить классам и их полям собственные метаданные при помощи декораторов. Каждую из техник я покажу на примере небольшого CLI-фреймворка, работа с которым к концу статьи будет выглядеть как на картинке:
Рубрика «reflection»
Рефлексия в JavaScript и TypeScript: обзор основных техник. Как сгенерировать CLI-интерфейс для класса
2023-08-23 в 9:00, admin, рубрики: javascript, reflection, ruvds_статьи, TypeScript, рефлексияПосле прочтения заголовка у кого-то наверняка возникнет весьма логичный вопрос: «Кто такая эта ваша рефлексия и зачем её ускорять?»
И если первая часть будет волновать только совсем уж откровенных неофитов (ответ тут), то вторая точно нуждается в пояснении.
К текущему моменту рефлексия (и особенно рефлективные вызовы методов) так или иначе используется в прорве самых разных фреймворков, библиотек и просто любых приложениях, по какой-либо причине требующих динамические возможности.
Как написать рефлексию для C++
2022-03-14 в 21:49, admin, рубрики: c++, json, reflection, serde, serialization, yaml, ПрограммированиеC++ поистине противоречивый язык. Старый добрый С существует аж с 1972 года, С++ появился в 1985 и сохранил с ним обратную совместимость. За это время его не раз хоронили, сперва Java, теперь его потихоньку продолжают хоронить Go и Rust. Все его недостатки пережеваны множество раз. Если вы пришли в мир С++ из других ООП языков, то здесь вы не найдете:
Java 18. Что нового добавили, и почему вам это пригодится
2022-02-07 в 21:17, admin, рубрики: DNS, finalizer, java, java18, pattern matching, reflection, snippet, vector api, web-сервер, кодировка, ПрограммированиеМного интересных фич
Выход Java 18 назначен на 22 марта 2022 года, ждать осталось недолго. Релиз уже несколько дней находится во второй фазе стабилизации, а значит, список фич уже финализирован, а значит настало время обратить на них наше внимание.
Ускоряем hugo на 20% простым изменением в пакете reflect
2022-01-14 в 21:47, admin, рубрики: binary search, Go, golang, Hugo, linear search, open source, profiling, reflect, reflection, высокая производительность, Компиляторы, ПрограммированиеНайти значительное узкое место в производительности стандартной библиотеки или зрелого приложения — это редкость.
Я был удивлён, когда в top10 списке CPU-профиля hugo при сборке digitalgov.gov на первой позиции находился метод reflect.Type.MethodByName()
.
flat flat% sum% cum cum%
8.84s 6.28% 6.28% 57.85s 41.10% reflect.(*rtype).MethodByName
7.93s 5.63% 11.92% 8.50s 6.04% reflect.name.readVarint
7.56s 5.37% 17.29% 111.79s 79.43% reflect.Value.call
7.53s 5.35% 22.64% 23.33s 16.58% runtime.mallocgc
7.29s 5.18% 27.82% 16.10s 11.44% reflect.name.name
В этой статье я расскажу вам о том, как так вышло и что с этим можно было бы сделать.
Неудачная статья про ускорение рефлексии
2020-05-02 в 20:46, admin, рубрики: .net, C#, linq, performace, reflection, высокая производительность, производительность, Серверная оптимизация, управление разработкойСразу объясню название статьи. Изначально планировалось дать хороший, надежный совет по ускорении использования рефлекшена на простом, но реалистичном примере, однако в ходе бенчмаркинга выяснилось, что рефлексия работает не так медленно, как я думал. Да и вообще проблема не с ней. Так как пример достаточно жизненный и реализованный в принципе как обычно делается в энтерпрайзе, получилось достаточно интересная, как мне кажется, демонстрация.
Читать полностью »
Андрей Беляев про рефлексию в Java на встрече jug.msk.ru
2019-09-29 в 17:11, admin, рубрики: java, JUG, jug.msk.ru, reflectionВ прошедший четверг, 26 сентября 2019 года, в офисе компании КРОК на встрече московского сообщества Java-разработчиков jug.msk.ru выступил Андрей Беляев с докладом «Уменьшаем количество рефлексии в коде».
Unsafe.AsSpan: Span<T> как замена указателям?
2019-08-26 в 20:23, admin, рубрики: .net, C#, MSIL, reflection, ненормальное программирование
C#
— невероятно гибкий язык. На нем можно писать не только бэкэнд или десктопные приложения. Я использую C#
для работы, в том числе, и с научными данными, которые накладывают определенные требования на инструменты, доступные в языке. Хотя netcore
захватывает повестку дня (учитывая, что после netstandard2.0
большинство фич как языков, так и рантайма, не бэк-портируются в netframework
), я продолжаю работать и с легаси-проектами.
В этой статье я рассматриваю одно неочевидное (но, наверное, желаемое?) применение Span<T>
и отличие реализации Span<T>
в netframework
и netcore
из-за особенностей clr
.
Тестирование аннотаций @NonNull-@Nullable
2019-08-25 в 14:40, admin, рубрики: annotations, bipredicate, cglib, dynamic proxy, framework, invoke, java, java 8, lambda, lombok, lookup, predicate, reflection, retention, spring, spring framework, Stream, testingВместо «Посвящается ...»
Описанная ниже задача не была новаторской или чертовски полезной, компания в которой я работаю не получит за нее прибыль, а я премию.
Но эта задача была, а значит ее пришлось решить.
Intro
В статье вы часто будете встречать слово Lombok, прошу хейтеров не торопиться с выводами.
Я не собираюсь «топить» за Lombok или его отсутствие, я как Геральт Сапковского, стараюсь хранить нейтралитет, и могу спокойно и без дрожи в веке читать код как с Lombok, так и без оного.
Но на текущем проекте упомянутая библиотека присутствует, и что-то подсказывает мне, что наш проект такой не единственный.
Так вот.
Читать полностью »