Сборка Rust

25 янв 2016 10:38


Rust — это новый системный язык программирования, разрабатываемый в компании Mozilla. Это компилируемый язык, т.е. исходный код программы транслируется в машинный код с помощью компилятора. Как и любое популярное свободное программное обеспечение Rust должен найти свою дорогу в дистрибутивы Linux и другие свободные Unix-системы. Появление его в стабильных дистрибутивах открыло бы возможности для его широкого распространения и использования. Пока этот процесс происходит медленно и связан с некоторыми особенностями сборки.

Дальше


Комментарии 0


Perl 6 в Sisyphus

30 окт 2015 17:02


На днях собрал rpm-пакет компилятора Perl 6 Rakudo 2015.10 для ALTLinux SIsyphus. Это первая официальная бета-версия, поэтому мне показалось важным подготовить готовую сборку, которую можно быстро и просто поставить в систему и сразу начать играться. К моменту выхода официального релиза, можно будет уже вытоптать какие-то огрехи и успеть исправить.

Дальше


Комментарии 0


Линковка XS-модулей

30 окт 2015 14:46


Похоже мало кто озабочен линковкой XS-модулей с libperl.so. Поэтому ситуация с неопределёнными символами считается вполне нормальной:

$ ldd -r /usr/lib/perl5/auto/Algorithm/Diff/XS/XS.so
    linux-vdso.so.1 =>  (0x00007ffc51549000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f76236b6000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7623c7f000)
undefined symbol: PL_thr_key	(/usr/lib/perl5/auto/Algorithm/Diff/XS/XS.so)
undefined symbol: Perl_xs_version_bootcheck	(/usr/lib/perl5/auto/Algorithm/Diff/XS/XS.so)
undefined symbol: Perl_sv_setref_pv	(/usr/lib/perl5/auto/Algorithm/Diff/XS/XS.so)
undefined symbol: Perl_sv_2iv_flags	(/usr/lib/perl5/auto/Algorithm/Diff/XS/XS.so)
undefined symbol: Perl_newRV_noinc	(/usr/lib/perl5/auto/Algorithm/Diff/XS/XS.so)
...

Ну и действительно, зачем парится, если при загрузке расширения разделяемая библиотека libperl.so уже наверняка загружена в памяти и символы успешно разрешатся. Веселье с фейрверком SIGSEGV начинается когда такое расширение будет загружаться в процесс, в котором libperl.so немного с другим ABI (например, установлен новый perl 5.22.0).

Дальше


Комментарии 0


Размер буфера пайпа

17 май 2015 22:45


Запись данных в пайп, как правило, атомная операция в пределах размера буфера пайпа. До Linux 2.6.11 ёмкость пайпа составляла 4Кбайта, после её увеличили до 64Кбайт. А вот в 2.6.35 появилась возможность менять размер буфера, в том числе и непривигелированному процессу. Для этих целей можно воспользоваться вызовом fcntl с операцией F_SETPIPE_SZ.

В Perl модуль Fcntl ничего не знает о таких операциях как F_SETPIPE_SZ или F_GETPIPE_SZ, но, как выяснилось это не проблема:

use Fcntl;
# bits/fcntl-linux.h
use constant {
    F_SETPIPE_SZ => 1031,
    F_GETPIPE_SZ => 1032,
};
 
pipe my $r, my $w or die $!; 
 
print "buffer:  " . fcntl( $r, F_GETPIPE_SZ, 0 ) . "\n";
fcntl( $w, F_SETPIPE_SZ, 512 * 1024 );
print "buffer:  " . fcntl( $r, F_GETPIPE_SZ, 0 ) . "\n";

Программа выведет размер буфера до и после изменения:

buffer:  65536
buffer:  524288

Максимальный размер буфера пайпа для простых пользователей задан в /proc/sys/fs/pipe-max-size (1 Мб).


Комментарии 0


eval $VERSION

31 мар 2015 17:07


Часто встречал в модулях подобную запись

our $VERSION = '1.200';
$VERSION = eval $VERSION;

