Сборка мусора и локальные переменные
Alex Che, 2009-10-28 22:21
Если вы программируете на C#, то у меня для вас вопрос. Как вы думаете, сколько раз будет выводиться в консоль строка "GC called" при исполнении следующего кода:
using System; using System.Threading;
class GarbageCollectorTest { public static void Main() { Timer t = new Timer(CallGC, null, 1000, 1000); Console.ReadKey(); }
static void CallGC(object o) { GC.Collect(); Console.WriteLine("GC called"); } }
Правильный ответ: зависит от параметров компиляции. В release-сборке строка выведется только один раз. В debug-сборке строка будет выводится до нажатия пользователем клавиши. В C++ время жизни локальной (автоматической) переменной определяется областью ее видимости - переменная уничтожается в момент выхода потока исполнения из этой области. В C# время жизни такой переменной определяется областью ее использования. Т.е., переменная может быть уничтожена до окончания области своей видимости, если сборщик мусора посчитает, что переменная больше не используется. В debug-сборках для удобства отладки время жизни переменной искусственно удлиняется до окончания области видимости. Что касается Java, то насколько мне известно спецификация JVM тоже допускает подобную реализацию сборщика мусора. P.S.: Если вы программируете на C# и для вас этот пост оказался откровением, прочтите книгу Джеффри Рихтера "СLR via C#". Там вы сможете найти еще много интересного, а главное - полезного для серьезной разработки для .NET Framework. Ярлыки: cpp, csharp
Блиц-вопрос по C#
Alex Che, 2009-09-22 1:57
Сможете ли быстро назвать три преимущества, которые дает использование автоматических свойств (automatic properties) против использования открытых полей в классе? То есть, чем следующее объявление
public string Foo{ get; set; }
лучше этого public string Foo;
Ответ (как это часто бывает) на StackOverflow. Ярлыки: csharp
NOP-инструкции и отладка.
Alex Che, 2009-09-09 12:11
При отладке приложений часто бывает необходимо внести исправления в исходный код программы. Для того, чтобы эти исправления вступили в силу, обычно надо пересобрать приложение и заново запустить отладку. Однако, в Microsoft Visual Studio есть функция edit-and-continue (редактируй-и-продолжай), которая позволяет исправлять исходный код и применять эти исправления без перезапуска приложения. Когда-нибудь задумывались, как она работает? Весь секрет в NOP-инструкциях, которые компилятор вставляет в определенные места исполняемого кода. Их-то как раз и можно заменить на вызов новых операторов. Кроме того, NOP-инструкции позволяют ставить точки останова в те места исходного текста, для которых иначе не существовало бы соответствующего исполняемого кода. Например, на начало блока(открывающая фигурная скобка в C++ и C#). Или на оператор, который бы иcчез в результате оптимизации.
Кстати: Генерация NOP-инструкций может иметь смысл и при компиляции release-версии приложения. Например, при выравнивании блока кода для улучшения кэширования.
Ярлыки: cpp, csharp, development
Концептов не будет в новом стандарте C++!
Alex Che, 2009-07-27 13:55
На своем последнем июльском заседании во Франкфурте комитет по стандартизации С++ проголосовал за исключение концептов (concepts) из почти готового нового стандарта языка. Концепты - пожалуй, наиболее обширное и обсуждаемое нововведение в парадигму мета-программирования С++. Основное назначение - сделать описание требований для типа, используемого в шаблоне, простым и интуитивным, позволяя компилятору генерировать понятные ошибки, если эти требования были нарушены. Кроме того, концепты позволяли бы сделать отображение какого-либо существующего типа для использования в существующем шаблоне, в тех случаях, когда тип и шаблон непосредственно не совместимы. В качестве причин исключения из стандарта называются не полностью законченная и органичная спецификация, излишняя переусложненность и отсутствие необходимого тестирования в реальных условиях. А поскольку концепты потенциально могли стать новым краеугольным камнем C++, было принято решение не стандартизировать "сырую" реализацию. Будут ли включены концепты в последующий стандарт - урезанными, дополненными или полностью переписанными - покажет время.
Пост Страуструпа, касающийся данного вопроса, находится на Dr.Dobb's. Саттер также прокомментировал проблему на своем сайте. Найти другие ссылки по вопросу можно, например, на StackOverflow. Ну а мы с нетерпением будем ждать других нововведений в язык, таких как лямбда-выражения, семантика переноса и rvalue-ссылки, обобщенные константные выражения и др.
Ярлыки: cpp, development, разработка
Новое программное обеспечение для SOR-файлов - скоро!
Alex Che, 2009-01-13 13:09
Вы работаете с рефлектограмами в формате SOR, и круг ваших задач не покрывается возможностями SOR Shell Extension, а существующие полновесные программы для работы с SOR-файлами вас по какой-то причине не удовлетворяют? Или вы просто хотите попробовать новое современное программное обеспечение в своей отрасли? Тогда у нас для вас хорошая новость: мы заканчиваем работу над собственной, удобной и функциональной программой для работы с SOR-файлами.  Следите за обновлениями на сайте и будьте первыми, кто установит Optixsoft EasyViewer! Ярлыки: EasyViewer, SOR
Когда и как использовать SOR Shell Extension
Alex Che, 2009-01-12 17:40
По ремеслу и промысел
(народная поговорка)
К нам иногда приходят письма с подобным текстом: «Я установил ваш SOR Shell Extension. Подскажите, как его запустить?» Пользователи привычно скачивают файл-установщик, привычно его запускают, привычно проходят процедуру инсталляции и привычно лезут в меню «Пуск» в поиске программы для запуска. И не находят ее там (точнее, находят только Configurator). А все дело в том, что SOR Shell Extension – это не программа в привычном смысле этого слова. Как следует из названия, это расширение оболочки. Это значит, что после установки SOR Shell Extension операционная система Windows ведет себя так, как если бы поддержка SOR-файлов была встроена в систему изначально. То есть можно видеть изображения рефлектограмм непосредственно в окне стандартного Проводника Windows (как, например, для файлов JPEG или BMP) или редактировать специфические свойства рефлектограмм в диалоге «Свойства файла», вызваемого из контекстного меню (как, например, для MP3 файлов). И это касается не только стандартного Проводника Windows. Многие программы используют функции Windows API (часто опосредованно, через различные библиотеки) для предоставления пользователю доступа к файлам - в таких случаях SOR Shell Extension тоже себя удачно проявит. Однако иногда возникает и другого рода недопонимание: пользователи воспринимают SOR Shell Extension как замену какой-либо полновесной программе для работы с рефлектограммами (назовем ее SOR-viewer). И пишут подобные письма: «Я установил ваш SOR Shell Extension, попробовал и, знаете, пожалуй буду использовать Неизвестный SOR-viewer». Это почти то же самое, что написать: «Я пробовал смотреть фотографии в окне Проводника Windows и, знаете, пожалуй впредь буду использовать Google Picasa (ACDSee, Windows Imaging, свой вариант)». Каждая программа создается для решения своего круга задач, и SOR Shell Extension не задумывался как замена полновесного SOR-viewer’а. Разметка, автоматический анализ, наложение шаблона событий – это не то, чего стоит ожидать от SOR Shell Extension. Но тем не менее, есть круг задач, которые с его помощью решать проще и удобнее. Приведу несколько примеров. Допустим, вам нужно найти рефлектограмму, имени файла которой вы не помните, но зато помните, как она выглядит внешне. При использовании обычного SOR-viewer’а, вам нужно поочередно открывать и просматривать все SOR-файлы до тех пор, пока вы не найдете нужный. Если файлов много, то подобная процедура может занять длительное время. При использовании SOR Shell Extension все, что вам нужно сделать, это открыть нужную папку в стандартном Проводнике Windows, переключиться в режим «Эскизы» и найти среди изображений рефлектограмм нужную вам.  Или вам нужно скопировать из папки на внешний диск все рефлектограммы с диапазоном расстояний 80 километров. Работая с обычным SOR-viewer’ом вам нужно открывать каждую рефлектограмму, смотреть ее диапазон и, если он равен 80 километрам, копировать ее. Опять-таки, при большом количестве файлов этот алгоритм растягивается во времени, кроме того, есть вероятность допустить ошибку, пропустив нужный файл. Если же у вас установлен SOR Shell Extension, то вам нужно просто открыть нужную папку в стандартном Проводнике Windows, переключиться в режим «Таблица» и отсортировать файлы по колонке «Distance Range, km» (если эта колонка у вас не отображается, то ее нужно включить, нажав правой кнопкой мыши на шапку таблицы). Среди упорядоченных по диапазону расстояний файлов легко выделить и скопировать нужные рефлектограммы.  Если вам нужно поменять стандартное для SOR-файлов поле «Комментарий» у большого числа рефлектограмм и у вас есть только обычный SOR-viewer, то ваша участь становится незавидной. Вам нужно последовательно открывать каждый файл и редактировать в нем нужное поле. Зато установленный SOR Shell Extension позволяет достигнуть этой же цели в разы быстрее. Вы просто выделяете нужные файлы, нажимаете правую кнопку мыши, выбираете «Свойства» и в появившемся диалоге меняете значение поля сразу для всех файлов.  Вот лишь некоторые примеры задач, для которых использование SOR Shell Extension является более удобным. Таким образом, если по роду своей деятельности вам приходится иметь дело с рефлектограммами в формате SOR (Bellcore GR-196/SR-4731), то SOR Shell Extension послужит приятным дополнением к полноценному SOR-viewer’у. Ярлыки: SOR, SOR Shell Extension
3G
Eugene Belianka, 2008-12-02 10:55
3Gить или не 3Gить - вот в чем вопрос
|
|