The OpenNET Project / Index page

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



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

Оглавление

Выпуск языка программирования Rust 1.45, opennews (??), 20-Июл-20, (0) [смотреть все]

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


161. "Выпуск языка программирования Rust 1.45"  –3 +/
Сообщение от Аноним (138), 20-Июл-20, 17:12 
Что же такого небезопасного в массиве известного размера ? Или хваленый хруст не может обеспечить безопасности столь тривиального случая ?
Ответить | Правка | Наверх | Cообщить модератору

166. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним84701 (ok), 20-Июл-20, 17:27 
> Что же такого небезопасного в массиве известного размера ? Или хваленый хруст
> не может обеспечить безопасности столь тривиального случая ?


const VGA_MEMORY: *mut u16 = 0xb8000 as *mut u16;
...
*(VGA_MEMORY.offset(self.cursor as isize)) = cell.into();

И правда -- что же такого небезопасного может быть в записи по фиксированному адресу "именно тут, а не например в 0xA0000 или 0xb0000, точно-точно память видяхи и туда точно-точно влезет запись, мамой клянусь!"?
Хм, а попробуйте-ка подставить 0x7C00 и расскажите нам еще немного о "безопасности" и "тривиальности" 🙄
Ответить | Правка | Наверх | Cообщить модератору

196. "Выпуск языка программирования Rust 1.45"  –2 +/
Сообщение от Аноним (196), 20-Июл-20, 22:29 
Все таки хотелось бы услышать начальника транспортного цеха.

Так все пресвятой руст и должен помочь с тем чтобы программы не лезли с своими байтами куда не надо. Или нет ?

Еще раз чем видеопамять отличается от любого другого массива байтов? Только тем что находится по адресу b800 ?

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

202. "Выпуск языка программирования Rust 1.45"  +2 +/
Сообщение от Аноним84701 (ok), 21-Июл-20, 00:20 
> Все таки хотелось бы услышать начальника транспортного цеха.
> Так все пресвятой руст и должен помочь с тем чтобы программы не лезли с своими байтами куда не надо. Или нет ?

Ознакомся с матчастью и прекрати уже эту глупую истерику^W полемику с ложным выбором.
Смысл unsafe - изоляция опасных кусков кода, где компилятор в силу отсутствия либастрала не может сделать полноценный статический анализ и дать те же гарантии, что и для safe кусков кода.

> Еще раз чем видеопамять отличается от любого другого массива байтов? Только тем что находится по адресу b800 ?

Ознакомся с матчастью, книжку там почитай или еще что. Узнай например, что адрес зависит от видео-режима
http://www.ctyme.com/intr/rb-0069.htm#Table10
Расскажи подробнее, с какой именно версией либастрала анализатор во время компиляции cможет угадать video mode (и успешное завершение инициализации) и что именно туда и именно столько байтов можно записать?

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

272. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним (138), 21-Июл-20, 13:26 
В данном случай режим явно и недвусмысленно цветной 80x25 (2 байта на символ) т.е. видеопамять является массивом из 4000 байт (или из 2000 пар байт+атрибут для эстетов).

Получается в пресвятом хрусте нет возможности средствами языка справиться со столь простой ситуацией ?

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

277. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Ordu (ok), 21-Июл-20, 14:01 
> Получается в пресвятом хрусте нет возможности средствами языка справиться со столь простой ситуацией ?

Почему же? Там выше написано как средствами языка можно справится с такой ситуацией. Или ты о том, что тупой-тупой rust не может понять, что 0xb800 это адрес видеобуфера текстового режима, и туда можно писать всегда, и что это не приведёт ни к каким косякам? Ты считаешь, что в rust надо было включить базу данных всего железа, и чудесные возможности понимать за программиста всё, знание всех архитектур, всех портов ввода-вывода, всех особых областей адресного пространства, которые мапятся на что-нибудь неочевидное -- типа файлов регистров, видеопамяти, и тп? То есть ты тут пытаешься глумитсья над тем, что rust не умеет писать программы за программиста?

Это задача программиста описать архитектуру и объяснить компилятору rust'а, какие операции безопасны. И если запись в 0xb800 безопасна, в том числе и конкуретная, то вполне можно сделать объект содержащий в себе 0xb800, который будет позволять владение собой многим потокам параллельно, и позволять писать в эту память параллельно многим потокам. Но если ты будешь это делать, то это будет твоё решение, а не решение компилятора. Компилятор не будет думать за тебя.

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

