The OpenNET Project / Index page

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



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

Оглавление

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

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


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ообщить модератору

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

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




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

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