LINUX.ORG.RU

Rust 1.55.0

 ,


1

4

Команда Rust рада объявить о новой версии языка программирования Rust, 1.55.0!

Основные изменения:

  • Cargo теперь дедуплицирует ошибки компилятора.
  • Ускорен и исправлен парсинг чисел с плавающей точкой по алгоритму Eisel-Lemire.
  • Обновлены варианты для std::io::ErrorKind.
  • Добавлены шаблоны открытого диапазона. (Подробности.)
  • Стабилизированы многочисленные API.

>>> Подробности

★★★★★

Проверено: hobbit ()

Ответ на: комментарий от iZEN

Джава жрет у пользователя, а потому, за пределами серверов ненужна. А писать на ней тормозной жирный пользовательский софт - вообще оскорбительно. Нажрались уже и мерзких IDE и андроида. Отправьте уже jvm на свалку истории. Rust дает хороший бинарник, можно даже дефолный тюнингом уменьшить практически до плюсового. А че там сколько компиляется - проблема 0.1 процента комьюнити, которое самой подписалось.

anonymous ()
Ответ на: комментарий от anonymous

Вообще-то 99,999% пользователей достаточно функционала DOS — чтобы запустить ОДНО приложение и вникать в него. А для DOS, как известно, достаточно 1 МБ ОЗУ (или 16 МБ в защищённом режиме). 16 МБ, Карл, и 16 ГБ — чувствуете разницу?!

Java работает на Nokia Series 30 с 64 KB памяти на приложение. Килобайты — не мегабайты.

iZEN ★★★★★ ()
Ответ на: комментарий от iZEN

Жрёт столько и сборка Swift компилятора. Там всё на крестах и прочем говне, которое при сборке выжирает память как не в себя, особенно когда в 8 потоков собираешь и более, все эти LLVM - монстры

menangen ★★★★★ ()

ускоренный и исправленный парсинг чисел с плавающей точкой по алгоритму Eisel-Lemire

исправленный

Замечательно. Т.е. до этого парсинг флоатов в этом «продакшн-реди» ненужно был глючный? А хотя бы складывало флоаты оно раньше без ошибок?

dimgel ★★★ ()
Ответ на: комментарий от fernandos

А теперь откройте оригинал и прочтите его.

Не хочу. Я предусмотрительно заложился на возможность такого ответа знаком вопроса в конце второго предложения своего камента.

dimgel ★★★ ()

Интересно, автор логотипа к этому модному молодёжному языку видел когда-то, как в реальности выглядит эвольвентный профиль зубов шестерни? И в язычке все точно так же как в его логотипе, и в этом высший смысл? :)

nikitos ★★ ()
Ответ на: комментарий от iZEN

Ты каждый день чтоли собираешь приложения уровня компилятора Rust? Пофиг вообще сколько он там жрёт при сборке, главное чтобы создаваемые программы работали быстро и мало жрали, а не как в электроне.

wall_jvm ()
Ответ на: комментарий от apt_install_lrzsz

не спешат его в свои SDK внедрять.

Понемногу пилят, но там сложно. Там без нормального проектирования получается УГ типа embedded-hal, которым пользоваться можно конечно, но больно.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

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

Годных разработчиков именно ПО там очень мало.

apt_install_lrzsz ()
Ответ на: комментарий от apt_install_lrzsz

А много людей в игорях реально ощущают разницу между 60 и 240?

На слепых тестах - не видят. Нет, когда испытуемый точно знает, что там 240, тогда да: движения становятся более плавными, попадают подёргивания. Но, если переключить в 60 (и не сказать) - эффект сохраняется.

Свидетелей 240Гц можно записывать в секту ценителей позолоченных проводов.

anonymous ()
Ответ на: комментарий от dimgel

Rust, although it implements a correct float parser, has major performance issues in float parsing. Even for common floats, the performance can be 3-10x slower than external libraries such as lexical and fast-float-rust.

Finally, this algorithm provides substantial improvements in the number of floats the Rust core library can parse. Denormal floats with a large number of digits cannot be parsed, due to use of the Big32x40, which simply does not have enough digits to round a float correctly. Using a custom decimal class, with much simpler logic, we can parse all valid decimal strings of any digit count.

