The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Первый официальный выпуск rav1e, кодировщика AV1 на языке Rust , opennews (?), 09-Ноя-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


116. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Аноним (87), 11-Ноя-19, 20:58 
Что-то ебилдов не видно — ни в портеже, ни в оверлеях, ни на багтрекере нет. Деплой зоопарка растолиб оказался гентушникам не под силу?
Ответить | Правка | Наверх | Cообщить модератору

126. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Аноним (122), 12-Ноя-19, 03:00 
Какой такой зоопарк? В расте статическую линковку делают обычно,.
Ответить | Правка | Наверх | Cообщить модератору

129. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  –1 +/
Сообщение от Аноним (-), 12-Ноя-19, 10:31 
>Какой такой зоопарк? В расте статическую линковку делают обычно,.

Поэтому helloworl! на Расте весит 5 Мегабайт?

Ответить | Правка | Наверх | Cообщить модератору

134. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от анонн (ok), 12-Ноя-19, 13:03 
> Поэтому helloworl! на Расте весит 5 Мегабайт?

Странно.


% rustc -V                                                                        
rustc 1.38.0
% cat hello.rs

fn main() {
  println!("Hello World!");
}
% rustc hello.rs
% ll hello
-rwxr-x---  1 анонн  wheel   286K 12 Nov. 16:59 hello
% readelf -d hello|grep NEED                                                  
0x0000000000000001 NEEDED               Shared library: [libthr.so.3]
0x0000000000000001 NEEDED               Shared library: [libgcc_s.so.1]
0x0000000000000001 NEEDED               Shared library: [libc.so.7]

% strip hello
% ll hello
-rwxr-x---  1 анонн  wheel   215K 12 Nov. 16:59 hello

% rustc hello.rs -O -C lto
% strip hello
% ll hello
-rwxr-x---  1 анонн  wheel   189K 12 Nov. 17:00 hello


Попробуйте собирать не из под Виндовс.

Ответить | Правка | Наверх | Cообщить модератору

140. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Anonymoustus (ok), 12-Ноя-19, 16:19 
>> Поэтому helloworl! на Расте весит 5 Мегабайт?
> % ll hello
> -rwxr-x---  1 анонн  wheel   189K 12 Nov. 17:00
> hello
>
> Попробуйте собирать не из под Виндовс.

Всё равно же много.

У меня в Виндовс хелловорлд на Сишечке, собранный посредством TCC (Tiny C Compiler by Fabrice Bellard), весит 2048 байт. TCC, конечно, не мейнстрим вроде GCC, но пусть будет убойным примером ради высшей справедливости.

Если собирать обычным GCC (была использована версия 4.7.2), то получается 34816 байт статически слинкованного сабжа.

Ответить | Правка | Наверх | Cообщить модератору

145. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от анонн (ok), 12-Ноя-19, 19:43 
> Всё равно же много.

Учитывая, что libc вообще-то рантайм библиотека для этой самой сишечки, а не раста, то нормально.

> У меня в Виндовс хелловорлд на Сишечке, собранный посредством TCC (Tiny C
> Compiler by Fabrice Bellard), весит 2048 байт.

Ну, хелловорлд я вам и в 20-100 байтов запулить могу, если брать старые версии виндовс. А PE32 в винде ЕМНИП ограничен минимально прожевываемым самим PE-загрузчиком размером выравнивавия секции (в смысле: section alignment) -- т.е. если без слишном уж грязных хаков, то 0.5-2КБ, зависит от версии винды и от дырявости моей памяти ;)

> TCC, конечно, не мейнстрим вроде GCC, но пусть будет убойным примером ради высшей справедливости.

А убоен он в первую очередь беспощадной бессмысленность такого примера, потому что все же, в конечном итоге интересны совсем не хелловорды? ;)
Ну и:


% cat hw.c && gcc -Os -s hw.c -o hw && ll hw
#include <stdio.h>
int main(void) {
    puts("Hello World!");
    return 0;
}
-rwxr-x---  1 анонн  wheel   4,8K 12 Nov. 21:00 hw

% gcc --version      
gcc (FreeBSD Ports Collection) 9.2.0

