The OpenNET Project / Index page

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



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

Оглавление

Выпуск языка программирования Rust 1.33, opennews (ok), 02-Мрт-19, (0) [смотреть все]

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


27. "Выпуск языка программирования Rust 1.33"  +/
Сообщение от Аноним (-), 02-Мрт-19, 16:02 
> при этом обходясь без использования сборщика мусора и runtime

Прекратите уже повторять этот бред из новости в новость. Rust использует рантайм LLVM, причем, например, паники там реализованы с использованием механизма исключений C++.

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

47. "Выпуск языка программирования Rust 1.33"  –2 +/
Сообщение от proninyaroslavemail (ok), 02-Мрт-19, 17:43 
Т.е реализовать zero runtime как в си нельзя?
Ответить | Правка | Наверх | Cообщить модератору

61. "Выпуск языка программирования Rust 1.33"  +/
Сообщение от Аноним (61), 02-Мрт-19, 22:17 
Можно. Есть режим 'без стандартной библиотеки'.
Ответить | Правка | Наверх | Cообщить модератору

66. "Выпуск языка программирования Rust 1.33"  +2 +/
Сообщение от Аноним84701 (ok), 02-Мрт-19, 22:52 
> Т.е реализовать zero runtime как в си нельзя?

Если на нем реализовали вполне работающую на реальном железе (пусть и игрушечную) ОСь и загрузчик:
https://www.redox-os.org/
https://github.com/rust-osdev/bootloader
> An experimental x86 bootloader written in Rust and inline assembly.

то наверное таки реализовать можно.

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

86. "Выпуск языка программирования Rust 1.33"  –4 +/
Сообщение от Аноним (41), 03-Мрт-19, 05:57 
>> Т.е реализовать zero runtime как в си нельзя?
> Если на нем реализовали вполне работающую на реальном железе (пусть и игрушечную)
> ОСь и загрузчик:
> https://www.redox-os.org/
> https://github.com/rust-osdev/bootloader
>> An experimental x86 bootloader written in Rust and inline assembly.
> то наверное таки реализовать можно.

Даже сорцы смотреть нет смысла, достаточно описания коммита:
"Use only `si` instead of `esi` for println in real mode (#47)"

SI это имя регистра, то есть загрузчик написан на языке ассемблера.

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

90. "Выпуск языка программирования Rust 1.33"  +2 +/
Сообщение от анонн (?), 03-Мрт-19, 06:25 
> Даже сорцы смотреть нет смысла, достаточно описания коммита:
> "Use only `si` instead of `esi` for println in real mode (#47)"
> SI это имя регистра, то есть загрузчик написан на языке ассемблера.
> загрузчик
> на языке ассемблера.

Ну-ка, ну-ка. Код для MBR на плюсах, с инициализацией регистров, с точным контролем адресов инструкций и данных - в студию! Так и быть, читать с носителя за отсутствием рантайма, разрешаю через либастрал.

"А потов-то, а понтов!" (с)

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

93. "Выпуск языка программирования Rust 1.33"  –3 +/
Сообщение от Аноним (41), 03-Мрт-19, 06:51 
>> Даже сорцы смотреть нет смысла, достаточно описания коммита:
>> "Use only `si` instead of `esi` for println in real mode (#47)"
>> SI это имя регистра, то есть загрузчик написан на языке ассемблера.
>> загрузчик
>> на языке ассемблера.
> Ну-ка, ну-ка. Код для MBR на плюсах, с инициализацией регистров

Может заодно и работу твою за тебя скампелировать?

asm - ключевое слово языка. ,-)

> с точным
> контролем адресов инструкций и данных - в студию!

А вот это даже на асме зачастую лишнее.

> Так и быть,
> читать с носителя за отсутствием рантайма, разрешаю через либастрал.
> "А потов-то, а понтов!" (с)

Да, я бы на твоём месте вёл себя поскромнее.

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

110. "Выпуск языка программирования Rust 1.33"  +/
Сообщение от анонн (?), 03-Мрт-19, 13:36 
>> Ну-ка, ну-ка. Код для MBR на плюсах, с инициализацией регистров
> Может заодно и работу твою за тебя скампелировать?

О, мы опять имеем счастье и честь лицезреть великих гуру опеннета!