// Issue in Rust's dec2fly.
"2.47032822920623272088284396434110686182e-324".parse::<f64>();   // Err(ParseFloatError { kind: Invalid })

TL;DR: работал правильно, просто сейчас обработка флоатов несколько усовершенствована.

fernandos ★★ ()
Ответ на: комментарий от nikitos

Бааа, да тут у нас Шпециалист в треде. Чё, поди ещё посидел в окружности логотип повписывал чтобы убедиться ))) Представляю как тебя корёжит от пиктограмок шестерёнок на кнопках настроек в ПО ))) //Если что не ненавижу Rust

anonymous ()
Ответ на: комментарий от BceM_IIpuBeT

Насчёт последнего не знаю, а Царь окончательно деградировал в т.ч. в своей личной беседе в телеграме; оставим в стороне факт того, что все посетители этого чата без исключения идиоты, лица лёгкого поведения итд итп (по версии царя естественно) и! Он требует за их оскорбления донатных денег - это было весело. Сейчас уже ни оскорбить с выражением, ни по плюсам ничего пояснить не может. Причем Помянем..

mazdai ★★ ()
Последнее исправление: mazdai (всего исправлений: 1)
Ответ на: комментарий от anonymous

Я могу организовать пари с детектором лжи, слепым тестированием мониторов и регистрацией времени отклика. Готовы ли вы мне проспорить от $2k, лично убедившись в ложности последнего утверждения?

mazdai ★★ ()
Ответ на: комментарий от anonymous

Он вечно умудряется то что и без него понятно придать вид - ОТКРОВЕНИЙ …

Которые ему не РАЗРЕШЕНО истолковать …
Одни намеки типа

В голове моей БЕГУДИ, а на БОЛЬШЕЕ ты не рассчитывай ...
anonymous ()
Ответ на: комментарий от dotcoder
#![feature(rustc_attrs)]
#![feature(llvm_asm)]
#![feature(asm)]
  • Мечта Хозяйки
#[inline]
pub fn ret_mem(addr: *const u8) -> u8 {
    let mut val = 225;
    unsafe {
        llvm_asm!(
        "movq ($0), $0\n"
        : "=r"(val)
        : "r"(addr)
        : "rax", "rbx"
        );
    }
    val
}

pub fn set_hidden(&self, opt: bool) {
        unsafe {
            if opt {
                asm!("__ObjectPool[$0].hidden=true"
                     :: "r"(self.obj.get_id()));
            } else {
                asm!("__ObjectPool[$0].hidden=false"
                     :: "r"(self.obj.get_id()));
            }
        }
    }
  • Мечты Сбываются
let ebx: u32;
let ecx: u32;

unsafe {
    asm!(
        "cpuid",
        "mov r8d, ebx", //invalid register `ebx`: rbx
        inout("eax") 4 => _,
        // ECX 0 selects the L0 cache information.
        inout("ecx") 0 => ecx,
        lateout("r8d") ebx,
        lateout("edx") _,
    );
}

println!(
    "L1 Cache: {}",
    ((ebx >> 22) + 1) * (((ebx >> 12) & 0x3ff) + 1) * ((ebx & 0xfff) + 1) * (ecx + 1)
);
#[rustc_promotable]
  • const РЭК нету..
#[inline]
pub fn full_flush_reload_time(addr: *const u8) -> u64 {
    let time: u64;
    unsafe {
        llvm_asm!("mfence \n
        lfence \n
        rdtsc \n
        lfence \n
        movl %eax, %esi \n
        movl ($1), %eax \n
        lfence \n
        rdtsc \n
        subl %esi, %eax \n
        clflush ($1) \n"
        :"=A" (time)
        :"r" (addr)
        :"%esi", "%eax"
        );
    }
    time
}
  • ..есть такое понятие, как преобразование личности
for _ in 0..10 * TEST_ARR_SIZE * TEST_ARR_SIZE {
        let time = asm::full_flush_reload_time(arr_ptr.add(TEST_ARR_SIZE/2));
        misses[std::cmp::min(time as usize, misses.len() - 1)] += 1;
    }
anonymous ()