> Если собирать обычным GCC (была использована версия 4.7.2), то получается 34816 байт
> статически слинкованного сабжа.

В винде - статистически слинкованный? Я что-то пропустил и PE-бинарник уже "годен" (valid) без привязки к kernel32.dll/user32.dll (и они точно-точно не прилинковываются ;) )?

Если слинковать статистически, это выглядит примерно вот так:


gcc -O2 -s -static hw.c -o hw && ll hw
-rwxr-x---  1 анонн wheel   553K 12 Nov. 21:09 hw
ldd hw
ldd: hw: not a dynamic ELF executable

Сейчас возможно набегут особо поклоннистые поклонники альтератив типа musl и заявят, что я ламо, протому что получить можно в 10 раз меньший бинарник, если использовать прямые руки и т.д. и т.п. - но вообще-то это не принципиально.

В расте тоже можно немного поизвращаться с (расто-std) библиотеками:
https://github.com/johnthagen/min-sized-rust


ldd target/release/min-sized-no_std
target/release/min-sized-no_std:
    libc.so.7 => /lib/libc.so.7 (0x800248000)
-rwxr-x---  2 анонн  wheel    15K 12 Nov. 21:25 target/release/min-sized-no_std

Но смысл сего действа все же ускользает от меня (сравнение размера хелловорда ради сравнения размеров хелловордов?)
Ответить | Правка | Наверх | Cообщить модератору

148. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Anonymoustus (ok), 12-Ноя-19, 20:05 
>> Всё равно же много.
> Учитывая, что libc вообще-то рантайм библиотека для этой самой сишечки, а не
> раста, то нормально.

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


>> У меня в Виндовс хелловорлд на Сишечке, собранный посредством TCC (Tiny C
>> Compiler by Fabrice Bellard), весит 2048 байт.
> Ну, хелловорлд я вам и в 20-100 байтов запулить могу, если брать
> старые версии виндовс. А PE32 в винде ЕМНИП ограничен минимально прожевываемым
> загрузчиком размером выравниваия секции (т.е. если без слишном уж грязных хаков,
> то 0.5-1.5КБ, зависит от версии винды и от дырявости моей памяти)
> ;)

Примеры в студию, чо. :)


>> TCC, конечно, не мейнстрим вроде GCC, но пусть будет убойным примером ради высшей справедливости.
> А убоен он в первую очередь беспощадной бессмысленность такого примера, потому что
> все же, в конечном итоге интересны совсем не хелловорды? ;)

Я так и написал: этот пример исключительно для убойности, а не для пользы.


> Ну и:
> -rwxr-x---  1 анонн  wheel   4,8K 12 Nov. 21:00

Другим компилятором (GCC 6.3.0) у меня получилось 12 КБ. Ну есть же простор для манёвров.


>> Если собирать обычным GCC (была использована версия 4.7.2), то получается 34816 байт
>> статически слинкованного сабжа.
> В винде - статистически слинкованный? Я что-то пропустил и Portable Executable уже
> годен(valid) без привязки к kernel32.dll/user32.dll (и они точно-точно не прилинковываются)?
> Если слинковать статистически

Статически же. Статистика про совсем другое.


> это выглядит примерно вот так:
>

 
> gcc -O2 -s -static hw.c -o hw && ll hw
> -rwxr-x---  1 анонн wheel   553K 12 Nov. 21:09 hw
> ldd hw
> ldd: hw: not a dynamic ELF executable
>

Как-то так:


ldd Hello.exe
        ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77c00000)
        kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll (0x759d0000)
        msvcrt.dll => /cygdrive/c/Windows/syswow64/msvcrt.dll (0x75d60000)

В опциях компилятора: -static-libstdc++ -static-libgcc


> Сейчас возможно набегут особо поклоннистые поклонники альтератив типа musl и заявят, что
> я ламо, протому что получить можно в 10 раз меньший бинарник,

// поскипано
> Но смысл сего действа все же ускользает от меня (сравнение размера хелловорда
> ради сравнения размеров хелловордов?)

Смысл действа в рационализации того, что происходит. Выше я отметил про современный жирнософт, на 95 % наполненный цифровым мусором. Сколько, например, процессорного времени и оперативной памяти потребляет говнософт на каком-нибудь электроне? Вам не кажется это немножечко 3,14здецом?

