9

Введение в pwsh для продвинутых. Часть I

Наибольшая мощь платформы .NET раскрывается посредством IL (intermediate language, эдакий символический аналог языка ассемблера) — во что, собственно, и преобразовывается код на C# или любом ином языке платформы. Однако IL сторонятся как огня даже бывалые .NET'овцы (звучит как-то неполиткорректно), что говорить о разработчиках сценариев PowerShell?! Между тем, для последних это не просто полезный навык, скорее — возможность взять планку на порядок выше покуда другие рвут и мечут в отсутствии какой-либо фичи. Именно так в бытность второй версии PowerShell и поступал автор, реализуя, к примеру, побитовы(й|е) сдвиг(и) в(лево|право) посредством функции, в основе которой был динамический метод.

Здесь, правда, используется синтаксис pwsh, измождённым же ностальгией при переводе примера на вторую версию PowerShell следует быть аккуратными при использовании переменной $$ и принять на вид возможность имитации тернарной операции посредством массивов; для прочих пример может показаться притянутым за уши, так как pwsh уже располагает операторами -shl и -shr, а значит

(New-Shift).Invoke(7, 3)

или:

(New-Shift shr).Invoke(7, 1)

будут подобны разве что ложке дёгтя в бочке мёда. Однако, истинная причина, по которой мы сознательно избегаем синтаксиса версий ниже шестой, кроется в различного рода рестрикциях присущих .NET Framework (и, как следствие, "наследуемых" PowerShell -le v5), но отсутствующих в .NET Core, как, например, использование указателей в динамических методах. Чтобы продемонстрировать это, а заодно чуть подробнее разобрать сам принцип создания последних, рассмотрим побайтовый вывод числа через указатель.

Результатом, как и ожидается будет 00 40 00 00. А теперь немой вопрос: для чего это может понадобиться, если всё можно написать на C# и скормить Add-Type? Прежде — скорость: динамические методы создаются в динамической (кто бы мог подумать!) сборке pwsh, в то время как Add-Type создаёт физическую сборку, подгружаемую в текущий домен приложений, а это, во-первых, требует валидации кода, во-вторых, ведёт к захламлению сборками домена в текущем сеансе. Вторая немаловажная причина кроется в обработке больших данных где исключается параллелизм, например, расчёт энтропии некоторого файла, с которой, как было замечено ранее здесь, лучше и начинать исследования бинарного кода.

Лига программистов

2.1K постов11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества