четверг, 3 ноября 2005 г.
Про Quake 4
Мой друг (интересно, он меня еще помнит? :) написал неплохую рецензию на Quake 4. Полагаю, это краткое изложение, а полный вариант, видимо, пошел в журнал.
среда, 2 ноября 2005 г.
Закончились разборки с платформами...
...Windows, Sun Solaris, Linux и MacOS.
Наиболее корректно повела себя MacOS, с помощью которой и удалось локализовать проблему. Изначально же, приложение (собранное из одних и тех же исходников!) устойчиво работало везде, кроме Sun Solaris, где оно --- приложение --- загадочным образом падало.
Исходники были не мои, поэтому поиск "того, не знаю чего" занял несколько дней. Хорошо, что вовремя связался с MacOS.
Проблема оказалась в работе с константными строками. То есть, в коде было написано такое:
char *CONST_NAME = "blah-blah-...";
И, через много мегабайт кода, ---
free(CONST_NAME);
Не спрашивайте, почему так, не я писал. Возможно, там изначально констант и не было.
Windows на такие подставы не реагирует, ибо там строки не помещаются компилятором в неизменяемую секцию данных (если компилятор не может от них избавиться). Известная штука. Linux на это промолчал, думаю, что там можно специальными средствами локализовать проблему (если бы я, скажем, сказал что-то типа CONST_NAME[1] = 'k', то получил бы сигналом в лоб, а так...). MacOS честно бросила в консоль сообщение, что есть проблемы с вызовом free(). И только Sun Solaris молча падала, причем падение происходило уже после возвращения из нативного кода в Java, что только запутывало ситуацию, ибо я уже начал думать, что где-то портятся данные jvm ;)
Резюме такое: с точки зрения стабильности приложения --- лучше упасть, а не продолжать работу, ибо что-то в коде не так. С точки зрения разработчика лучше не падать, а выдать системное сообщение с описанием проблемы. Поэтому, нужны какие-то настройки, можно даже в виде переменных окружения, которые бы позволили управлять поведением процесса. Возможно даже иметь трассировочную информацию по операциям с памятью. Это представляется критичным в случае разработки смешанных приложений Java+native, когда надо знать, что происходит внутри jvm, а что --- внутри нативного кода.
Наиболее корректно повела себя MacOS, с помощью которой и удалось локализовать проблему. Изначально же, приложение (собранное из одних и тех же исходников!) устойчиво работало везде, кроме Sun Solaris, где оно --- приложение --- загадочным образом падало.
Исходники были не мои, поэтому поиск "того, не знаю чего" занял несколько дней. Хорошо, что вовремя связался с MacOS.
Проблема оказалась в работе с константными строками. То есть, в коде было написано такое:
char *CONST_NAME = "blah-blah-...";
И, через много мегабайт кода, ---
free(CONST_NAME);
Не спрашивайте, почему так, не я писал. Возможно, там изначально констант и не было.
Windows на такие подставы не реагирует, ибо там строки не помещаются компилятором в неизменяемую секцию данных (если компилятор не может от них избавиться). Известная штука. Linux на это промолчал, думаю, что там можно специальными средствами локализовать проблему (если бы я, скажем, сказал что-то типа CONST_NAME[1] = 'k', то получил бы сигналом в лоб, а так...). MacOS честно бросила в консоль сообщение, что есть проблемы с вызовом free(). И только Sun Solaris молча падала, причем падение происходило уже после возвращения из нативного кода в Java, что только запутывало ситуацию, ибо я уже начал думать, что где-то портятся данные jvm ;)
Резюме такое: с точки зрения стабильности приложения --- лучше упасть, а не продолжать работу, ибо что-то в коде не так. С точки зрения разработчика лучше не падать, а выдать системное сообщение с описанием проблемы. Поэтому, нужны какие-то настройки, можно даже в виде переменных окружения, которые бы позволили управлять поведением процесса. Возможно даже иметь трассировочную информацию по операциям с памятью. Это представляется критичным в случае разработки смешанных приложений Java+native, когда надо знать, что происходит внутри jvm, а что --- внутри нативного кода.
вторник, 1 ноября 2005 г.
Новая эмблема для FreeBSD
Подробности тут. ИМХО, зря. Раньше лучше было... а теперь очень на махровые KDE'шные иконы похоже.
Линкер в MacOS
MacOS по-прежнему рулит :)
Среди win, linux, solaris линкер в MacOS реально ткнул носом в проблемы в коде, а при выполнение мне бодро сообщили о проблемах с повторным удалением памяти (для одного и того же блока два раза вызывался free()). Конечно же, все везде можно настроить, но гораздо приятнее, когда максимальные ограничения выставлены по умолчанию.
Среди win, linux, solaris линкер в MacOS реально ткнул носом в проблемы в коде, а при выполнение мне бодро сообщили о проблемах с повторным удалением памяти (для одного и того же блока два раза вызывался free()). Конечно же, все везде можно настроить, но гораздо приятнее, когда максимальные ограничения выставлены по умолчанию.
Зима.
Пересел на зимнюю резину. Снега нет. Льда тоже. Шуршит... особенно, на бетонном покрытии в гараже.
PowerBook & MacOS X
Все ж таки, эта парочка рулит! Вот по одиночке, наверное, впечатление было бы не то.
Подписаться на:
Сообщения (Atom)
Спутник взлетает. Первая ступень отработала.
И, кажется, неплохо: Посмотрим, что будет когда отработает вторая.
-
Арт-группа «Явь» нарисовала на одной из стен петербургских зданий граффити со Стивеном Хокингом : Неизвестно только где.
-
10 вещей, о которых мы не знали .
-
Это один из моих проектов, над которым я работаю последнее время. Как понятно, почти безуспешно ;) Название рабочее пока. Тул задуман для дв...