Только не было понятно зачем нужен eval. Как оказалось, это задокументированная фича . Такие сборочные утилиты, как ExtUtils::MakeMaker ищут лишь первую строку с $VERSION, чтобы извлечь информацию о версии модуля. Сам же модуль может в последующем использовать числовое представление версии, которое преобразуется из строки с помощью eval.

С одной стороны, если версия это строка 1.200, то явное преобразование не требуется, но если это бета-версия, например, 1.199_01, то попытка использования такой строки в числовом выражении будет выводить предупреждение:

$ perl -we 'our $VERSION="1.199_01"; my $newer_than_1_2 = $VERSION > 1.2;'
 
Argument "1.199_01" isn't numeric in numeric gt (>) at -e line 1

Вызов eval как раз и решает подобную проблему.


Комментарии 2


Переезд домена к другому регистратору

26 янв 2015 13:12


Перенёс домен блога truecrux.org от reg.ru к зарубежному регистратору. Насколько уже могу судить, переезд прошёл гладко. Трансфер я делаю впервые, поэтому было интересно посмотреть все стадии процесса. Для международных доменов процесс переезда прост: у текущего регистратора запрашивается EPP-код , передаётся новому, а затем в течении 5 дней старый регистратор передаёт домен. Единственно удивило, что reg.ru требует скан паспорта для подобной операции.

P.S. И да, undzilit4.me переехал на субдомен undzil.truecrux.org


Комментарии 0


Разница между all и everything

12 янв 2015 12:30


Иногда в разрабатываемую версию Perl проталкивают решения, от которых хочется поднести ладони к лицу -_\

В этот раз под раздачу попал механизм предупреждений, когда из соображений обратной совместимости отвергается здравый смысл...

Дальше


Комментарии 1


Обновление блога

07 сен 2014 22:38


Немного подновил внешний вид блога (да-да, нежно любимый bootstrap) и перевёл сайт на https. Была идея запустить его также поверх протокола http2 (на веб-сервере Shuvgey ), но пока в нём не реализован откат на http/1.1, блог будет недоступен для всех браузеров, кроме последних версий Firefox. Так что, пока фича не реализована пусть будет традиционное решение...


Комментарии 0


Протокол HTTP/2 и его реализация

20 май 2014 11:58


Работа над новым протоколом для всемирной сети находится на завершающем этапе. HTTP/2 должен решить многие застарелые проблемы HTTP/1.1 и дать возможность Интернету развиваться дальше. Есть довольно хорошая статья «http2 explained» , посвященная новому протоколу HTTP/2, разъясняющая предпосылки его создания и наглядно демонстрирующая его возможности и принципы работы. Статья, тем не менее, не содержит какой-либо детальной технической спецификации протокола. Есть также отличная книга Ilya Grigorik «High-Performance Browser Networking» , веб-версия которой свободно доступна , и которая также содержит интересные детали о прародителе HTTP/2 - SPDY и самом HTTP/2 (правда уже немного устаревшие). После её прочтения я вдохновился создать реализацию HTTP/2-протокола и в процессе досконально изучить новый протокол. Эта статья - небольшой отчёт за последние два месяца убитого свободного времени.

Дальше


Комментарии 6


Сборка Perl 5.18.1

05 сен 2013 07:04


Завершилось обновление Perl до версии 5.18.1 в репозитории ALTLinux Sisyphus.

Как обычно, при смене мажорной версии Perl происходит изменение API libperl, что означает, что требуется пересборка всех программ и модулей слинкованых с libperl.so. В отличии от многих других вендоров в ALTLinux нельзя просто так взять и обновить библиотеку, сломав сотни зависимых программ. Чтобы новая библиотека прошла в репозиторий для разработчиков, должна быть создана транзакция в сборочной системе, в рамках которой происходит сборка новой библиотеки и выполняется пересборка всех зависимых приложений. В случае с Perl 5.18.1 такая транзакция состояла из 320 пакетов.

Как обычно, процесс пересборки начинается с мучительного вспоминания, а как проходит эта процедура и с чего начинать. Поэтому я решил сделать подробную заметку о деталях сборки для тех, кто будет в будущем собирать версию 5.20 и последующие.

Дальше


Комментарии 0