112.2
Karma
11
Rating
Ivan Kochurkin @KvanTTT

Source Code Analyzers Developer

Тяжела ли работа программиста — взгляд с точки зрения психофизиологии

0

Согласен. Ну и захочет ли лесоруб рубить деревья не в рабочее время? Сомневаюсь, чего не скажешь о желании программистов писать код.

Нам не нужны правки перевода: нашему переводчику виднее, как это должно переводиться

0
Электронные версии закрывают эту нишу, спасая множество деревьев.

Согласен. Тем более книга толстая, с собой в дальней дороге не повозишь, в отличие от планшета. А если книг несколько? Хотя иметь книгу как нечто материальное тоже приятно.

Нам не нужны правки перевода: нашему переводчику виднее, как это должно переводиться

0

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

Нам не нужны правки перевода: нашему переводчику виднее, как это должно переводиться

+5

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

Не стесняемся, минусуем

0

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

Не стесняемся, минусуем

+1

А я не знаю :( Хорошему посту из песочницы и так дадут, а остальным — не за что или незачем.

И все-таки, почему Posit являются достойной альтернативой IEEE 754

0
И переформулировка задач в целочисленных терминах очень трудна и не всегда возможна.

Я бы сказал, почти всегда невозможна, потому что точные вычисления замкнуты только относительно примитивных операций: +, -, *, /. Как, например, без потери точности взять sqrt(2) или sin(pi/ 4)? А такие операции сплошь и рядом в компьютерной графике.


Может тогда сразу в аналитические вычисления перейти, где корень будет представляться именно корнем, а не приблизительным числом.

И все-таки, почему Posit являются достойной альтернативой IEEE 754

0

Хм, а есть формат BigQuire с произвольной точностью? Как BigInteger, только для чисел с плавающей точкой. Применение найдется: теоретическая математика, расчет фундаментальных констант типа PI и подобных.

Не стесняемся, минусуем

-1

Псевдонаука — согласен. Однако к таким статьям, да и другим мусорным, бывает много комментов, которые забавно или интересно читать. Выходит, что такие статьи в чем-то лучше нейтральных.

Не стесняемся, минусуем

0

Например, из-за эмоционального всплеска. Возможно через некоторое время автор остыл и пожалел о таком резком комменте, который убил его карму.

Не стесняемся, минусуем

+1

Статьи, в которых 99.99% ничего не понятно — плохие. Скорее всего автор не умеет их писать.

Российские университеты «накручивают» публикации и проводят псевдоконференции

0

Хм, я защищал магистерскую диссертацию в Бауманке в 2013. Нам говорили об обязательности хотя бы одной публикации, но на защите были и без таковых.


Статью я публиковал сборнике, в котором у первой же статьи в заголовке была ошибка "антибеотики", что как бы намекает о его качестве. Но за статью не стыдно, несмотря на то, что она не особо научная. По ее мотивам даже одна из статей на хабре написана :)

Подробно о dynamic: подковерные игры компилятора, утечка памяти, нюансы производительности

+3

Стараюсь по возможности избавляться от использования dynamic в коде. Он хорош при разработке прототипов, но не для продакшн-кода.