>> SI это имя регистра, то есть загрузчик написан на языке ассемблера.
> asm - ключевое слово языка. ,-)

А, ну если так, то это конечно уже не язык ассемблера. И регистры там не регистры.

>> с точным контролем адресов инструкций и данных - в студию!
> А вот это даже на асме зачастую лишнее.

Ну раз гуру опеннета так говорит … в общем, "show me the code" или балабол.

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

133. "Выпуск языка программирования Rust 1.33"  –1 +/
Сообщение от Аноним (41), 04-Мрт-19, 09:08 
Ну, код ты в доказательство своей гипотезы не показал, так что... ;-)

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

111. "Выпуск языка программирования Rust 1.33"  +1 +/
Сообщение от Аноним84701 (ok), 03-Мрт-19, 13:39 
> Даже сорцы смотреть нет смысла, достаточно описания коммита:
> "Use only `si` instead of `esi` for println in real mode (#47)"
> SI это имя регистра, то есть загрузчик написан на языке ассемблера.

О, сколько нам открытий чудных!
Вы только не расстраивайтесь:
http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/boo...

/* Print message string */
#define MSG(x)    movw $x, %si; call LOCAL(message)
#define ERR(x)    movw $x, %si; jmp LOCAL(error_message)

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

116. "Выпуск языка программирования Rust 1.33"  –1 +/
Сообщение от Аноним (41), 03-Мрт-19, 14:44 
>> Даже сорцы смотреть нет смысла, достаточно описания коммита:
>> "Use only `si` instead of `esi` for println in real mode (#47)"
>> SI это имя регистра, то есть загрузчик написан на языке ассемблера.
> О, сколько нам открытий чудных!
> Вы только не расстраивайтесь:
> http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/boo...
>
/* Print message string */ 
> #define MSG(x) movw $x, %si; call LOCAL(message)
> #define ERR(x) movw $x, %si; jmp LOCAL(error_message)
>

А разве кто-то утверждал, что это тоже на Rust?

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

120. "Выпуск языка программирования Rust 1.33"  +1 +/
Сообщение от Аноним84701 (ok), 03-Мрт-19, 15:17 
> А разве кто-то утверждал, что это тоже на Rust?

А кто утверждал-то, что оно полностью на Rust? Какое именно слово в процитированом  "in Rust and inline assembly" вам не понятно? Не томите, расскажите!
Было логичное предположение, что те, кого возможность реализации "zero runtime" интересует не только сугубо теоретически, более-менее в курсе, что классический загрузчик для x86 без частей на асме пишется весьма фигово (от слова никак). Ну или хотя бы перед ответом прочтут написаное. Видимо я ошибся, увы мне :(

Или это обычное "когда нечего возразить, но очень подгор^W хочется — прискипайся к формулировке"?

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

124. "Выпуск языка программирования Rust 1.33"  –1 +/
Сообщение от Аноним (41), 03-Мрт-19, 17:28 
>> А разве кто-то утверждал, что это тоже на Rust?
> А кто утверждал-то, что оно полностью на Rust?

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

> Какое именно слово в
> процитированом  "in Rust and inline assembly" вам не понятно?

Там не инлайн, если уж заниматься буквоедством, а вполне файлы *.s

> Не томите, расскажите!
> Было логичное предположение, что те, кого возможность реализации "zero runtime" интересует
> не только сугубо теоретически, более-менее в курсе, что классический загрузчик для
> x86 без частей на асме пишется весьма фигово (от слова никак).

Вот пример вполне практического "zero-runtime" на С++ https://github.com/icestudent/ontl/tree/master/ntl/rtl

К бутлоадерам отношения не имеет.

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

Теперь возвращаемся к исходной посылке "рантайм LLVM, причем, например, паники там реализованы с использованием механизма исключений C++".

Так вот мне, что бы считать "реализовать можно" без "наверное таки", желательно увидеть подобную реализацию, иначе может оказаться, что .s файлов по объёму там достаточно для имплементации незаурядной Forth-машины (и она будет считаться zero-runtime :))

*) frestanding implementation допускает отсутствие исключений, в таком случае имеем свободное от ассемблера "zero-runtime".


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