Ответить | Правка | Наверх | Cообщить модератору

156. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от анонн (ok), 12-Ноя-19, 21:19 
>>> У меня в Виндовс хелловорлд на Сишечке, собранный посредством TCC (Tiny C
>>> Compiler by Fabrice Bellard), весит 2048 байт.
>> Ну, хелловорлд я вам и в 20-100 байтов запулить могу, если брать
>> старые версии виндовс. А PE32 в винде ЕМНИП ограничен минимально прожевываемым
>> загрузчиком размером выравниваия секции (т.е. если без слишном уж грязных хаков,
>> то 0.5-1.5КБ, зависит от версии винды и от дырявости моей памяти)
>> ;)
> Примеры в студию, чо. :)

Для PE32 классика же:
http://www.phreedom.org/research/tinype/
Конкретно у себя нашел пару-другую 512 байтов (там всех делов-то - указать линковщику размер выравнивания и чтобы все в одну секцию мержил:
Link /SUBSYSTEM:WINDOWS /FILEALIGN:512 /MERGE:.rdata=.text /MERGE:.data=.text /section:.text,RWE
) ну и кучу 1KB-мелочи. На фоне tinype не вижу особого смысла колупать доисторическое.

А насчет старых версий:


CSEG segment
org 100h
Begin:
    mov ah,9
    mov dx,offset Message
    int 21h
    mov ah,1
    int 21h  
    int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin

=> 27 байтов "hello.com" ;)
Moгу еще подкинуть кейген BURN.COM, размером в 136 байтов (чуть ли не половина - реализация генератора псевдо-случайных чисел), для уже-неведомо-чего ну и прочего добра (та же реализация RC4 в 293 байта)

DOS-EXE "Hello World" будет чуть побольше - 59 байтов (для сборки современным FASM можно использовать вооот этот хелловрд https://board.flatassembler.net/topic.php?t=1736)

> Смысл действа в рационализации того, что происходит. Выше я отметил про современный жирнософт, на 95 % наполненный цифровым мусором.

Как будто от возмущения (тем более на опеннете) хоть что-то изменится. Разве что бананом (возможно, уже разок съеденным) кинуть могут.


Ответить | Правка | Наверх | Cообщить модератору

164. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Ordu (ok), 12-Ноя-19, 23:56 
>[оверквотинг удален]
> Begin:
>    mov ah,9
>    mov dx,offset Message
>    int 21h
>    mov ah,1
>    int 21h  
>    int 20h
> Message db 'Hello, world!$'
> CSEG ends
> end Begin

Тут как минимум пять байт лишние. Второй вызов int 21h не нужен -- он туда вставлен в силу дурацкой манеры вендовсюзеров завершать досовские программы, которая возникла из-за того способа, которые вендо-IDE запускают досовские программы. ппц выбешивает, когда утилита отработав, подвисает ожидая ввода.

И вместо int 20h можно сделать ret. Это работает с com'ами, и экономит ещё один байт.

И в ответ на это:
> Примеры в студию, чо. :)

Я докину примерчик под линь: http://timelessname.com/elfbin/
142 байта и по словам автора есть возможности для дальнейшего уменьшения размера.

Ответить | Правка | Наверх | Cообщить модератору

184. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Аноним (122), 16-Ноя-19, 17:51 
Нужно с opt-level=3 собирать чтобы работыл dead code elimination
Ответить | Правка | К родителю #134 | Наверх | Cообщить модератору

133. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Аноним (87), 12-Ноя-19, 11:56 
Дикий зоопарк совершенно, который при запуске сборки начинает качаться с репозиториев на жидхабе неконтролируемым образом. Для сборки сабжа нужно скачать 138 (!) пакетов с библиотеками, все из которых для включения в Gentoo нужно оформить в виде ебилдов. Это уже привязка к облаку какая-то пошла, в оффлайне build-система раста растеряется и ничего не сможет сделать.

Статическая линковка помогает только в случае распространения бинария от разработчика к пользователю. В большинстве дистрибутивов unix-подобных ОС принята другая модель, в которой от разработчика берутся только исходники и далее подготавливаются мэйнтейнерами для автономной сборки на build-фермах. Сабж довольно сложно деплоить таким образом.