282. "Выпуск языка программирования Rust 1.45"  +1 +/
Сообщение от Аноним84701 (ok), 21-Июл-20, 14:59 
> В данном случай режим явно и недвусмысленно цветной 80x25 (2 байта на
> символ) т.е. видеопамять является массивом из 4000 байт (или из 2000 пар байт+атрибут для эстетов).

В данном случае режим явно и недвусмысленно указывается и инициализируется где-где?
Или опять гарантии исключительно вида "аноним зуб дает" (чужой) и "аноним точно-точно знает!"?

>  т.е. видеопамять является массивом из 4000 байт

Вообще-то, для вашего "явно и недвусмысленно цветного" режима -- в 8 раз (и еще чуть-чуть) больше. 32KB.
Такой вот "тривиальнейший случай" 🙄

> Получается в пресвятом хрусте нет возможности средствами языка справиться со столь простой  ситуацией ?

Успокойтесь, судя по шедевральным
> чем видеопамять отличается от любого другого массива байтов
> тривиального случая
> простой  ситуацией

анонимам это все знакомо ислючительно в теоретических размышлизмах и на практике никогда не понадобится 🙄

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

298. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Совершенно другой аноним (?), 21-Июл-20, 16:12 
>> В данном случай режим явно и недвусмысленно цветной 80x25 (2 байта на
>> символ) т.е. видеопамять является массивом из 4000 байт (или из 2000 пар байт+атрибут для эстетов).
> В данном случае режим явно и недвусмысленно указывается и инициализируется где-где?
> Или опять гарантии исключительно вида "аноним зуб дает" (чужой) и "аноним точно-точно
> знает!"?
>>  т.е. видеопамять является массивом из 4000 байт
> Вообще-то, для вашего "явно и недвусмысленно цветного" режима -- в 8 раз
> (и еще чуть-чуть) больше. 32KB.
> Такой вот "тривиальнейший случай" 🙄

Вы немного ошиблись, имхо, уважаемый аноним имел в виду текстовый экран 80x25 (на это, имхо, намекает базовый адрес 0xb800) под который действительно требуется 4К - один байт под изображение символа, а второй, если не путаю, под атрибуты - цвет символа, фона, разные там мерцания.

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

327. "Выпуск языка программирования Rust 1.45"  +1 +/
Сообщение от Аноним84701 (ok), 21-Июл-20, 19:45 
> Вы немного ошиблись, имхо, уважаемый аноним имел в виду текстовый экран 80x25
> (на это, имхо, намекает базовый адрес 0xb800) под который действительно требуется
> 4К - один байт под изображение символа, а второй, если не
> путаю, под атрибуты - цвет символа, фона, разные там мерцания.

*вздыхая -- я ведь не зря ссылочку с табличкой запостил*
"стандартный-привычный" видеорежим 80x25 предоставляет 8 страниц.
8 * 4096 = 32КБ.
и вполне можно выводить текст на экран, записывая по адресу 0xbf000+


BASE equ 0x7c00

org BASE
use16

jmp 0:start
start:
cli         
cld         
xor ax,ax
mov ds,ax
sti

;set video mode=80x25, 16 colors, page 7
mov ax,3  
int 10h
mov ax, 507h   ;7 page
int 10h

mov ah, 0x02   ;black / green
mov si, message
push 0xb800
pop es
mov di, 4096 * 7 ; write bytes to 0xb800*16 + 4096 * 7 = 0xbf000

.print:
  lodsb
  stosw
  test al,al
  jnz .print
@@:
hlt
jmp @b

message db "Some 1337-73><7",0
      
db BASE+510-$ dup(0)
signature:
dw 0aa55h

; uncomment to create a bootable floppy image
; db $$+1440*1024-$ dup(0)

собирается простым "fasm boot.asm", загружается тем же "qemu-system-i386 boot.bin"
Любители виртуальных ящиков могут раскомментировать последнюю строку -- сгенерируется "валидный" флоппи-образ  (для VBox должно быть достаточно переименовать в *.img).

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

340. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним84701 (ok), 22-Июл-20, 00:22 
 
