Size: a a a

Rust — русскоговорящее сообществo

2020 March 31

C

Cyberdine Engineering🐤 in Rust — русскоговорящее сообществo
capgelka
Видимо мой кейс слишком извращенный, что возникло недопонимание.

Openssh сервер на винде + rust приложение на винде. И заказчик будет откуда-то, вероятно с линукса, может с путти конектиться к серваку по openssh и запускать (я сам не знаю зачем такое).

Но вопрос более не актуален (разве что как праздный), удалось прийти к тому чтобы использовать VNC вместо openssh. Всем спасибо за советы!
Можно еще novcn
источник

C

Cyberdine Engineering🐤 in Rust — русскоговорящее сообществo
И клиенту ниче устанавливать не придется
источник

V

Vladimir in Rust — русскоговорящее сообществo
capgelka
Видимо мой кейс слишком извращенный, что возникло недопонимание.

Openssh сервер на винде + rust приложение на винде. И заказчик будет откуда-то, вероятно с линукса, может с путти конектиться к серваку по openssh и запускать (я сам не знаю зачем такое).

Но вопрос более не актуален (разве что как праздный), удалось прийти к тому чтобы использовать VNC вместо openssh. Всем спасибо за советы!
Теперь понятен хоть твой кейс. Но в таком сценарии нужно просто сконфигурить openssh правильно, чтоб резал ничего по дороге. Баш по идее вообще не нужен, можно запускать сразу твое приложение. Если что-то не работает то да, это уже не типично и нужно локализировать и понять где проблема сначала.
источник

AM

Artem Molotov in Rust — русскоговорящее сообществo
capgelka
Видимо мой кейс слишком извращенный, что возникло недопонимание.

Openssh сервер на винде + rust приложение на винде. И заказчик будет откуда-то, вероятно с линукса, может с путти конектиться к серваку по openssh и запускать (я сам не знаю зачем такое).

Но вопрос более не актуален (разве что как праздный), удалось прийти к тому чтобы использовать VNC вместо openssh. Всем спасибо за советы!
или только ssh и xming на винде (кажется)
источник

AL

Andrey @ozkriff Lesnikov in Rust — русскоговорящее сообществo
источник

АМ

Александр Маглеванный in Rust — русскоговорящее сообществo
Подскажите альтернативу lazy_static, но с асинхронной инициализацией. Я точно знаю, что штука создастся один раз в рантайме и больше не будет изменяться. В голову только всякие RwLock'и лезут.
источник

В

Вафель in Rust — русскоговорящее сообществo
Александр Маглеванный
Подскажите альтернативу lazy_static, но с асинхронной инициализацией. Я точно знаю, что штука создастся один раз в рантайме и больше не будет изменяться. В голову только всякие RwLock'и лезут.
Я в какой-то момент пилил, но так и не закончил 😔
источник

AL

Andrey @ozkriff Lesnikov in Rust — русскоговорящее сообществo
once_cell, вроде, должен подойти?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Александр Маглеванный
Подскажите альтернативу lazy_static, но с асинхронной инициализацией. Я точно знаю, что штука создастся один раз в рантайме и больше не будет изменяться. В голову только всякие RwLock'и лезут.
static mut GLOBAL: option<&'static T> = None;

match GLOBAL {
 Some(t) => t,
 None => {
   let a = Box::leak(Box::new(T::default()));
   unsafe { GLOBAL = Some(a) }
 }
}
источник

АМ

Александр Маглеванный in Rust — русскоговорящее сообществo
Andrey @ozkriff Lesnikov
once_cell, вроде, должен подойти?
Похоже, что подойдет, попробую
источник

АМ

Александр Маглеванный in Rust — русскоговорящее сообществo
Эрик
static mut GLOBAL: option<&'static T> = None;

match GLOBAL {
 Some(t) => t,
 None => {
   let a = Box::leak(Box::new(T::default()));
   unsafe { GLOBAL = Some(a) }
 }
}
Тоже учту такой вариант
источник

АМ

Александр Маглеванный in Rust — русскоговорящее сообществo
Спасибо большое :)
источник

D

Denis in Rust — русскоговорящее сообществo
Эрик
static mut GLOBAL: option<&'static T> = None;

match GLOBAL {
 Some(t) => t,
 None => {
   let a = Box::leak(Box::new(T::default()));
   unsafe { GLOBAL = Some(a) }
 }
}
воу-воу
источник

D

Denis in Rust — русскоговорящее сообществo
а где синхронизация?
источник

D

Denis in Rust — русскоговорящее сообществo
Александр Маглеванный
Подскажите альтернативу lazy_static, но с асинхронной инициализацией. Я точно знаю, что штука создастся один раз в рантайме и больше не будет изменяться. В голову только всякие RwLock'и лезут.
а что значит "асинхронная", может тебе что-то конкретное нужно?
источник

D

Denis in Rust — русскоговорящее сообществo
Эрик
static mut GLOBAL: option<&'static T> = None;

match GLOBAL {
 Some(t) => t,
 None => {
   let a = Box::leak(Box::new(T::default()));
   unsafe { GLOBAL = Some(a) }
 }
}
строго говоря, это уб, потому что нарушается инвариант, что в программе не может единомоментно существовать мубательная и иммутабельная ссылка на данные
источник

lp

lil pep in Rust — русскоговорящее сообществo
+ data race, который тоже UB
источник

D

Denis in Rust — русскоговорящее сообществo
возможный data race — следствие нарушения инварианта :)
источник

D

Denis in Rust — русскоговорящее сообществo
но таки да, один поток может писать туда данные в то же самое время, как другой поток эти данные читает
источник

Э

Эрик in Rust — русскоговорящее сообществo
Denis
а где синхронизация?
static mut GLOBAL: (AtomicBool, Option<&'static T>) = (AtomicBool::new(false), None);

match GLOBAL.0.compare_and_swap(false, true, AcqRel) {
 true => {
   loop {
     match GLOBAL.1 {
       Some(t) => t,
       None => continue,
   }
 },
 false => {
   let a = Box::leak(Box::new(T::default()));
   unsafe { GLOBAL = Some(a); }
   a
 }
}

Нуладна.
источник