Ответить | Правка | К родителю #126 | Наверх | Cообщить модератору

137. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Аноним (-), 12-Ноя-19, 15:37 
Слыхал поговорку: "Linux писан сишными прогоаммистами, и для сишных программистов Linux".
UNIX - BSD - Linux - это множество кусков сишного кода. При всём уважении к языку Rust, но всё же этот язык является чужеродным элементом в Unix-подобных системах.
Ответить | Правка | Наверх | Cообщить модератору

154. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Аноним (87), 12-Ноя-19, 21:05 
Проблема не в языке, а в том, что используемая сабжем build-система, cargo, включает в себя средство установки компонентов из удалённого репозитория, что в UNIX-подобных ОС является прерогативой исключительно пакетного менеджера. В экосистеме UNIX отлично живут программы на любых языках, где build-системе достаточно скормить каталог с исходниками и она его автономно и предсказуемо соберёт, но ситуация, когда эта build-система при сборке внезапно (в man cargo-build нигде не сказано о возможной сетевой активности, а также нет опции для её отключения) начинает самостоятельно ломиться во внешний мир и что-то непонятное из него тащить, абсолютно недопустима.
Ответить | Правка | Наверх | Cообщить модератору

182. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от пох. (?), 15-Ноя-19, 07:29 
> Проблема не в языке, а в том, что используемая сабжем build-система, cargo,
> включает в себя средство установки компонентов из удалённого репозитория, что в
> UNIX-подобных ОС является прерогативой исключительно пакетного менеджера. В экосистеме

как будто в неюниксоподобных это не так (разумеется, там тоже можно нагадить в %USER%/ApplicationData точно так же, как все новые модные язычки в новом-стандарте гадят вам в $HOME - и, разумеется, это тоже признак макаки, если только пользователь специально не сообщил о своем нежелании пользоваться защитными механизмами системы и делиться с другими пользователями своим прекрасным софтом.)

> UNIX отлично живут программы на любых языках, где build-системе достаточно скормить
> каталог с исходниками и она его автономно и предсказуемо соберёт, но

вообще-то уже давно - нет, если программа сложнее х-ловрот. :-( Новые-модные девелоперы-обезьянки разучились autoconf. Вермишель из pkg-config, модных систем сборок на нескучных язычках с зависимостями всего от всего, и каких нибудь авторских соплей сверху фэйлится на любом чуть отличающемся от совсем дубового раскладе. При том что в остальных случаях вместо всего этого мегатрэша хватило бы -I/usr/local/include -L/usr/local/lib почти всегда и на весь миллион нескучных библиотечек. То что не в local - и так гвоздем прибито к компилятору. (до сих пор удивляет что в *bsd не могут добавить туда и local, и навсегда избавиться от ненужных поисков ненужных pkg-config'ов и прочего хлама - в 99.99% случаев не возвращающего ничего кроме этого самого local/{include,lib}, а в уникальном где оно так не работает - требующего ручного патча, потому что все равно не работает)

> ситуация, когда эта build-система при сборке внезапно (в man cargo-build нигде
> не сказано о возможной сетевой активности, а также нет опции для

афтыри раньше программировали на nodejs, им и в голову не приходит, что можно было как-то иначе.

> её отключения) начинает самостоятельно ломиться во внешний мир и что-то непонятное

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

Даешь каждому тазу где надо что-то разово пересобрать - полный доступ в интернет!

Ответить | Правка | Наверх | Cообщить модератору

183. "Первый официальный выпуск rav1e, кодировщика AV1 на языке Ru..."  +/
Сообщение от Аноним (87), 15-Ноя-19, 18:54 
> как будто в неюниксоподобных это не так

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

> Вермишель из pkg-config, модных систем сборок на нескучных язычках с зависимостями всего от всего, и каких нибудь авторских соплей сверху фэйлится на любом чуть отличающемся от совсем дубового раскладе.

Как же тогда софт собирается в nixos и guixsd, где /usr и /lib вообще отсутствуют?

> афтыри раньше программировали на nodejs

Похоже на то: js-макакам вообще никакие правила не писаны.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру