Знакомая проблема. У меня была ровно та же самая при учебе в Новой Зеландии — меня все прекрасно понимали, но в ответ говорили «без скидок» — и тогда я уже не понимал их, и приходилось просить to slow down — на что следовало некоторое удивление. Но это лечится за пару месяцев погружения.
С другой стороны, после этой самой пары месяцев, и говоришь, и понимаешь уже на таком уровне, что далеко не всегда носители могут определить просхождение акцента (мне приписывали немецкий как родной, например). А вот те, кто приезжает с акцентом вида «зыс ыз э тейбл», обычно и через несколько лет говорят не намного лучше — только более бегло.
Очки с линзами можно заказать в самом базовом варианте за $20 плюс доставка, например, здесь (правда, хз, доставляют ли они в РФ).
Это Китай, разумеется. Делают на заказ прямо там, потом доставляют. Но качество у них вполне себе, во всяком случае, для более дорогих ($70-90) комбинаций, которые я себе позаказывал.
При использовании ToString в сочетании с Format есть одна вещь, про которую легко забыть — если форматирование делается не с CurrentCulture (а, например, с InvariantCulture), то его надо передавать и в Format, и во все ToString. Хотя имхо вообще культуру лучше явно передавать всегда там, где есть такая возможность, и настроить варнинги соответствующим образом.
>> Если же метод работает и с value типами и с reference типами, то, например, сравнение на null лучше писать так
Сравнение с null для value-типов в языке определено отдельно, и не приводит к реальному боксингу. Интереса ради можете попробовать сравнить какой-нибудь Int32 с null в не-generic коде, и посмотреть на IL.
Вообще, тут главное помнить, что любой generic метод, если параметром-типом ему передать value-тип, получит отдельную реализацию на уровне JIT, где конкретный T известен — и оптимизатор там порезвится вволю. Из моих личных экспериментов, генерируемый ассемблерный код практически всегда эквивалентен тому, что получается при ручной подстановке.
>> оператор as работает только с reference типами
Это не так — он работает и с nullable value-типами. К вашему случаю это, правда, не относится поскольку нельзя написать T?, если нет struct constraint (кстати, это, наверное, наиболее косячная деталь в реализации nullable в CLR). Но поскольку у value-типа будет своя инстанциация дженерика, я почти стопроцентно уверен, что JIT-оптимизатор выкинет в ней и box, и isinst, и просто подставит там константу. Хотя это надо проверить.
И он был совершенно корректен. ICQ отодвинули не за счет массовой миграции юзеров существующих, а за счет прихода новых юзеров на другие сервисы. Причем, как правило, это были сервисы, привязанные к чему-то другому (в основном — почта и соц. сети), и именно это обеспечило приход.
А все многочисленные попытки перевести людей с ICQ на Jabber «потому что он лучше» (я в свое время тоже этим занимался в обостренной фазе красноглазия) закончились ничем.
Ну в принципе да. Я как-то привык уже думать о плюсовых библиотеках как о коде, который собирается под данный конкретный компилятор, и линкуется статически (все равно там обычно куча шаблонов в заголовках, а то и все).
Реализация в gcc сделана еще в те времена, когда это соответствовало стандарту (C++03). А теперь они не могут её изменить, потому что тогда поломается их ABI (это, кстати, к вопросу о стабильном C++ ABI...). Тот же Clang, например, поменял.
Ну и фотошоп же.
С другой стороны, после этой самой пары месяцев, и говоришь, и понимаешь уже на таком уровне, что далеко не всегда носители могут определить просхождение акцента (мне приписывали немецкий как родной, например). А вот те, кто приезжает с акцентом вида «зыс ыз э тейбл», обычно и через несколько лет говорят не намного лучше — только более бегло.
Просто раньше это было исключением из правил.
Это Китай, разумеется. Делают на заказ прямо там, потом доставляют. Но качество у них вполне себе, во всяком случае, для более дорогих ($70-90) комбинаций, которые я себе позаказывал.
Вы сильно отстали от жизни. Примерно на три года :)
>> Если же метод работает и с value типами и с reference типами, то, например, сравнение на null лучше писать так
Сравнение с null для value-типов в языке определено отдельно, и не приводит к реальному боксингу. Интереса ради можете попробовать сравнить какой-нибудь Int32 с null в не-generic коде, и посмотреть на IL.
Вообще, тут главное помнить, что любой generic метод, если параметром-типом ему передать value-тип, получит отдельную реализацию на уровне JIT, где конкретный T известен — и оптимизатор там порезвится вволю. Из моих личных экспериментов, генерируемый ассемблерный код практически всегда эквивалентен тому, что получается при ручной подстановке.
>> оператор as работает только с reference типами
Это не так — он работает и с nullable value-типами. К вашему случаю это, правда, не относится поскольку нельзя написать T?, если нет struct constraint (кстати, это, наверное, наиболее косячная деталь в реализации nullable в CLR). Но поскольку у value-типа будет своя инстанциация дженерика, я почти стопроцентно уверен, что JIT-оптимизатор выкинет в ней и box, и isinst, и просто подставит там константу. Хотя это надо проверить.
А все многочисленные попытки перевести людей с ICQ на Jabber «потому что он лучше» (я в свое время тоже этим занимался в обостренной фазе красноглазия) закончились ничем.
Проблемы начинаются с ABI. То есть там, где клиентом библиотеки могут быть не плюсы.