result = func(*args, **kwargs)
ты инициализируешь экземпляр класса, затем возвращаешь его да и все, MyClass у тебя стала функцией которая возвращает экземпляр класса. Ну добавь там чего нибудь например.def f():
return 100
def decor(func):
def _wrapper(*args, **kwargs):
result = func(*args, **kwargs)
result.complex_calculation = f
return result
return _wrapper
class MyClass:
def complex_calculation(self):
return 42
MyClass = decor(MyClass)
my_obj = MyClass()
print(my_obj.complex_calculation())
Из всего изученного стало понятно, что процессы - это некие "контейнеры", содержащие id, статус, instruction pointer, значение регистров, открытые файлы и другие данные контекста.
какую роль в планировании играют процессы?
Для чего они нужны?
Как планировщик ОС работает с процессами?
Моя единственная догадка в том, что планировщик как бы "заглядывает" в каждый процесс и уже там работает с потоками.
use chrono::prelude::*;
use std::sync::mpsc;
use std::sync::mpsc::{Receiver, Sender};
use std::{thread, time};
fn main() {
println!("- - - - -");
let mut children = Vec::with_capacity(3);
for id in 0..children.capacity() {
let child = thread::spawn(move || {
let mut date_times = Vec::with_capacity(5);
for i in 0..date_times.capacity() {
let t: DateTime<Local> = Local::now();
date_times.push(t);
println!("{:?}_ поток, задача _{:?}, время: {:?}", id, i, t);
thread::sleep(time::Duration::from_millis(3));
}
(id, date_times)
});
children.push(child);
}
for child in children {
let (id, date_times) = child.join().expect("Дочерний поток паникует");
println!("thd_{} = {:?}", id, date_times);
}
println!("- - - - -");
}
этот монолит очень тяжело поддерживать, обновлять код и дебажит.
fn() -> u8
- это указатель на функцию. В него можно записать или обычную функцию с подходящей сигнатурой или замыкание, которое ничего не замыкает:fn some_func() -> u8 {
0
}
let f: fn() -> u8 = some_func;
let f: fn() -> u8 = || 0;
fn main() {
let mut funcs = Vec::with_capacity(3);
for i in 1u8..=3 {
funcs.push(move || i);
}
for i in 0..3 {
println!("{}", funcs[i]());
}
}
std::ops::RangeInclusive::<u8>::new
Особенно там, где был использован язык Си или С++
Наш Процессинговый Центр занимается разработкой финансовых систем, критичных к даунтайму и времени обработки. Изначально мы делали все свои продукты либо на чистом Си, либо на плюсах (C++14), однако пару лет назад мы переписали большой кусок нашего бэкенда на Rust, и нам настолько понравилось, что теперь все наши новые процессинговые сервисы пишутся на нём.
Мне бы хотелось видеть какое-то сравнение, что вот так стало сильно лучше и безопаснее, а вот было так написано изначально на оригинальном языке
ну тут все-равно unsafe
ну, нам еще нужен подсчет ссылок
Сработает ли подключение через hdmi-сплиттер (один hdmi-вход - два hdmi-выхода)?
TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.
Но стоп, компиляция - это процесс перевода "человеческого" кода в машинный код.
In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language).
есть какой-то TCP Fast Open но как его задействовать для туннеля\iptables?
Есть методы уменьшения пинга у TCP?
class StoppableThread(threading.Thread):
"""Thread class with a stop() method. The thread itself has to check
regularly for the stopped() condition."""
def __init__(self, *args, **kwargs):
super(StoppableThread, self).__init__(*args, **kwargs)
self._stop_event = threading.Event()
def stop(self):
self._stop_event.set()
def stopped(self):
return self._stop_event.is_set()
fn chto_to(&self) -> impl StringAnalyzer;
fn lexing<T>(&self) -> T where T: StringAnalyzer;
pub trait NewTrait {
type AssociatedType: ExistingTrait;
fn function() -> Self::AssociatedType;
}