> push 0xb800
> pop es

А инициализацию стека (SS/SP) то я из примера и вырезал :-/
Хотя для qemu и ящика "и так сойдет" .

Более корректная версия, с более явной адресацией 0xbf000


BASE equ 0x7c00

org BASE
use16

jmp 0:start

start:
cli         
cld         
xor ax,ax
mov ds,ax
sti

;set video mode=80x25, 16 colors, page 7
mov ax,3  
int 10h
mov ax, 507h   ;7 page
int 10h

mov ax, 0xbf00
mov es, ax
mov ah, 0x02   ;green on black

mov si, message
xor di,di
mov cx, msg_len
.print:
  lodsb
  stosw
  loop .print
@@:
hlt
jmp @b

message db "Some 1337-73><7"
msg_len = $-message      

db BASE+510-$ dup(0)
signature:
dw 0aa55h

; uncomment to create a bootable floppy image
; db $$+1440*1024-$ dup(0)


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

351. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Совершенно другой аноним (?), 22-Июл-20, 14:00 
Сорри, прочитал не внимательно. Как-то привык, что все используют первую страничку, тем-более, что из защищённого режима (для которого можно писать на Rust-е) дёргать прерывания BIOS-а не очень простая затея, насколько я помню. Кстати, в Rust-е есть поддержка генерации под 16-битный реальный режим? Насколько я знаю, в компиляторах C она осталась только в древних компиляторах, 80-тых - 90-тых годов, в современных, где вообще не никогда поддерживалась, а где и просто выкинули.
Ответить | Правка | Наверх | Cообщить модератору

275. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Ordu (ok), 21-Июл-20, 13:56 
Знаешь, твоё непонимание небезопасности этого массива говорит не столько о том, что раст какой-то не такой, сколько о том, что из тебя совершенно никакой системный программист.

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

Как это делать? Надо настроить регистры VGA на копирование, может быть нужные операции над битами вставить, и после этого ты запускаешь цикл где копируешь строками. На уровне асма это сводится к чему-то типа movsb, где, например, каждый копируемый бит соответствует одному пикселю на экране. Тут очень важно, чтобы за чтением байта из видеопамяти следовала бы его запись туда. Если между этим чтением и записью байта вмешается, скажем, ещё какое-то чтение из другого места, то будет записано 8 левых пикселей.

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

Чтобы такого не случалось, люди выкручиваются как могут. В DOS'е было довольно просто с этим, были простые правила:
1. не выводить ничего из обработчиков прерываний
2. однопоточная программа, никакой многозадачности, лучше в том числе и кооперативной.

Но если мы прикинем вариант, что с VGA карточкой работает современная операционная система, то тут встаёт куча проблем с синхронизацией. Например надо X11 одеть поверх видеокарты, чтобы приложения бы общались с X11, заказывая выполнение операций, а X11 бы уже упорядочивал бы их и выполнял бы "атомарно".

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

В ядре делается именно то, к чему тебя будет подталкивать rust, разница лишь в том, что в ядре тебя к правильному стилю будут подталкивать ревьюеры кода, здесь же всё начнётся раньше: тебя будет к этому подталкивать rustc.

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

317. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним (77), 21-Июл-20, 18:22 
>Еще раз чем видеопамять отличается от любого другого массива байтов? Только тем что находится по адресу b800 ?

Ты что, не байтолюб, анонимус? Видеопамять от буфера отличить не можешь? ТУРИСТ!

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

186. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним (3), 20-Июл-20, 21:29 
> Что же такого небезопасного в массиве известного размера ? Или хваленый хруст
> не может обеспечить безопасности столь тривиального случая ?

Ну так массив-то с аппаратурой связан, может там не находится да и вообще. Раст наоборот предупреждает, что тут может быть unsafe

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

197. "Выпуск языка программирования Rust 1.45"  –4 +/
Сообщение от Аноним (196), 20-Июл-20, 22:31 
Так и написал бы что не знаешь.
Ответить | Правка | Наверх | Cообщить модератору

247. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним (247), 21-Июл-20, 10:58 
"хваленый хруст" не может гарантировать безопасность доступа к памяти по произвольному адресу. И совсем несложно понять почему
Ответить | Правка | К родителю #161 | Наверх | Cообщить модератору

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

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




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

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