Pull to refresh
225
0
Акиньшин Андрей @DreamWalker

Performance Engineer at JetBrains

Send message
GIF, которая должна быть здесь

kekekeks SergeyT mezastel sidristij DreamWalker — представители мира DotNet. Хотя на хабре в последнее время появляются реже. :(
Попробовал сравнить производительность на функции из реального проекта (одна из самых «числодробительных» частей программы, на некоторых этапах работы в ней проходит 60% общего времени).
Функция выглядит примерно так:
        static int Unpack(int[] rec,int len,int[] res) {
            int p=0,np=0;
            int a=rec[p++],c=31;
            while(p<len) {
                for(int i=0;i<NCh;i++) {
                    int t=a&1;
                    int x=(t==0) ? LShort[i]+1 : 17;

                    int r=a;
                    if(x<c) {
                        a>>=x; c-=x;
                    } else {
                        int s=x-c;
                        a=rec[p++];
                        r|=a<<c;
                        a>>=s;
                        c=31-s;
                    }
                    x=32-x; r=(r<<x)>>(x+1);
                    if(t==0) r+=Val[i];
                    Val[i]=r;
                    res[np++]=UCvt[r&65535];
                }
            }
            return np;
        }

(в массиве LShort лежат какие-то числа от 7 до 11, NCh=10).


Она занимается распаковкой некоторого битового потока.
Время распаковки 1 ГБ на C# (в том виде, как она написана) — 6.7 сек. Если её переписать на C++, получится 5.4 сек. Если в C# заменить rec и res на указатели, время уменьшится до 5.8 сек, если заменить на указатели ещё и три остальных массива — то получится 5.48 сек, всего на 1.5% больше, чем в C++. Исходный проигрыш был 24%.
Пока эта проигранная секунда не окажется для кого-нибудь критической, переходить из-за одной функции к смешанному коду (C# + unmanaged C++) не буду :)
Вы будете смеяться, но да.
blog.chirkov.net/2015/01/14/pro-tezok-sudebnyx-pristavov-i-vytekayushhie-iz-etogo-problemy
Гарантированными идентификаторами являются:
ФИО+ДР+ Место рождения.
На выборках до 20 млн записей «Место рождения» чаще не играет роли, а на бОльших объемах находятся такие казусы.
Мне выступление Андрея Акиньшина (Enterra— Поговорим о различных версиях .NET) по стилю показалось очень похожим на BadComedian.
Из фич языка: GC и арена, функции высшего порядка типа Linq, делегаты, Expressions, генерируемый код, отражение, исключения, объектная модель, асинхронная модель, сериализация, модель ресурсов, overflow проверки.

Из workflow: статический анализ, АОП и жизнь после компилятора вообще, расширяемость компилятора, скорость сборки, тестирование, nuget (актуально для Windows).

Разумеется, многое из этого есть в С++, особенно 11-14, но не настолько развито и нативно встроенно в среду. Если бы я сравнивал большие проекты на С++ и C# с точки зрения эффективности разработки, я бы привёл в пример такие проекты, как CMake, Source (Valve), Unreal от С++ и WPF, Autofac и NHibernate от C#.

Но если у вас большое количество нецелых вычислений, я бы всерьез рассматривал С++ при начале проекта. C# в этой области достаточно слаб.
Даааа, Delphi она такая, всегда всё проверяет, за нами подтирает. За то и любим )
> Файлы в формате PDF и TeX редакцией не принимаются.

Говно это, а не журнал!
Кажется это первое подобие холивара на тему «ворд против латеха», который я видел, все же обычно пользователи ворда в собрания адептов латеха просто не заходят.

Среди преимуществ латеха традиционно перечисляют объективные: бесплатность, доступность, возможность работы с простым (plain) текстом, вследствие чего простота контроля версий, повторяемость и предсказуемость результата и пр. Также субъективные: качество документа на выходе, разделение форматирования и содержания и еще, скажем так, легкость и быстрота осуществления глобальных изменений (об этом выше писал ivlis).

У латеха есть, конечно, и недостатки: чтобы им пользоваться, надо что-то знать про компиляцию, синтаксис, классы документов или хотя бы нагуглить себе шаблон. Чтобы успешно пользоваться вордом, надо уметь давить кнопки на клавиатуре и, возможно, еще двигать курсор по экрану с помощью мышки. У ворда нулевой порог вхождения (может быть, и отрицательный вовсе), и это считается его большим преимуществом.

На самом деле, сравнивать ворд с латехом, конечно, вообще глупо, потому что они решают совершенно разные задачи: латех успешно верстает монографии, а при помощи ворда можно накалякать полстранички текста, когда времени мало (у меня, правда, нет ворда, поэтому полстранички я лично тоже калякаю в латехе, выходит очень красиво). К слову о монографиях: по латеховским форумам гуляет призказка о том, что учебники по ворду обычно верстают в чем угодно, кроме ворда, а учебники по латеху в латехе и верстают.

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

В общем, понятно, что выбор за пользователем и все такое, но мне кажется немного предсказуемым, что в хабе «LaTeX» комментарий в духе «Я слышал, что где-то заставляют пользоваться латехом; хорошо, что не везде, потому что по мне и ворд ничего» звучит примерно как «Я слышал, что где-то заставляют слушать Бетховена, а по мне и Стас Михайлов ничего». Как по мне, то этот комментарий везде так звучит, но это, конечно, только мое мнение.

Information

Rating
Does not participate
Works in
Registered
Activity