[bug] white2 в опере расползся
От шапки до первого поста больше 50 пустых экранов, внизу еще столько же.
Opera 9.50. В firefox и других темах все нормально. Появилось вчера/сегодня.
От шапки до первого поста больше 50 пустых экранов, внизу еще столько же.
Opera 9.50. В firefox и других темах все нормально. Появилось вчера/сегодня.
Международная Огранизация по Стандартизации (ISO) опубликовала новый международный стандарт языка программирования C: ISO/IEC 9899:2011, ранее известный как C1X. Основные изменения:
Кроме того, определен ряд необязательных для реализации возможностей, включая новый набор безопасных функций (в т. ч. для работы с массивами с проверкой границ). В этот список также попали возможности, которые в предыдущем стандарте считались обязательными: комплексная арифметика, массивы переменной длины.
Некоторые возможности нового стандарта уже поддерживаются компиляторами GCC и Clang. Стоит, однако, отметить, что полной поддержки предыдущего стандарта C99 в этих и большинстве других компиляторов нет.
>>> Подробности
http://web.mit.edu/newsoffice/2011/mitx-education-initiative-1219.html
MIT, похоже, пошел по пути Стэнфорда и весной 2012 собирается начать онлайн-обучение по ряду курсов (пока неизвестно, каких). Ожидаются онлайн-лабы и сертификаты для самых башковитых. Обучение бесплатно.
Допустим, при старте программы определяется, какая из множества возможных функций будет вызываться. Допустим, вызов происходит на критическом по производительности участке - тогда расходы на вызов по указателю нежелательны. Рождается трюк, идея:
#include <string.h>
#include <stdio.h>
typedef int (*Func)(void);
#ifdef PATCH
char buf[1024];
#define func ((Func)buf)
#else
Func func;
#endif
int f1(void) { return 1; }
int f2(void) { return 2; }
int f_(void) { return 0; }
int main(void)
{
int i, sum = 0;
#ifdef PATCH
memcpy(buf, f2, (char *)f_ - (char *)f2);
#else
func = f2;
#endif
for(i = 0; i != 0xFFFFFFF; ++i)
sum += func();
printf("sum = %d\n", sum);
return 0;
}
$ cc -O2 main.c && time ./a.out
sum = 536870910
real 0m1.353s
user 0m1.350s
sys 0m0.010s
$ cc -O2 -DPATCH main.c && time ./a.out
sum = 536870910
real 0m0.968s
user 0m0.960s
sys 0m0.000s
1. размер функции не определить в общем случае надежно;
2. buf может оказаться неисполняемым.
Можно как-нибудь обойти эти проблемы? Еще лучше, есть стандартные решения для подобных хаков?
Проясните, пожалуйста, пункт стандарта 6.5/7:
An object shall have its stored value accessed only by an lvalue expression that has one of the following types:
...
— an aggregate or union type that includes one of the aforementioned types among its members (including, recursively, a member of a subaggregate or contained union)
1.
struct A;
struct B;
void f(struct A *a, struct B *b)
{
assert(a == b);
}
Не для этого ли случая нужен атрибут may_alias?
2.
struct A { int a; }
struct B { int b; struct A a; }
void f(struct A *a, struct B *b);
и прочее в том же духе.
Думаете, это предложения по наименованию ubuntu 12.04? Нет, это официальные названия релизов ядра. Пруф для примера
Кто-то еще думает, что canonical не вносит никакого вклада в ядро?*
* на самом деле, промасленный горностай появился еще в 1995.
Разработчики Fedora обсуждают возможное объединение каталогов /bin, /sbin/, /usr/bin и /usr/sbin: предлагается все исполняемые файлы помещать в каталог /usr/bin, а другие каталоги сделать символическими ссылками на него для совместимости.
( читать дальше... )
Таким образом, подобное изменение многое упрощает для разработчика, мейнтейнера и администратора. Если оно будет принято, то может быть реализовано уже в Fedora 17.
>>> Подробности
syslog пишет сообщения в пайп, мой демон их оттуда читает обычными fgets и т. п. Все хорошо, пока не остановится syslog - тогда в пайпе появляется бесконечный EOF, и демон занимает весь CPU.
Можно ли уснуть так, чтобы проснуться только при поступлении реальных данных (при перезапуске syslog)?
FSF сообщает об очередном проекте, который удаляется из списка высокоприоритетных свободных проектов: GNU PDF.
Целю проекта GNU PDF, начиная с его появления в 2007 году, была полноценная реализация грядущего стандарта ISO 32000-1. У нас давно уже есть свободные просмотрщики PDF, но большинство из них не поддерживали новейшие возможности PDF, такие как аннотации и формы.
Мы рады сообщить, что libpoppler, наиболее распространённая библиотека PDF для GNU/Linux, дозрела до поддержки этих и других возможностей PDF. Это означает, что любой пользователь свободного ПО сможет использовать программы с функциями, которые до последнего времени были доступны лишь в проприетарных программах.
FSF поддерживает список высокоприоритетных свободных программных проектов, которые жизненно важны для полностью свободной операционной системы. Предыдущие проекты, исключённые из списка, включают свободную программу для поддержки формата RARv3 (The Unarchiver) и CRM для некоммерческих огранизаций (CiviCRM).
>>> Подробности
Нужно сохранить в файл много целых чисел, кроссплатформенно.
За Big endian то, что это сетевой порядок байт, вроде как он считается платформонезависимым.
За Little endian то, что он чаще встречается, и накладных расходов на перекодирование не будет (скорость важна).
Что правильнее?
Смотрю на gcc.spec из Fedora 15 - похоже, что кросскомпилятор из него собрать нельзя. Это особенно удивляет, потому что для binutils такая возможность есть - target задается макросом. А для gcc - нет.
Так как это предполагается делать средствами RPM?
Запускаю свой скрипт так:
./install.sh 2>&1 | tee ~/install.log
Не могу поднять иксы. Карточка GeForce 8400GS, Gentoo amd64, linux-2.6.37-gentoo-r4, VIDEO_CARDS=«nouveau», xf86-video-nouveau-0.0.16_pre20101130. На X -configure получаю
[ 709.548] (EE) [drm] No DRICreatePCIBusID symbol
[ 709.548] Number of created screens does not match number of detected devices.
Configuration failed.
[ 912.878] drmOpenDevice: node name is /dev/dri/card0
[ 912.883] drmOpenByBusid: Searching for BusID pci:0000:01:00.0
[ 912.883] drmOpenDevice: node name is /dev/dri/card0
[ 912.886] drmOpenByBusid: drmOpenMinor returns -1
[ 912.886] drmOpenDevice: node name is /dev/dri/card1
[ 912.890] drmOpenByBusid: drmOpenMinor returns -1
...
[ 912.995] drmOpenDevice: node name is /dev/dri/card14
[ 912.999] drmOpenDevice: node name is /dev/dri/card15
[ 913.002] (EE) [drm] failed to open device
[ 913.002] (EE) No devices detected.
# lsmod
Module Size Used by
nouveau 538876 0
ttm 49932 1 nouveau
drm_kms_helper 26185 1 nouveau
drm 172525 3 nouveau,ttm,drm_kms_helper
agpgart 27913 2 ttm,drm
i2c_algo_bit 4823 1 nouveau
nvidiafb 36825 0
vgastate 8818 1 nvidiafb
Проект Portable C Compiler ставит своей целью создание альтернативы компилятору GCC для языка C под лицензией BSD. Проект берёт начало от оригинального компилятора C, использовавшегося в UNIX в семидесятые - восьмидесятые годы прошлого века. Компилятор отличают:
Заявлена работа в ОС Linux, *BSD, Windows, Mac OS X, Solaris. Поддерживаются платформы i386 и amd64, другие платформы — ограниченно.
Генерируемый код, в большинстве случаев, сравним по эффективности с кодом, производимым GCC. На данный момент компилятор собирает FreeBSD, NetBSD и ядро OpenBSD.
Некоммерческая огранизация BSD Fund, спонсор проекта, объявляет конкурс по успешной сборке ядра Linux при помощи PCC. Также в их планах фронтенды для языков Fortran (почти готов) и C++.
Есть строка из 3-8 латинских строчных букв, хочу получить для нее 8-битный хэш для создания таблицы.
Все допустимые строки заранее известны, их примерно 40 (потом может добавиться десяток новых строк, но тогда я могу и функцию сменить).
В идеале, обойтись бы без коллизий.
Как подобрать функцию? Где об этом почитать?
Смотрю в elf.h - уйма структур, описывающих заголовок и секции. Ни одна из них не упакована, поэтому теоретически там могут быть дыры, но тогда бинарники получались бы у каждого свои, ни с чем не совместимые.
Так что дыр наверняка нет. Чем это гарантируется? Почему не указали явно упаковку?
Поясните, зачем нужны типы short и long?
Тип int я использую, если мне просто нужна целая переменная, неважно, какой ширины. int - самый эффективный на любой платформе, это удобно. А что известно про long int? Только гарантированная ширина 32 бита. Но если мне нужно 32 бита, я возьму int32_t, это логично, и я не получу сюрпризов на 64-битной машине То же самое относится и к short int, и к long double.
В общем, не вижу смысла в типах, для которых не описано однозначно множество допустимых значений (int - исключение, как уже сказал).
Есть ситуации, когда они всё-таки полезны?
Есть ли готовый заголовочный файл, оборачивающий макросами расширения C основных компиляторов? Наподобие
#if __GNUC__ + 0 >= 2 && __GNUC_MINOR__ + 0 >= 96
#define likely(x) __builtin_expect(!!(x), 1)
#define malloc_like __attribute__((malloc))
#else
#define likely(x) (x)
#define malloc_like
#endif
В sys/cdefs.h есть подобное, но мало, и только gcc, и GPL.
Синтаксическая задача. Есть функция, упрощенно:
static inline void *mm_get_chunk(void **pool)
{
void *head = *pool;
*pool = next(*pool);
return head;
}
Проблема в том, что нужно правостороннее выражение, но нужна и временная переменная.
const char *s = dlerror();
big_function();
puts(s);
Есть ли гарантия, что по адресу, который я запомнил, всегда будет одна и та же строка? Т. е. нет ли там внутри какого-нибудь буфера (я про гарантии стандартов).
Ну и тот же вопрос относительно strerror(errno).
← предыдущие | следующие → |