Pull to refresh
9
0
Богословский Андрей @blanabrother

Пользователь

Send message

Можно поставить особый шрифт и сослаться на другую интерпретацию

Пример RNCE + DCE дичь. Какое-то нарушение причинно-следственных связей. RNCE оптимизация заменяет if (ptr == NULL) на if (false) из-за того, что выше есть разыменование, которое гарантирует, что либо точно ptr != NULL, либо будет исключение до конструкции if. А затем применяется DCE, который удаляет первопричину применения оптимизации RNCE. Какого? Если будет удалена первопричина применения RNCE, то она не может быть применена, а следовательно у DCE нет предпосылок применяться в таком виде.

В тексте не зря есть упоминание корпоративной лицензии. Покупаете корпоративную лицензию, оплачивая ее со счета в подходящем банке, затем подключаете к лицензии сотрудников по их email.

Кроме того, есть fallback версия на момент покупки/продления лицензии, т.е. Вы перестанете получать обновления, пока не оплатите, но можете откатиться на версию на момент прошлой покупки/продления.

Т.е. работать можно, но в общем ничего приятного последние дни не приносят никому.

Напомните пожалуйста, в каких годах была та самая эпоха красивого кода?

Если честно, то не понял сравнения с Kafka. Как можно сравнивать синхронный (gRPC, REST, JsonRPC и прочие) и асинхронный (очереди [*MQ] и журналы [Kafka]) принципы взаимодействия? Совершенно разные подходы не просто в коде, а вообще во всей системе и логике.

И grpcui. Недостаток утилит конечно в том, что при отсутствии рефлексии в grpc сервисе, надо ручками с помощью protoc компилировать protoset файлы из proto файлов контрактов. Обычно ок, тоже можно автоматизировать.

Если у Вас не работает linux/arm64/v8, поищите linux/arm64, по тэгам типа версия-aarch64.

Вы проводили какой-нибудь R&D? Например, есть Quartz.NET либа, которая покрывает перечисленные Вами в статье требования и предлагает даже больше.

Именованные аргументы хорошо защищают от таких ошибок неявного кастинга. Сразу было бы видно «capacity: ‘[’», и сразу бы возник вопрос.
Да и вообще, нормальный проект должен быть покрыт тестами и бенчмарками. В данном случае есть подозрение, что это какой-то отладочный ToString.

Офигеть! Выглядит классно!
Кажется, что с таким эффектом элементы окружения более различимы, чем без него.

Вам нужны достаточно большие массивы актуальных данных, которые известны только GDS системам, у которых авиакомпании заводят свои тарифы. Разные авиакомпании работают с разными GDS, кто-то с российской, кто-то с зарубежными, их несколько. Чтобы иметь «все», получается, надо «ходить» по API ко всем. Это ж сколько Вы будете им платить за такое кол-во запросов к ним…
Или Вы будете «парсить» сайты авиакомпаний? У многих есть защита на кол-во запросов от одного и того же IP-адреса.
Кстати. Если Вам достаточно иметь метод с передаваемыми аргументами, то вполне достаточно аллоцировать память через Marshal.AllocHGlobal например, потом запротектить на выполнение (единственный хак вне платформы), затем в этот участок памяти перелить опкоды (тут iced либа в помощь), затем через тот же Marshal получить вполне законный управляемый делегат — Marshal.GetDelegateForFunctionPointer, который можно где-то сохранить и переиспользовать. Все законно, в рамках платформы.
Чтобы Вы не тратили время на разработку и отладку генератора нативного кода, вот Вам ссылка на проект, в котором реализованы все инструкции x86/x64, даже векторизация.
Известная дорога через Кисловодск в Джилы-Су у склона Эльбруса. Чуть дальше от поселения Кичи-Балык можно попасть в Долину нарзанов. В самом Джилы-Су даже европейских ребят можно встретить, купающихся в серебрянных источниках. Эх, какие термы можно было бы там сделать…
Вы увидели только малую часть той великолепной дороги (полностью асфальтированной, кстати) с прекрасными пейзажами, скозь высокогорные луга с коровками и овечками, иногда сквозь облака, а в конце дороги вот:

Есть еще один распространенный и интересный case:
typeof(SomeType) == someInstance.GetType()
Такой код очень хорошо понимает компилятор и хорошо оптимизирует, фактически заменяет на TypeHandle == TypeHandle, что в итоге превращается в небольшое число процессорных инструкций.

Предложенное Вами решение показывает себя хуже в этом распространенном сценарии.

static private object stringObject = "";

// ...

[Benchmark] public bool typeof_string_Equals() => typeof(string) == stringObject.GetType();
[Benchmark] public bool typeof_string_Is() => stringObject is string;
[Benchmark] public bool TypeOf_string_Equals() => TypeOf<string>.Raw == stringObject.GetType();


typeof_string_Equals: 1.533 ns
typeof_string_Is: 1.759 ns
TypeOf_string_Equals: 5.251 ns

И, да, зря Вы спорите насчет потокобезопасности Dictionary. Он не просто потокоНЕбезопасен, он не всегда работает просто инвалидно с точки зрения данных — бывает он намертво вешает поток, который заходит за чтением, если другой поток зашел за модификацией.
Итак, в этом, на мой взгляд, заключается потенциал использования IL напрямую. Генерировать методы с его помощью, по-моему, занятие бесполезное, для этого есть более подходящие средства. Но вот модификация существующего кода IL может помочь в определенных ситуациях.

Expression'ы оказывается компилятся в нечто не самое быстрое, как всем может показаться. Цитата из статьи от Sergey Teplyakov:
Expression.Compile creates a DynamicMethod and associates it with an anonymous assembly to run it in a sandboxed environment. This makes it safe for a dynamic method to be emitted and executed by partially trusted code but adds some run-time overhead.

Поэтому, иногда генерация на IL вместо Expression оправдана.
Помимо физических нагрузок, термоупрочненное (закаленное) стекло должно проходить тест на искусственное старение в специальной камере. Суть в том, что стекло содержит вкрапления других молекул, помимо кремния, некоторые металлы и их окиси. При закаливании структура стекла выстраивается, но эти вкрапления упорно сопротивляются подчиняться этой структуре. Длительное жаровое воздействие под солнечными лучами может вызвать разную реакцию структуры и неподчиненных структуре вкраплений, после чего закаленное стекло саморазрушается. Если стекло производителя стекла (не производителя стеклопакетов) некачественное, то тест на старение с большой вероятностью обнаружит это, стекло разрушится в камере.
Получается причина одна, просто приведены разные сценарии ее проявления. Но в любом случае Вы правы.
Если честно, я теряюсь в догадках, какая связь между проектом Chromium и LLVM, но она есть

Наверное генерят нативный код для исполнения JavaScript виртуальной машиной.
только на win-платформ

Если на той платформе, что Вы имеете ввиду, есть возможность обеспечить доступ к куску памяти на выполнение, помимо записи и чтения, то можно и на ней. В статье пример с виндовым VirtualAlloc(Ex), в который можно передать MemoryProtection.Execute*. Если будете работать под .NET Core в Linux/macOS, то выделить кусок памяти можете через Marshal, а потом запротектить этот кусок самописной на С простой либой, которая просто вызывает mprotect, ну а вызвать этот метод либы можно стандартным для .NET DllImport.

Information

Rating
Does not participate
Location
Пятигорск, Ставропольский край, Россия
Date of birth
Registered
Activity