All streams
Search
Write a publication
Pull to refresh
64
0
Павел Т @kefirr

Ignite.NET maintainer

Send message

Спасибо за статью. Пара комментариев:


  • Установка Mono не требуется для работы с Blazor
  • .Net -> .NET

Насчёт IDE споры вечные, но по-моему так Rider значительно превосходит VS, про VS Code и говорить нечего. VS Code — отличный редактор, удобно работать с произвольными файлами, типа документации в Markdown или скриптов каких-нибудь. Но там нет нормального анализа и автодополнения кода, мало рефаторингов, нет профайлера, нет coverage analysis, примитивная работа с git. В райдере всё это есть из коробки. Экономит уйму времени, если умеешь пользоваться.

Очень круто, особенно впечатлила компиляция XAML и ходьба по нему в дебаггере!


А где взять и запустить "каталог контролов"? Что-то с ходу не нашел.

Доступно всё рассказано, и ни одного упоминания монад — спасибо!


Но, определения в начале статьи всё-таки отличаются от общепринятых (см википедию):


  • Функциональная программа — программа, состоящая из чистых функций
  • Функция f является чистой если выражение f(x) является ссылочно прозрачным для всех ссылочно прозрачных x

Есть ссылки на первоисточники этих определений?

в долгосрочной перспективе лучше ориентироваться на популярные инструменты

С такой логикой можно на JavaScript или Python перейти c дотнета, они ведь популярней :)

Спасибо за статью! Посыл очень верный, и попробовать переехать с винды стоит каждому.


Но, говоря справедливо, не всё так гладко:


  • Профайлеры. Ситуация печальная. Только сейчас в .NET Core 3.x появились инструменты от Microsoft (dotnet-trace, dotnet-dump), да и то, результаты лучше смотреть на винде в PerfView/VS. dotTrace от JetBrains пока что только в EAP и работает не для всех версий .NET
  • Conference tools (Zoom, Skype, ...) — что-то работает, что-то не очень
  • Нет многих других вещей типа LINQPad
  • Железо — тут лотерея и танцы с бубном, особенно с ноутами и с видяхами nvidia

Rider себя окупит очень быстро даже для джунов (потому что научит много чему). VSCode и рядом не валялась. Не стоит экономить на рабочих инструментах.


Плюс, полученный опыт транслируется на все остальные продукты, если придётся работать с Python, Java, Go, PHP.

Я сравнивал — разницы по скорости в CPU-bound задачах нет. В работе с диском выигрываeт Linux. Кучу лишних денег надо иметь на лицухи для винды.

Отвечу за себя — как и автор, перешёл на Ubuntu для разработки на .NET Core. Причины:


  • Скорость. Файловая система работает быстрее, отсюда Git намного быстрее, Rider / IDEA запускаются быстрее, итд
  • Другие языки и тулзы, с которыми приходится работать (docker, go, python, ..) зачастую лучше работают на линухе
  • Улучшение знаний ОС, работы в терминале, etc (да, есть WSL на винде, но полное погружение способствует изучению лучше)
IAsyncEnumerable, как и IEnumerable — это pull-модель

Я бы сказал, что IAsyncEnumerable выглядит как pull-модель (делаем foreach), но ведёт себя как push-модель: внутренность foreach является коллбеком, который может быть вызван в том числе в другом потоке.


Вот тут я превращаю push-модель (события) в IAsyncEnumerable: https://ptupitsyn.github.io/Ignite-Async-Streams/

Очень хорошее замечание. На мой взгляд, лучше лишний раз не думать (и не заставлять коллег думать) и всегда писать async/await. Далеко не все даже опытные разработчики держат в голове все эти тонкости.

Занятно! К картинкам можно добавить подпись, что все эти размеры полей и смещения — для 32 битного режима.

это не то же самое, что 40-часовая рабочая неделя в офисе

С учетом того, что ехать никуда не надо, примерно то на то и выходит (если дорога от получаса и больше в один конец).


Ну и, конечно, если вы привыкли потусить у кофемашины, поиграть в пингпонг и иксбокс в рабочее время, сходить на обед на часок, оставляя кодингу часа 3, то да, будет непросто.

Именно поэтому сделан тонкий клиент, который использует только чистый .NET и дополнительных требований не имеет.

Ради прикола попробовать можно было бы, но для продакшна это точно не решение.
Да и проект IKVM загнулся, к сожалению.
http://weblog.ikvm.net/2017/04/21/TheEndOfIKVMNET.aspx

Представим узлы кластера А и Б, толстый клиент К, тонкий клиент Т подключен к узлу А.


При попытке извлечь данные, находящиеся на узле Б, толстый клиент отправит запрос напрямую. Тонкий же работает только через узел А.


А как толстый клиент с JVM обшается? Это быстро?

Через JNI и указатели на unmanaged (offheap) память. Да, это намного быстрее сокета.

Только что прочитал, что libcurl выпиливают в .NET Core 2.1:
https://blogs.msdn.microsoft.com/dotnet/2018/02/27/announcing-net-core-2-1-preview-1/


Интересно, что как это обернётся для вас :)

Сколько в стеке свободного места есть. Размер стека по умолчанию на винде 1 или 4 метра (32/64 бит), на Линухе по-разному, частый вариант — 8 метров.


Ну и часть этого места наверняка занята самим стеком вызовов.

Думаю, что stackalloc используется так редко, потому что либо размер буфера предопределён и данные структурированы, тогда просто заполняется struct и берётся указатель, либо размер буфера непредсказуем.

В Ignite.NET использование stackalloc для передачи JNI аргументов (varargs / va_list) вместо params JavaValue[] подняло перформанс реальных кэшовых операций на 15% и избавило от лишних аллокаций / GC.


Код на гитхабе: UnmanagedUtils.cs


Ещё пример, перетасовка байт: WriteGuidSlow

Information

Rating
Does not participate
Registered
Activity