Оптимизация производительности .NET (C#) приложений

+1

Почему это такой случай? Методы статические, маленькие, с инлайнингом не должно возникнуть проблем по идее.

C, C++ и DotNet decompile — основы реверса. Решение задач на реверсинг с r0от-мi. Часть 1

0

По .NET очень просто задание — там ничего не обфусцированно (по остальному тоже но я спец по .NET). А что если применить как минимум обфускацию по шифрованию констант и по сокрытию тел методов (AntiTamper), а в идеале — все из списка ConfuserEx.2.


Кроме того, константу все равно не так сложно расшифровать, как понять логику обфусцированной программы.

Питон, пожирающий мир: как побочный проект одного разработчика стал популярнейшим языком программирования

0

Существует — как минимум C#, Java, которые побыстрей Python будут.

Питон, пожирающий мир: как побочный проект одного разработчика стал популярнейшим языком программирования

0

И это немного жаль, что он такой распространенный. У Python динамическая типизация и медленная скорость, а значит на нем проблематично писать большие или высокопроизводительные проекты. Это, на мой взгляд, является фундаментальными недостатками, которые никак не исправить на уровне языка.

Питон, пожирающий мир: как побочный проект одного разработчика стал популярнейшим языком программирования

0
Сейчас мир стремительно движется в сторону строгой типизации (с дженериками), JIT и лямбд: TypeScript, PHP и т.д. Вот бы Питону тут поднажать.

Это уже будет другой язык.


При этом изящество и четкость языка, конечно, совершенно поражают. Ни один другой язык и близко не стоит. Вот бы подтянуть все вышенаписанное, и была бы бомба.

Чем поражает? Есть другие языки на уровне.

Почему для открытия меню Windows читает один файл сто тысяч раз?

+3

Тогда в исходном комменте автору надо было хотеть узнать культуру, а не национальность.

Как дурак C# учил. Часть 1

0

Так язык один и тот же, так что старые книги вполне подойдут. Есть некоторые различия по стандартной библиотеке (например, в NET Core идеологически отсутствует Thread.Abort, что вообще правильно), но для новичков это не важно. Ну и инфраструктура у NET Core более продуманная и простая.

Оптимизация производительности .NET (C#) приложений

0
Про выравнивание enum'ов не знал, это не противоречит статье, однако с этой точки зрения я даже не оценивал.

На самом деле это касается всех типов. Если вы создадите структуру S с одним свойством типа byte, то sizeof(T) вернет 1. Однако если добавить к ней более длинный тип, например int, то уже sizeof(T) == 8, а не 5 как могло бы показаться. C long будет вообще 16. Т.е. если свойства типа байтового enum будет хотя бы с одним свойством int, то оптимизации по памяти не будет. Выравнивание сделано для оптимизации, так как доступ к выровненным элементам гораздо быстрее. Однако это касается архитектуры x64. На x86, возможно, будут другие цифры.


Если запустить простой бенчарк, то по времени выполнения мы получим эквивалентный результат, нельзя выявить победителя. А вот по выделению памяти ToArray стабильно расходует меньше.

По памяти тоже нельзя что-то сказать однозначно. Ок, давайте сравним код обеих имплементаций на вышеупомянутом https://referencesource.microsoft.com


В методе ToList(this IEnumerable collection) вызывается конструктор списка List(IEnumerable collection), внутри которого происходит перебор коллекции и обычное добавление в список с помощью метода Add, пустая часть не отсекается.


В методе ToArray(this IEnumerable source) вызывается конструктор интернального класса Buffer(IEnumerable source), после чего на результирующем коллекции вызывается метод ToArray(). Buffer работает аналогично List, а метод ToArray, в свою очередь, триммит результирующий массив. Из чего можно я делаю вывод, здесь все же происходит лишняя аллокация.


Кстати, еще более оптимально использовать запись, в которой лишняя коллекция вообще не создается без необходимости:


enumerable as List<Item> ?? enumerable.ToList();

P.S. у вас ошибка — там имелось в виду ToArray, а не ForArray?

Оптимизация производительности .NET (C#) приложений

+18
  1. ToArray vs ToList

Не согласен. ToArray для IEnumerable — это сначала ToList, а потом ToArray, тримминг лишних элементов (TrimExcess), т.е. лишняя аллокация. Так что если вам не нужен массив или это не какие-то постоянные коллекции, особенно большие, то ToList выигрывает. Узнал это от Игоря Лабутина в докладе Коллекционируем данные в .NET.


  1. Параметр «путь к файлу» не всегда лучший выбор для вашего метода
  2. Избегайте использования потоков в качестве параметров и возвращаемого результата ваших методов

Это все сводится к общему совету "не плодите промежуточные сущности без необходимости", к которому можно приписать и другие ситуации.


Минимальное изменение в коде и все значения вашего enum’а занимают вдвое меньше памяти навсегда.

Навсегда, но не всегда. Если enum используется как член класса или структуры, то разницы никакой не будет из-за выравнивания как минимум по 4 байта. А это используется почаще, чем массивы из енамов.


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

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


ILSpy

А еще есть бесплатные dotPeek, dnSpy и кроссплатформенный AvaloniaILSpy. dnSpyне боится обфусцированных сборок.


Если у меня возникает вопрос о том, какой механизм .NET более эффективный, в первую очередь, я открываю ILSpy (а не Google или StackOverflow), и уже там смотрю, как он реализован.

Если нужно посмотреть код именно самого .NET, то можно использовать онлайн https://referencesource.microsoft.com/. Если надо узнать как оптимизируется код на уровне ассемблера, то https://sharplab.io/ незаменим.

Как дурак C# учил. Часть 1

0

Интересно, что могла бы представлять из себя любительская нейрохирургическая операция?

Как дурак C# учил. Часть 1

+1

В динамической типизации (ошибки во время запуска, а не компиляции), в скорости.

Как дурак C# учил. Часть 1

Как дурак C# учил. Часть 1

+1

Также не стоит забывать, что дефолтный Random не потокобезопасный, т.е. при многопоточном обращении его нужно заворачивать в lock.

Как дурак C# учил. Часть 1

Как дурак C# учил. Часть 1

+2

Дурак — глупый человек. Вряд ли автор является таковым, особенно учитывая контент статьи. Так что заголовок кликбейтный.

Как дурак C# учил. Часть 1

+3
Ещё на .net митапы сходить несколько раз, если у вас в городе они проходят.

На них все же требуется уровень не ниже среднего.

Парсим с помощью ANTLR 4 хранимки T-SQL для получения связей между таблицами

0

Как минимум после парсинга, когда уже готово дерево разбора. Но возможно потребуется еще семантическая информация, информация о типах.

Парсим с помощью ANTLR 4 хранимки T-SQL для получения связей между таблицами

Парсим с помощью ANTLR 4 хранимки T-SQL для получения связей между таблицами

0

Да, скорее всего логическое и && — так и скобки лишние не нужны.

Парсим с помощью ANTLR 4 хранимки T-SQL для получения связей между таблицами

0

Кажется понял — генерация должна быть в одной папке, в которой создается файл .tokens при генерации лексера и который используется при генерации парсера. Т.е. значение параметра -o должно быть одинаковым в обоих случаях.

Парсим с помощью ANTLR 4 хранимки T-SQL для получения связей между таблицами

0

Все правильно в репозитории. Похоже на то, что лексер вы все же не сгенерировали — ругается на неопределенные токены. Не могли бы показать команды, с помощью которых сгенерировали все?

Эпическая миссия DeepMind по решению сложнейшей проблемы науки

Язык программирования Ü. Введение, мотивация к созданию, цели

0
— возможность писать несколько инструкций в одной строке

Зато без такой возможности не получится писать квайны или они будут совсем уродскими.

Российский геймдев, бессмысленный и беспощадный

Russian Railway Simulator (RRS): первый публичный релиз

0

Да уж, трава в виде хаотичных "линий" сразу бросилась в глаза.

Проблема, которую вы решаете, важнее, чем код, который вы пишете

0

Нужны менеджеры, которым нравится Open Source :)


Гитхаб в последнее время активно внедряет поддержку спонсорства. Уже можно спонсорить как проекты, так и самих пользователей. Может это больше их больше стимулирует пилить нужные фичи.

Презентация приложения для проведения презентаций

1 There