- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
/// <summary>
/// Check if this char is digit
/// </summary>
/// <param name="symbol">Some char</param>
/// <returns>True if is digit</returns>
private static bool IsDigit(char symbol)
{
List<char> digits = new List<char>();
digits.Add('0');
digits.Add('1');
digits.Add('2');
digits.Add('3');
digits.Add('4');
digits.Add('5');
digits.Add('6');
digits.Add('7');
digits.Add('8');
digits.Add('9');
return digits.Contains(symbol);
}
так сказать код от велосипедиста, сделал свой IsDigit() хотя уже есть char.IsDigit()
А прежде чем читать далее, поймите, я человек очень замороченный на оптимизаци, поэтому C# я изначально ненавижу и решение с "#define" хоть и противоречит идеологии C#, но тем ни менее является самым, ИМХО, оптимальным, т.ч. на это решение прошу не ругаться. Тем кому не нравится, пусть читают "Ну или в худшем случае, ..."
В очень многих программах основной нагрузкой является текстообработка, либо сортировка, поэтому такие функции как isDigit() очень важно писать крайне оптимально. А наиболее быстрой реализацией является, ИМХО, определить один раз массив размером в 256 элементов в котором расставлены единицы там не где цифра и нули там где цифра, и всю функцию, говоря Сишным языком, заменить на "#define isDigit(sym) УПОМЯНУТЫЙ_МАССИВ[(unsigned char)sym]". Это делается за 1-2 инструкции и без вызова функции. Ну или в худшем случае, кто хочет именно делать каждый раз вызов функции (push, call, pop и бла-бла-бла), сделать таки функцию с "return УПОМЯНУТЫЙ_МАССИВ[(unsigned char)sym]".
Ту страшнее то что при каждом вызове он заново его инициализирует список.
А C# я теперь не люблю ещё больше после такой информации :)
в нормальные люди и проверяют. Ну и естественно, если идет строка, то можно превратить в массив символов и проверить, сделать быстрый regexp
если это не используется в циклах с мульоном итераций оптимизация нах не нужна.
единственно лист надо статиком прописать.
код выполняется редко и есть хуева туча мест в проге где можно оптимизировать.
А этот код нормальный читаемый и под профилером наврядли вообще будет заметен.
Я встречал долбоебов которые боялись код выносить в отдельный метод обьясняя это тем что вызов метода жрет ресурс.
Наиболее горячие методы будут, вероятно, заинлайнены JITом.
И массив прийдётся делать на 65536 элементов т. к. в C# используется Unicode
А если с массивом такая проблема, есть общеизвестный способ двойного сравнения (sym>='0' && sym<='9')
К вопросу о твоём решении проблемы методами С++. Кэш не резиновый. Ты предлагаешь тратить кучу памяти на массив, который придётся периодически подгружать в кеш, если программа целиком в нём не умещается. А это здорово замедлит её исполнение. Работу с кешем ты не в силах оптимизировать.
2.) Ты ошибаешься, думая что я пишу на C++;
3.) Ты ошибаешься, что С# быстрее Си, ибо Си намного более приближен к машинному языку, а значит в нём меньше лишних затрат (т.е. почти все затраты связаны с неграмотностью программиста, а не с тяжестью функционала языка);
4.) Ты ошибаешься что С++ даёт универсальный код (не зря придумали "#ifdef __amd64__" и т.п.;)
5.) Ты _очень крупно_ ошибаешься, что Си не использует возможности железа (man gcc);
6.) 256байт ОЗУ - не такая и куча памяти, хотя да - для кеша не так и мало. В любом случае MOV из ОЗУ на Athlon занимает 4 такта (а не из ОЗУ - 1 такт), а двойное сравнение - 3 такта (два сравнения + AND).
Говорят блять что сейчас главное скорость разработки и работоспособность приложения а скока памяти оно жрет не так важно 100МБ или 200MБ на это заказчикам покласть.
А Задротные неудачники вечно пиздят а на с++ на 0.01мс быстрее а на АСМ еще на 0.01 мс быстрее.
Тут блять мы не програмирование реалтайм систем драйверов и прочего говна обсуждаем и примеры говнокода не из них приведены.
неужели это так сложно понять??? я просто охуеваю скока же задротов....
Скажу по секрету, более 95% ПО, которое я использую, писано на Pure C, просто из-за его качества... Мне приятно работать с таким ПО :)
протоколы я разрешаю использовать :)!!
И, "слава Богу", этот php код выполняется не на моих компьютерах :). Я ведь "лазая по сайтам" получаю не php-код, а результат его работы, и он (результат) меня так не пугает)
и не пофиг где код выполняется у вас или на сервере или еще где??? мне например покласть главное что когда я вписываю в строку адрес у меня появляется сайт а уж как оно там все сделано меня не особо ебет какие там процессоры какие операционки и тд.
Просто если пишешь программу, не надо без острой необходимости сидеть и вылизывать часами каждую строчку, но надо пытаться с первого раза писать нормально (ведь если иметь опыть думать над этим, это не затормаживает процесс).
Ибо после попытки довести всё до ума, всё начинает работать. Для почты пришлось писать миниатюрный милтер, который отшибает явный спам не грузя CPU (чтобы разгрузить CPU уменьшив нагрузку от других милтеров).
Вопрос на засыпку почему мелкомягкие со всеми своими "супер-технологиями", мелкомягких ексченджем прочими вещами, которые вы так защищаете используют postfix (который в отличие от мелгомягких решений писан на Pure C)?
Предлагаю вам начать писать свою супер оптимизированную жава машину например. выложить все на sourceforge и уже мы посмотрим тогда и поверим в вашу крутость...
"с 1-го" это всмысле вы витую пару обжимаете?
Зачем? Есть же «github».
Чтобы пользователь пять минут смотрел рекламу, потом ждал 15 секунд "подготовки файла" (чтоб блядь это вообще такое??) и потом качал со скоростью 130 килобит в секунду
Его же можно зарубить на корню, откинув GRE-пакеты.
РКН меня деформировал.
Речь о кривой реализации вышеуказанного кода на C#, а не о самой платформе. И на Си можно неслабо наговнокодить. Для разных задач разноуровневые решения.
3) От того, что Си более низкоуровневый, не значит, что программы на нём сразу станут быстрее. Скорость работы большинства программ ограничено скоростью операций ввода-вывода. И такты выполнения арифметики не решают.
P. S. Я пишу серьёзное ПО и на С++ и c#. И я предпочитаю c#, поскольку, как тут уже многократно сказано, на нём скорость разработки ПО выше, а это вытекает в зарплату. Я пишу на С++ только критические к скорости выполнения арифметики программы.
3.) Скорость большенства программ зависит от того, насколько разумно они написаны, и чаще всего лично на моём Celeron 900MHz упор идёт совсем не в ввод-вывод. А на моём втором компьютере с 256МБайтами ОЗУ тоже вовсе не ввод-вывод.... увы..
2.) Не смотря на это, опыт программирования у меня есть, у меня есть собственные проекты, которые я пытаюсь поддерживать, а так же и на официальных подработках приходится программировать.
Меня вообще всегда бесило, когда люди вместо того чтобы вести дискуссию, начинают оскарблять, использовать тезисы вроде "все делают так, неужели ты думаешь себя умнее других" (аболютно бессмысленный тезис), "я делаю так, а я мега-крутой кодер" и т.п. Хотя самое противное, это когда начинают оскарблять из-за того, что не могут другим способом что-то доказать.
У меня отец программирует со времён перфолент (до того у них появились перфокарты ещё), и я не считаю, что я ему уступаю как программист для современных нужд (хотя его опыт бесценен и порядком больше моего). Это к тому, что то, что ты "крутишься в бизнесе" - не делает тебя лучше других. Компьютер у меня с рождения и я немало упражнялся.
Опять же повторюсь, я не считаю себя экспертом и прошу без перехода на личности
А если смотреть шире, то во все века во всех производственных процессах были мастера и ремесленники. У последних поделки были кривенькие, косенькие, но ведь работают!
Но потомки помнят все-таки мастеров...
Я предлагаю не сидеть и оптимизировать круглые сутки, а _изначально_ писать нормально, притом более быстро (само написание кода), чем вышеуказанный кусок кода.
если вы не можете пережить наездов на ваши религиозные предрассудки в плане программирования то вам будет еще сложнее бабосики зарабатывать. тк поверьте сразу босом вы врядле станите и предется вам хуячить на том что начальство прикажет установить ту операционную систему и тулзу для ваяния кода кот вам купят ну и т.д.
так что не советую вам злоупотреблять выражениями типа я это не буду юзать т.к. она на с шарпе написано или от MS вы сразу будете посланы на хуй еще на собеседовании :)
В конце-концов ресурс познавательный.
И я не понимаю, почему студент-физик отказывается от реальной пользы, которую несет C# для вашего брата. Судите сами, процесс разработки убыстряется, соответственно ваша задача решается намного быстрее. PROFIT!
И хватит оскарблять уже. Если не можете по-другому что-либо доказывать, то это очень плохой признак.
РОССИЙСКО-АРМЯНСКИЙ УНИВЕРСИТЕТ?
«РАУ Айти» — Автоматизация учёта и бизнес-процессов?
ваш моск читает мои мысли
Ваш подход мне очень напоминает:
1.) подход попсы в музыке;
2.) подход microsoft, в момент, когда гигантами были всякие apple, ibm и прочие дяди.
Начнём с попсы, выпускают безвкусное говно для толпы, и людское стадо это глотает, а попсо-группы разживаются с почти пустого места. А есть группы, которые действительно сочинают новую интересную музыку, и многие из них тоже живут неплохо. Тот подход что вы все тут хотите мне впихать - это первое.
Продолжим Microsoft, которые пытались как можно быстрее выпустить своё ПО на рынок без особой отладки, лишь бы завоевать рынок, а далее уже всё неважно.
Да, в том и другом есть смысл, но это подход не для программиста, а для бизнесмена. Есть ведь толпа всяких людей, наподобие Тимо Сирайнен, которые пишут действительно хороший софт, и при этом материально живут очень даже не плохо. Вот этот человек - true программист. :)... А вы все тут опять же предлагаете быть как Microsoft.
Если кто-то, конечно, бездарен, и не способен писать как те люди, что написали всё то на чём держится почти любой сервис (как я уже говорил, даже для выдачи сайтов 95% кода работающего для этого - Pure C, а остальные сервисы не содержат и оставшихся 5%), что он пользуетесь, то конечно ему дорога "рисовать кнопочки и писать в них код подобный <Говнокод #1565> и не важно на каком языке, важно что за код будет с вашим подходом". Я не говорю, что кто-то тут бездарен, мне просто кажется, что Вам лень пытаться делать по-другому... Ну дело Ваше, это Ваше право, если Вам это помогает проще жить - пожалуйста. Просто по мне это далеко от искусства программирования, извиняюсь, за своё скромное мнение.
при написании такого кода моя задача затратить как можно меньше времени и написать код как можно понятнее
в примере метод private коментарий есть реализация очевидна любому кто на этот код смотрит. Да я согласен можно сделать эффективнее но если афтору придется потратить на это лишнее время то я против лучше пусть запустит профайлер и после этого уже оптимизирует...
да и я хочу чтобы микрософт пошел нахуй а я занял его место. И мне покласть на то какого качества будет мой код если он позволит эту цель реализавать!!!
Слушайте, ну пора уже сделать апгрейд
Я понимаю, что 256 метров даже для 2005-го было мало, но в 2009-м продавались компы (новые, не с помойки) с DDR2 объёмом менее гигабайта (да, с Socket 775) с предустановленной Вистой, так что современный на тот момент веб-браузер или MS Office хрустели свопом.
Замена висты на семерку, а HDD на SSD в режиме ахцы, приводила к нереальному совершенно бусту, просто небо и землябля
однажды помню я рефлекшен юзал чтоб добраться до метода который был у моего соседа по работе. И делал это только потому что он был в отпуске, а в его код я лезть не хотел.
Если выложить сюда то тут бы всеб пиздец как изошлись бы что типа я из индустана и тп....
Вы ошибаетесь. Именно на Говнокоде обычно и сидят наиболее квалифицированные инженеры
3) то что он быстрее в разработке на порядке не станете спорить, но вопрос о производительности ниже:
4) пока в коде вы ставити свои директивы #ifdef __amd64__, JiT-ер компилирует под любую архитектуру максимально использовав её преимущества (SSE1-4.2 и т.п) и разработчику не секунды не надо об этом заботится.
6) ваши подсчеты тактов и одновременно спор против высокоуровнего языка - нелепы
3.) Ну, если "туда плюнуть, туда плюнуть и бац! программа которая что-то делает" - это и есть "разработка", то да, спорить не буду;
4.) К сожелению, компиляторы не оборудованны интеллектом, и по-этому знают как оптимизировать с учётом архитектуры только некоторые вещи. Увы... компилятор не может знать, где позволяется что-то сделать, а где нет... Да и более того, на Си код можно писать и без всякого "#ifdef __amd64__" (это вообще крайне редко делают), а компилятор всё-равно будет использовать возможности SSE и т.п. :)
6.) Очень даже не нелепы. И я спорю не против самого языка, а против людей, что считают, что то, что написано выше - "нормально заисключением того, что digits надо определить статически"... Это НЕ нормально, это труд человека, который вообще не думает о том, что делает компьютер с его кодом, и никакой Ваш "JiT-ер" этого никак не исправит.
АХТУНГ АХТУНГ
надо просто запрещать думать на том уровне на каком вы предлагаете думать тем кто на с# програмит чтоб предотвратить появление говнокода в зародыше
1. Идеология людей, связанных с c# ... Интересно. Все люди ложатся под одну гребёнку? Соглашусь, что это попсовый язык, и народ переходит на него с делфи, джавы или бейсика, но это не означает, что там нет грамотных людей, высококлассных профессионалов. Можно поподробнее про идеологию? Есть ссылка, где можно об этом почитать?
4. Ты говоришь о потенциальной возможности человека превзойти компилятор в оптимизации, но над оптимизатором работают профессионалы, которые учитывают большинство встречающихся ситуаций. А программист станет ли писать лучше? .NET фреймворк написан на низкоуровневых языках, а большинство (моего) кода на c# - это обращение к библиотечным классам и методам. Большинство всех тормозов в программе связано с не правильными архитектурными решениями и алгоритмами, и лишь отдальные проценты - с конкретными методами, которые отлавливаются профайлерами и оптимизируются.
6. Данный код действительно ужасен, в нём много проблем, но это не проблемы языка. То же самое пишут и на си.
Здесь же отвечу на вопрос про GC. Действительно, из-за сборщика мусора в памяти может находиться немного лишних данных. Но это единственный его недостаток. Среди достоинств:
1) Отсутствие утечек памяти
2) Выделение памяти под новые объекты происходит мгновенно без обращений к ядру ОС.
3) Освобождение памяти происходит в моменты более низкой загрузки ЦП.
Таким образом, некоторый кусок кода на си, выделяющий много мелких кусоков памяти под временные объекты и освобождающий её, будет работать намного медленнее такого же куска кода на c#, где память соберётся вся сразу и чуть попозже.
P. S. Я пишу серверное ПО для Центра Управления Полётами на c#. Нет там проблем с производительностью.
Предлагаю игру. Походите по сайтам крупных российских и зарубежных компаний и посмотрите, на чём они написаны. Там очень часто встречается ASP.NET, JSP, Flex.
студент должен пойти и убица ап стену
1.) Я извиняюсь за стереотип, это изначально некорректно с моей стороны. Проблема в том, что я привык видеть, что у людей пишуших на C#, код указ
анный выше является нормальным, и многие так до сих пор и считают, просто из-за своей безграмотности. Я думаю моя позицая давно ясна и не требует
дополнительных комментариев. Ещё раз извиняюсь за стереотип.
4.) Приведу простой пример. У меня была надобность реализовать крайне шустро работающую сетевую утилиту, основной нагрузкой которой являлась обра
ботка длинных строк. Дак вот я написал на asm клоны многих libc-шных функций. Суть в том, что в стандартном freebsd-шном libc та же функция bcmp(
) сравнивает строки по-байтно, когда на 32-битном процессоре это можно делать сразу по 4 байта, после чего можно по-байтно проверить "хвосты". Вы
тоге, некоторые операции в утилите стали выполнятся раза в 2 быстрее и никакой компилятор не может догадаться, где так можно делать, а где не сто
ит... увы.. для этого надо обладать интеллектом. И большенство именно сильных оптимизаций (которые ускоряют на значительные проценты), требуют ин
теллекта.
6.) Я более чем согласен, что на Си тоже бывает полно говнокода. Например тот же (i/2 == i - i/2), ведь каждая операция деления занимает нескольк
о десятков тактов на современных CPU, когда "&1" занимает всего один такт. Т.е. (i/2 == i - i/2) работает раз в 50 медленнее. Хотя это, конечно,
не важно, если этот код используется редко, но мне всё-равно было бы за такое стыдно :). Т.е. я более чем согласен, что главное - руки, а только
потом инструмент. Более того, Си в руках плохого программиста, ИХМО, порядком ужаснее, чем язык более высокого уровня (хотя с другой стороны хорошо, хоть учится начиная снизу).
А утечки памяти обычно элементарно решаются valgrind.
с точки зрения говнокода метод не отличается сильной говнистостью т.к.
1. Понятный
2. Короткий
3. Закоментирован
и даже с точки зрения ресурсов я бы не сказал что метод уж очень ужасный
если человек не смог нормально написать этот метод, то я представляю что он напишет в более сложных задачах, и инструмент тут не причем, все дело в квалификации тех кто пишет и тех кто проверяет... ну и еще факто, что разработчик набрал в 11 раз больше строк, чем должен был, то есть работодатель потратил в 11 раз больше средств и в 11 раз больше времени... вот вам и все преимущества С#...
вы не допускаете что логика могла быть более сложная в том методе???
есть уже char.IsDigit()
нахуй он ваще писал этот метод по вашей логике он сыкономил в 11/0 больше времени и теперь должен работать за еду пожизнено...
так и будете вечно оптимизировать и задрачивать свой калькулятор и показывать всем свой мега крутой код когда менее задротистые товарищи будут бобы лопатой грести не смотря на то что их код не идеален.
те кто напишет с первой попытки код приведенный в первом посте должны быть сосланы на рудники, в не зависимости от опыта, зарплаты и страны проживания...
но тут видно стремление к лучшему...
так можно всех сослать на рудник... Останетесь в одиночестве только код не показывайте свой никому а то вас тоже отпраят на рудник.
А дотнет стало быть тоже на компе пользователя компилиться?
>За c#, а, точнее, технологией .NET будущее.
не верю
<offtop>
Вообще я не понимают смысл JIT компилятора - дотнет все равно ничего кроме винды не поддерживает. Очевидно, что
это всего лишь тупой клон джавы
</offtop>
>Ты предлагаешь тратить кучу памяти на массив
А сколько еще места тратиться под всякий хлам, ожидая GC?
по вашему? На чем вы собираетесь кодить после института?
Что смущает?
А для дотнета эта возможность как бы закрыта(есть вроде какая-то глючная опенсорсная поделка под названием mono).
Ещё сигнал/слот. В дотнете есть что-то подобное?
В .NET это всё изначально красиво и органично. Я предпочитаю если и писать на С++, то на чистом.
Вообще я как то с трудом представляю как оно там компилируется для какогонить ебанутого железа.
А для дотнета эта возможность как бы закрыта
– тем временем...
Imagine, рассказать людям из последних лет XX века, что в топ десять контрибьютеров ядра Linux войдет MS, а десктопные приложения будут писать на JavaScript
Да, разумеется. Почитайте про Attached Properties
Вы ошибаетесь
Это довольно общие слова. В среднем конечно плюсы позволяют писать более производительный код, но какой ценой?
> ряде случаев они будут наоборот быстрее, так как программа компилируется на компьютере пользователя, учитывая особенности его железа
Вы про JIT?
Обычно это решается отдельной сборкой нативного приложения под современные процессоры.
Это делает программа ngen или одноимённая служба. Служба в Винде работает отвратительно: если при компиляции возникла ошибка, она будет делать повторные попытки, засирая процессорное время бесполезной работой. Поэтому я её обычно отключаю и зову ngen вручную.
Кстати, ошибками она сыпет на свежеустановленной Винде. Т. е. свежеустановленная Винда уже сломана из коробки. И всем, как обычно.
Пробуйте нортон вин доктор
Т. е. в Винде норма, что у половины экзешников и библиотек нету AOT-образов, и они выполняются на интерпретаторе, но адепты «.Net» будут продолжать твердить про «компиляцию на компьютере пользователя».
Тогда вы понимаете вероятно, что даже такой глупый код нужно делать не через посредство контейнера в куче, а через const массив хотя-бы.
Это почти как твой был, но только у тебя сенди, а у меня айви бридж
Под столом, вернее
А что?
Вот попробуйте на своём C# кодек написать, чтоб h264 720p без дропа кадров и с полным деблокингом смотреть на asus eeepc.
берите блять ЕС1840 и вперед на бейсике ебашите кодеки лет через 10 ченить получиться тока нах никому не нужно уже.
результат на SourceForge мы ждем! А то пиздаболить тут все горазды про реальные результаты а как надо реализовать ченить побыстрому так блять сидять день и ночь неделю там где 3 часа надо. мега оптимизаторы блять
Иите изучать АСМ и будете писать нормально.
Как вы сами говорите скорость разработки - очень важный факторов, поэтому конкретно asm используется крайне редко.
А ПУРЕ C я теперь не люблю ещё больше после такой информации :)
В конечном счете что писать и на чем решает бизнес и только бизнес. А бизнес видит следующие вещи :
За год стоимость каждого компьютера дешевеет по статистики в 2 раза. Мощности предоставляемые современным железом растет все больше и больше. С другой стороны большинство заказчиков на вопрос : "Когда вам нужен будет этот проект?" отвечают : "Вчера". В таких условиях скорость разработки является критической и в свете мощностей железа им становится абсолютно все равно будет ли проект выполнятся в несколько раз медленнее , чем на чистом си.
Человеческий мозг к сожелению ограничен своей некчемностью :-D. Если вы пишете на си , то помимо главной задачи перед которой вы стоите вам приходится концентрироваться на разных побочных задачах. Поскльку вы человек , то вы будете совершать ошибки и каждая побочная задача помимо времени написания требует времени на отладку ( которое порой достигает 80 % от всей разработки). В конечном счете вы можете просто захлебнутся под весом этих побочных задач.
Кроме того вызывает сомнение качество решения побочных задач. Кто решит задачу лучше : тот для кого эта задача стоит главной или тот для кого эта задача является побочной? Понятно же, что тот для кого эта задача главная. С другой стороны проект даже маленького размера требует решения самых разных задач : взаимодействие с сетью, с базой данных, с пользователем, с файловой системой, вычисления и прочее прочее прочее. Вы уверены, что сможете освоить и освоить достатчно хорошо все эти темы, и написать для их решения свой код? Вообще по каждой области нужен свой дорогостоющий разработчик. В итоге это все дорого и еще сложнее в разработке , потому что надо еще налаживать взаимодействие между этими разработчиками.
А теперь представьте, что каждый из специалистов даст вам уже готовые свои решения. Да они будут обобщенными и работать будут медленнее, чем заточенные под ваши задачи, но эти решения уже есть и не надо тратить на них время.
То ПО , которое вы привели в качестве примеров на Си является фундоминтальным. Чем более фундамитальным является ПО , тем кретичнии для него время выполнения и именно поэтому необходимо выбирать си\asm или другие технологии , где скорость выполнения ставится во главе угла. Чем же выше уровень самого проекта ,тем менее важна скорость выполнения, а значит можно ей пожертвовать , чтобы облегчить жизнь программистов и кошелька бизнесменов.
Кроме всего прочего в конечном счете как правило хороший или плохой продукт выходит зависит не от платформы на которой проект разработан, а от того какими руками вы его разрабатывали. Если для решения задачи вы применяете алгоритм со сложностью O(n^3) вместо O(n) или копируете данные кадлый раз , вместо того , чтобы хранить их статично(как в сабже) , то вам ничего не поможет.
ЗЫ
За разработчиков стыдно. Столько хамства и мата...неприятно читать.
PSS
Писал в несколько сообщений т к больше 2000 символов нельзя ((
ну я конечно плюсанул поглядим что наш дорогой студент сможет возразить.
За разработчиков стыдно. Столько хамства и мата...неприятно читать.
Пусть прочувствует что его ждет в реальном мире после института :)
да и потом этож говнокод всеж
Опять же повторюсь, я прекрасно понимаю позицию, за которую тут так усиленно многие держатся, я даже сказал ранее что она имеет смысл. Просто данный подход, как мне кажется, далёк от "искусства программирования" (извинясь за пафосные слова), а люди, сидящие тут отказываются понимать "почему".
И я рад, что тут есть хотя бы рассудительный человек. Вас хотя бы приятно читать. :)
Предлагаю запостить следующий говнокод и поглумиться над ним :)
private static bool IsDigit(char symbol)
{
return ((symbol >= '0') && (symbol <= '9'));
}
public static bool IsDigit(char c)
{
if (!IsLatin1(c))
{
return (CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber);
}
return ((c >= '0') && (c <= '9'));
}
Товарищ студент повернутый на оптимизации выдайте нам ваши предложения
а после мы выдвинем свои :)
private static bool IsDigit(char symbol)
{
return ((symbol >= '0') && (symbol <= '9'));
}
любители рефлектора говорят что это стандартный метод в .нет
Так предложите ваши идеи по оптимизации данного "стандартного" метода!
даем вам время до вторника :)
Все ждем товарища студента повернутого на оптимизации :)
я же сказал что этот метод не оптимален.
Мой вариант
private static bool IsDigit(char symbol)
{
return ((symbol <= '9') && (symbol >= '0'));
}
Думаю что мой вариант будет работать примерно в 2 раза быстрее чем у микрасовта :)
никто случаем не подскажет, в данном случае с оптимизация работает только под отладчиком или нет?
+ умножить на затраты по выполнению
всегда только так!!! в простых случаях может и роли не сыграет большой но когда условие более сложное то оптимизация будет офигенная :)
Такой вопрос, как будет асм код этого условия выглядеть? Там будет в середине условный переход лишний или как? Не терпится прийти домой и посмотреть)))
Тут это совершенно не нужно возможно процессор будет супер хитрой архитектуры и выполнять все условия одновременно а может и не будет :)
Тут главное сам подход к оптимизации сначала оптимизировать логику а уж потом реализацию
movsx eax,byte ptr [a]
cmp eax,39h
jg isDigit+3Ch (4113BCh)
movsx ecx,byte ptr [a]
cmp ecx,30h
jl isDigit+3Ch (4113BCh)
Как и ожидал)) Лишний джамп в серединке.
можно как-то неправильно обработать и за тобой начнут охотиться милые бородатые люди
Гологуб тут носился со Sweden yes, так вот Denmark тоже yes
https://www.rbc.ru/rbcfreenews/64e8c7d29a7947dcd596e781
– но гологубы-то конечно выдрали только что-то одно™
хотя, безусловно, забавно, когда энциклопедию британника можно невозбранно пустить на самокрутки, а в какую-то поеботу, на которую бумаги нормальному человеку должно быть жалко, не дай бог плюнуть
Вдумайтесь блядь: за зжигание куска бумаги предлагают давать два года. Мир ебанутый.
постмодернистское рабство
https://www.youtube.com/watch?v=d_Dk27-x_4Y
подъёбывать граждан так, чтобы они думали, что это похвала
шарли ебдо каждый школьник-то может настругать
Да, ошибиться при обработке цифр можно.
Арабы пишут числа в том же направлении, как мы, а остальной текст — в другом. Т. е. число 123 они начинают писать с тройки, а перед началом текста ставят символ RLM (right-to-left mark), так что число в итоге выводится, как и у нас, единица слева.
И в этих переключениях направлений (RLM, LRM) можно запутаться.
https://en.m.wikipedia.org/wiki/Arabic_letter_mark
У нидерландцев и немцев порядок чисел не тот, что у русских и агличан.
"24" пишется как "четыре и двадцать"
как они сами ёбу не даются с таким))
Сирийцы и персы используют письмо, унаследовавшее все фичи и баги арабского. Буквы и цифры не совпадают с арабами, но все принципы те же.
Мусульмане Индии и Китая используют модифицированное арабское письмо.
У кого ещё сейчас rtl, я не вспомню.
Я надеюсь, сегодня ни у кого нет сомнений, что тех, кто пытается учить программировать на Фортране, нужно изолировать от общества. Почему до сих пор у кого-то есть сомнения на счет тех, кто пытается учить программировать на C#?!!
C# напару с Джавой — это Фортран с Алголом, только чуть-чуть посовременнее!
Почему людей смущает запись
integer function f(n)
integer n,
но до сих пор не смущает public static void f(int n) или A a = new A()?
C# — это абсолютное говно в последней инстанции! (Джаву я для краткости буду опускать.) Хуже нет ничего. Все, что хуже, уже умерло. Когда в C# добавляют всякую фигню из динамических языков программирования, это мне напоминает добавление возможности объявлять рекурсивные функции в Фартране 90. Ура! в Фортране 90 появилась возможность писать
recursive function f(n) result (res)
integer n
integer res
Это должно писаться не длиннее, чем «(def f (n)» или «def f(n):», потому что смысла в этой конструкции ровно столько. В Перле все пишут $_ и прочие $что-то и ни один программист из-за этого еще не запутался. Короткие мысли должны выражаться коротко! Этим Перл хорош.
А C# — чертово убожество!
И это убожество у нас в институте, к примеру, используют не только студенты! Им-то как раз разрешается быть дураками, они в конце концов для того в институт и пришли, чтобы их научили ими не быть. Нет, ребята, не туда пришли! У нас большинство курсов базируется либо на Билдере (нет, не на C++, а на Билдере -- это оказывается есть такой язык, если кто-то не знает), либо на Visual Studio (тоже такой язык), либо у самых продвинутых на C#! Те, кто программирует на C# знают, что Фортран 77 используют только неудачники, а настоящие программисты пишут на Фортране 90! Ой, я имел в виду, C/C++ используют неудачники, настоящие программисты пишут на C#.
«Для создании больших, сложных приложений корпоративного уровня, подходит лучше всего C#.» Да! А для решения задач мат-моделирования и других «матерных» задач, лучше всего подходит Фортран! Везде, где «мат» или «числ», там Фортран. А для написания бухгалтерских приложений, луче всего подходит Кобол! А Питон — это вообще скриптовый язык.
Я, собственно, про F#-то ничего плохого не хочу сказать. Есть каналы — и хорошо, отлично даже. То, что чисто функциональный код хорошо параллелится — тоже хорошо (он правда и 30 лет назад хорошо параллелился). Я просто хочу сказать, что аудитории, где у большинства любимый язык C#, не нужно рассказывать про высокие материи: им скажи, что F в названии F# — это первая буква от Fortran и они будут готовы верить, что F# -- это мегаудобный язык для программирования приложений с «мат» и «числ».
P. S. Не все те, кто пишет на C#, плохие программисты, конечно. Но те, кто пишут на нем добровольно и с удовольствием, — точно. Они могут при этом быть хорошими людьми, но хорошими программистами быть не могут. А тех, кто пытается учить на C#, этих точно нужно изолировать.
Насчет самого кода: по-моему это просто калька с фсяких-там-скриптов типа ("1".."9").include?(symbol)
Чо всех так удивило то же самое в цэшарпе? :/
скоро им .NOT окончательно мозги выест и их можно будет использовать как дешевую замену роботам-уборщикам
омич, дату-то видел?
https://twitter.com/kosa_media/status/1695054935128256839
Я давно это предсказывал
совместим удобство написания кода, скорость компиляции, и производительность в рантайме!
А?
Как идейка?