126. "Выпуск языка программирования Rust 1.33"  +1 +/
Сообщение от Аноним84701 (ok), 03-Мрт-19, 18:33 
>>> А разве кто-то утверждал, что это тоже на Rust?
>> А кто утверждал-то, что оно полностью на Rust?
> В #110 анон утверждает, требуя от меня аналогичный код на плюсах для
> опровержения его гипотезы. :)

Э-э, это конечно же, очень-очень интересно … но причем тут именно эта вот ветка?


> Там не инлайн, если уж заниматься буквоедством, а вполне файлы *.s

Если заниматься буквоедством, то в GRUB точно то же кино с файлами. При этом MS VC++ инлайном ни в армщину, ни в 64 бита не умеет, да и вообще по стандарту:
> The asm declaration is conditionally-supported; its meaning is implementation-defined.

.
> Вот пример вполне практического "zero-runtime" на С++ https://github.com/icestudent/ontl/tree/master/ntl/rtl
> К бутлоадерам отношения не имеет.
> Асм там может потребоваться* - обратите, пожалуйста, на этот момент внимание -
> потому что тамошний компилятор для поддержки исключений генерирует определённые структуры,
> для работы с которыми интринсиков недостаточно.

А, это такое замысловатое "да, но пока еще нет, но почти что да, только пока нет"? :)
Кстати, если уж буквоедствовать, то интринсики (которые вроде как и в ржавчине не один год имеются) у нас в каком стандарте-то прописаны?

> Теперь возвращаемся к исходной посылке "рантайм LLVM, причем, например, паники там реализованы
> с использованием механизма исключений C++".
> Так вот мне, что бы считать "реализовать можно" без "наверное таки", желательно
> увидеть подобную реализацию

https://os.phil-opp.com/freestanding-rust-binary/
https://github.com/phil-opp/blog_os/blob/post-01/src/main.rs

Бинарник в пару KB (на самом деле, заполнен нулями чуть менее чем полностью), без зависимостей, нормально собирается и исправно запускается, демонстрируя JMP@here в gdb.

cargo rustc -- -Clink-arg=-nostartfiles
Тот же cargo rustc -- -Clink-arg=-nostartfiles --emit asm
дает выхлоп:


        .text
        .file   "blog_os.6pwfxw6d-cgu.0"
        .section        .text._start,"ax",@progbits
        .globl  _start
        .p2align        4, 0x90
        .type   _start,@function
_start:
        pushq   %rbp
        movq    %rsp, %rbp
        .p2align        4, 0x90
.LBB0_1:
        jmp     .LBB0_1
.Lfunc_end0:
        .size   _start, .Lfunc_end0-_start

        .section        .text.rust_begin_unwind,"ax",@progbits
        .hidden rust_begin_unwind
        .globl  rust_begin_unwind
        .p2align        4, 0x90
        .type   rust_begin_unwind,@function
rust_begin_unwind:
        pushq   %rbp
        movq    %rsp, %rbp
        .p2align        4, 0x90
.LBB1_1:
        jmp     .LBB1_1
.Lfunc_end1:
        .size   rust_begin_unwind, .Lfunc_end1-rust_begin_unwind
        .section        ".note.GNU-stack","",@progbits


очень смахивет на q.e.d.
Ответить | Правка | Наверх | Cообщить модератору

132. "Выпуск языка программирования Rust 1.33"  –1 +/
Сообщение от Аноним (41), 04-Мрт-19, 08:57 
>>>> А разве кто-то утверждал, что это тоже на Rust?
>>> А кто утверждал-то, что оно полностью на Rust?
>> В #110 анон утверждает, требуя от меня аналогичный код на плюсах для
>> Там не инлайн, если уж заниматься буквоедством, а вполне файлы *.s
> Если заниматься буквоедством, то в GRUB точно то же кино с файлами.

Э-э, это конечно же, очень-очень интересно … но
причем тут GRUB? :)

> При этом MS VC++ инлайном ни в армщину, ни в 64
> бита не умеет, да и вообще по стандарту:
>> The asm declaration is conditionally-supported; its meaning is implementation-defined.

Повторюсь (было в сноске), поддержка исключений по стандарту не обязательна. Без них остаётся чистый С++. (впрочем, поддержку исключений GCC можно в упомянутую реализацию добавить).

>> Вот пример вполне практического "zero-runtime" на С++ https://github.com/icestudent/ontl/tree/master/ntl/rtl
> > К бутлоадерам отношения не имеет.
>> Асм там может потребоваться* - обратите, пожалуйста, на этот момент внимание -
>> потому что тамошний компилятор для поддержки исключений генерирует определённые структуры,
>> для работы с которыми интринсиков недостаточно.
> А, это такое замысловатое "да, но пока еще нет, но почти что
> да, только пока нет"? :)

Это такое прямое и вполне прикладное применение "на С++ можно писать драйвера (даже несмотря на заявления производителя тамошней ОС об обратном)".

На Rust можно? Есть примеры? Бутлоадеры и студенческие ОС это очень интересно, но немножко ближе к теории, чем к практике.

> Кстати, если уж буквоедствовать, то интринсики (которые вроде как и в ржавчине
> не один год имеются) у нас в каком стандарте-то прописаны?

Так нет их в исходниках (вместо них авторам пришлось использовать асм - в опциональной части).

>> Теперь возвращаемся к исходной посылке "рантайм LLVM, причем, например, паники там реализованы
>> с использованием механизма исключений C++".
>> Так вот мне, что бы считать "реализовать можно" без "наверное таки", желательно
>> увидеть подобную реализацию
> https://os.phil-opp.com/freestanding-rust-binary/
> https://github.com/phil-opp/blog_os/blob/post-01/src/main.rs
> Бинарник в пару KB (на самом деле, заполнен нулями чуть менее чем
> полностью), без зависимостей, нормально собирается и исправно запускается, демонстрируя
> JMP@here в gdb.

Спасибо. Вот только бинарник ничего не делает.

>[оверквотинг удален]
>         movq    
> %rsp, %rbp
>         .p2align    
>     4, 0x90
> .LBB0_1:
>         jmp    
>  .LBB0_1
> .Lfunc_end0:
>         .size   _start,
> .Lfunc_end0-_start

Вот тут обозначен диапазон адресов, где может быть сгенерировано исключение?
Что делать с этим в _произвольном_ месте в ядре? Вот в чём вопрос.

>[оверквотинг удален]
> .LBB1_1:
>         jmp    
>  .LBB1_1
> .Lfunc_end1:
>         .size   rust_begin_unwind,
> .Lfunc_end1-rust_begin_unwind
>         .section    
>     ".note.GNU-stack","",@progbits
>
> очень смахивет на q.e.d.

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

138. "Выпуск языка программирования Rust 1.33"  +/
Сообщение от Аноним84701 (ok), 04-Мрт-19, 13:06 
>> JMP@here в gdb.
> Спасибо. Вот только бинарник ничего не делает.

Вам, анонимам, не угодишь – то вам "файлов по объёму там достаточно для имплементации незаурядной Forth-машины", то компактная демонстрация, реализуемая штатными методами без UD и прочих хаков – наоборот, ничего не делает.

> Вот тут обозначен диапазон адресов, где может быть сгенерировано исключение?
> Что делать с этим в _произвольном_ месте в ядре? Вот в чём вопрос.

Неужели так сложно было пройти по ссылке на код в пару строк?
Это реализация обработчика паник, о котором изначально и шла речь в #27 "паники там реализованы с использованием механизма исключений C++."


// This function is called on panic.
#[panic_handler]
fn panic(_info: &PanicInfo) -> ! {
    loop {}
}

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

143. "Выпуск языка программирования Rust 1.33"  +/
Сообщение от Аноним (143), 05-Мрт-19, 06:52 
> Вам, анонимам, не угодишь –
> то вам "файлов по объёму там достаточно для имплементации незаурядной Forth-машины",
> то компактная демонстрация, реализуемая штатными методами
> без UD и прочих хаков – наоборот, ничего не делает.

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

>> Что делать с этим в _произвольном_ месте в ядре? Вот в чём вопрос.
> Неужели так сложно было пройти по ссылке на код в пару строк?
> Это реализация обработчика паник, о котором изначально и шла речь в #27
> "паники там реализованы с использованием механизма исключений C++."

Это не ответ не вопрос.

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

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

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




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

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