URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 124921
[ Назад ]

Исходное сообщение
"Выпуск языка программирования Rust 1.54"

Отправлено opennews , 29-Июл-21 22:11 
Опубликован релиз языка системного программирования Rust 1.54, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки)...

Подробнее: https://www.opennet.me/opennews/art.shtml?num=55563


Содержание

Сообщения в этом обсуждении
"Выпуск языка программирования Rust 1.54"
Отправлено FortyTwo , 29-Июл-21 22:20 
> В разряд стабильных переведена новая порция API

Счачстье то какое!


"Выпуск языка программирования Rust 1.54"
Отправлено НяшМяш , 29-Июл-21 22:36 
Где бы взять запасную печень, что не релиз, так праздник.

"Выпуск языка программирования Rust 1.54"
Отправлено trdm , 30-Июл-21 09:45 
Сколько весит хелло ворд на русте с зависимостями?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 09:57 
Не помню точно, но вроде около метра.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 30-Июл-21 10:21 
Какие у хелловорлда зависимости? 250кб без отладочных символов.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 17:10 
Как минимум либа для работы с пайпами, тот же printf это замаскированный IPC

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 11:37 
$ rustc -C opt-level=z -C lto -C codegen-units=1 -C panic=abort -Z strip=symbols hello.rs
$ du -h hello
224K    hello

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 12:31 
> $ rustc -C opt-level=z -C lto -C codegen-units=1 -C panic=abort -Z strip=symbols
> hello.rs
> $ du -h hello
> 224K hello

-C prefer-dynamic
6,5K



"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 12:44 
> Сколько весит хелло ворд на русте с зависимостями?

500 байт


$ cat hello.rs
#![no_std]
#![no_main]
use core::panic::PanicInfo;
use syscall::syscall;

#[panic_handler]
fn panic(_info: &PanicInfo) -> ! { loop {} }

#[no_mangle]
pub extern fn _start() -> ! {
    let message = "Hello World\n".as_bytes();
    unsafe {
        syscall!(WRITE, 0, message.as_ptr(), message.len());
        syscall!(EXIT,0);
    }
    loop {}
}


$ ./hello
Hello World

$ ll hello
-rwxr-x---   496B 30 Jul. 12:41 hello*
$  readelf -d hello  
There is no dynamic section in this file.
$ objdump -d  hello


Disassembly of section .text:

00000000004000b0 <.text>:
  4000b0:    55                       push   %rbp
  4000b1:    48 89 e5                 mov    %rsp,%rbp
  4000b4:    6a 04                    pushq  $0x4
  4000b6:    58                       pop    %rax
  4000b7:    6a 09                    pushq  $0x9
  4000b9:    5a                       pop    %rdx
  4000ba:    be cc 00 40 00           mov    $0x4000cc,%esi
  4000bf:    31 ff                    xor    %edi,%edi
  4000c1:    0f 05                    syscall
  4000c3:    6a 01                    pushq  $0x1
  4000c5:    58                       pop    %rax
  4000c6:    31 ff                    xor    %edi,%edi
  4000c8:    0f 05                    syscall
  4000ca:    eb fe                    jmp    0x4000ca


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 13:41 
Интересный листинг.

00000000004000b0 <.text>:
  4000b0:    55                       push   %rbp
  4000b1:    48 89 e5                 mov    %rsp,%rbp
  4000b4:    6a 04                    pushq  $0x4           ; #define __NR_stat 4
  4000b6:    58                       pop    %rax
  4000b7:    6a 09                    pushq  $0x9           ; строка Hello World занимает 11 байт.
  4000b9:    5a                       pop    %rdx
  4000ba:    be cc 00 40 00           mov    $0x4000cc,%esi
  4000bf:    31 ff                    xor    %edi,%edi
  4000c1:    0f 05                    syscall
  4000c3:    6a 01                    pushq  $0x1           ; #define __NR_write 1
  4000c5:    58                       pop    %rax
  4000c6:    31 ff                    xor    %edi,%edi
  4000c8:    0f 05                    syscall
  4000ca:    eb fe                    jmp    0x4000ca

#define __NR_exit 60

Вот как выглядит корректный и с претензией минимальность


; fasm demonstration of writing 64-bit ELF executable
; (thanks to Franti.ek G.bri.)

; syscall numbers: /usr/src/linux/include/asm-x86_64/unistd.h
; parameters order:
; r9    ; 6th param
; r8    ; 5th param
; r10   ; 4th param
; rdx   ; 3rd param
; rsi   ; 2nd param
; rdi   ; 1st param
; eax   ; syscall_number
; syscall

format ELF64 executable 3

segment readable executable

entry $

           mov     edx,msg_size    ; CPU zero extends 32-bit operation to 64-bit
                                   ; we can use less bytes than in case mov rdx,...
           lea     rsi,[msg]
           mov     edi,1           ; STDOUT
           mov     eax,1           ; sys_write
           syscall

           xor     edi,edi         ; exit code 0
           mov     eax,60          ; sys_exit
           syscall

segment readable writeable

msg db 'Hello 64-bit world!',0xA
msg_size = $-msg



"Выпуск языка программирования Rust 1.54"
Отправлено Владимир , 30-Июл-21 14:12 
push 1 / pop edi занимает меньше байт, чем mov edi, 1. mov eax, 1 то же самое. Да и mov eax, 60.

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 14:34 
Речь не об опкодах, а о номерах системных вызовов. См. комментарии в первом листинге.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 15:04 
> Интересный листинг.
>
 
>     pushq  $0x4    
>       ; #define __NR_stat 4
>     pushq  $0x1    
>       ; #define __NR_write 1

> #define __NR_exit 60
> Вот как выглядит корректный и с претензией минимальность

Вы там поаккуратнее с ярлыками и суждениями о "корректности":


head -14 /usr/src/sys/sys/syscall.h
/*
* System call numbers.
*
* DO NOT EDIT-- this file is automatically @generated.
* $FreeBSD$
*/

#define    SYS_syscall    0
#define    SYS_exit    1
#define    SYS_fork    2
#define    SYS_read    3
#define    SYS_write    4
#define    SYS_open    5
#define    SYS_close    6


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 16:07 
>[оверквотинг удален]
>  * $FreeBSD$
>  */
> #define SYS_syscall 0
> #define SYS_exit 1
> #define SYS_fork 2
> #define SYS_read 3
> #define SYS_write 4
> #define SYS_open 5
> #define SYS_close 6
>

Да, это получился зачётный конфуз.

Тем не менее вопрос по размеру строки в силе. "Hello World\n" 12 байт без терминатора, а в листинге 9. В оригинале было "Hello BSD"?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:16 
> Тем не менее вопрос по размеру строки в силе. "Hello World\n" 12
> байт без терминатора, а в листинге 9. В оригинале было "Hello BSD"?

Подловил. Просто "sometext\n"


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 18:59 
Это ещё кто кого подловил. Если бы не эта разница в длине, я бы не обратил внимания, или может даже догадался про другую систему подумать. А так нашёл лишнее подтверждение, что код какой-то "не тот". :)

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 30-Июл-21 19:56 
Нужно понимать, что минимальный не значит быстрый. Он может быть сильно медленней при исполнении.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 15:01 
Можно ссылку на собираемый проектик?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:44 
10 лет назад хелло_ворд весил 5 мегабайт. 7 лет назад хелло_ворд весил 3 мегабайта. 4 года назад хелло_ворд весил 1 мегабайт. Сейчас хелло ворд весит около 100 Килобайт.

Растаманы стыдятся отвечать на этот вопрос. Больше не задавай такие вопросы.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 21:53 
> 10 лет назад хелло_ворд весил 5 мегабайт. 7 лет назад хелло_ворд весил
> 3 мегабайта. 4 года назад хелло_ворд весил 1 мегабайт.

У вас, криворуких - возможно все. И 100 мб.
> Сейчас хелло ворд весит около 100 Килобайт.

Врешь и не краснеешь.



"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 06:14 
>Врешь и не краснеешь.

Извини, сейчас helloworld на Расте весит 200-ти с чем-то килобайт.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 31-Июл-21 08:51 
>>Врешь и не краснеешь.
> Извини, сейчас helloworld на Расте весит 200-ти с чем-то килобайт.

Байт, без кило. 500 байтный пример https://www.opennet.me/openforum/vsluhforumID3/124921.html#322 для FreeBSD можно ещё сократить, если рихтануть ELF, но это уже не относится к языку.
В других системах будет примерно так же, только некоторые параметры (номера сисколов) поменяются. Сравните с вариантом на ассемблере в моём ответе.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 13:17 
>>Врешь и не краснеешь.
> Извини, сейчас helloworld на Расте весит 200-ти с чем-то килобайт.

Как мило, очередной болту^W Экспердус опеннета.


cat hello.rs &&  rustc -O -C prefer-dynamic hello.rs && strip hello &&  wc -c ./hello                                                                          
fn main() {
  println!("Hello World!");
}
    6608 ./hello

Приятного обтекания!

"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 01-Авг-21 11:27 
> prefer-dynamic
> 6608 ./hello

Хитрозадый очень, да?
Статику давай, или считай все те либы, которые тащит за собой этот ваш раст.


"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 01-Авг-21 12:30 
151 байт, статика: https://github.com/kmcallister/tiny-rust-demo

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 12:55 
>> prefer-dynamic
>> 6608 ./hello
> Хитрозадый очень, да?

Если очередной опеннетный "антирастовец" не владеет предметом, то кто ему ССЗБ?

> Статику давай,

Тебе воон выше дали - с ходу 500 байт, без каких-то извращений с линковщиком.

> или считай все те либы, которые тащит за собой этот ваш раст.

Эталон давай, на труЪ языке, плюс как правильно собирать и что, как и где считать. А то знаю я вас - "тут считаем, тут ... не считаем! Не считаем, я скозал!"



"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 13:04 
> Если очередной опеннетный "антирастовец" не владеет предметом, то кто ему ССЗБ?

Ты не умеешь в статическую сборку, а не владею предметом оказывается я. Ну-да, ну-да.
Растоманы такие растоманы.

> Тебе воон выше дали - с ходу 500 байт, без каких-то извращений с линковщиком

Это не "Hello, World" на расте, это не кроссплатформенная хрень на сисколах.

"Hello, World" на расте выглядит вот так и никак иначе:
----
fn main() {
    println!("Hello, world!");
}
----

> плюс как правильно собирать и что, как и где считать.

В Си статическая сборка делается просто ключом "-static" у gcc.
В расте, начиная с версии 1.48+ должно быть с ключом: '-C target-feature=+crt-static'. Но не факт, что это будет работать.
Проверять статичность линковки нужно выхлопом ldd - он должен быть пустым.



"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 02-Авг-21 13:25 
>> Тебе воон выше дали - с ходу 500 байт, без каких-то извращений с линковщиком
> Это не "Hello, World" на расте, это не кроссплатформенная хрень на сисколах.

Опечатка то по Фрейду. Действительно, не какая-то хрень, кросплатформенная, а, внезапно, пример системного программирования. Но тут же некоторым главное передёрнуть. Если слинковаться с libc, тогда бы он написал: "глядите, у Rust есть рантайм!"


"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 14:53 
> внезапно, пример системного программирования.

Мы в этой подветке обсуждали размер бинаря "стандартного" helloworld-а со всеми его зависимостями, а не системное программирование на расте.
helloworld - это ни разу не системное программирование.

> Но тут же некоторым главное передёрнуть.

Вот подсовывание хрени на сисколах вместо "стандартного" helloworld-а и было передёргиванием.
Во-первых, вместо "стандартного" хотели подсунуть совсем другое, а, во-вторых, пытались увести дискуссию с неприятной для вас темы в сторону.

> Если слинковаться с libc, тогда бы он написал: "глядите, у Rust есть рантайм!"

Кто "он"? Разверни мысль.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 02-Авг-21 15:27 
>> внезапно, пример системного программирования.
> Мы в этой подветке обсуждали размер бинаря "стандартного" helloworld-а со всеми его
> зависимостями, а не системное программирование на расте.

Нет никакого стандарта на helloworld-ы. Вы это прекрасно понимаете, потому и закавычили. Исходный вопрос "Сколько весит хелло ворд на русте с зависимостями?"
https://www.opennet.me/openforum/vsluhforumID3/124921.html#293
Пример показывает, что из зависимостей достаточно ядра. Наблюдаемый результат соответствует. Задача решена.

> helloworld - это ни разу не системное программирование.

helloworld и системное программирование ортогональны и не исключают друг друга.

>> Но тут же некоторым главное передёрнуть.
> Вот подсовывание хрени на сисколах вместо "стандартного" helloworld-а и было передёргиванием.

Это хороший, годный минимальный пример. Он показывает, что сам язык в какой-то мере самодостаточен и пригоден для написания системного ПО (я не говорю, что он является заменой императивному Си -- как выяснилось, Rust исходно функциональный язык).

С другой стороны вот здесь https://www.opennet.me/openforum/vsluhforumID3/124921.html#588
пишут, что к программе на Rust проблематично прилинковать статично его стандартную библиотеку. Вот это уже звоночек. Похоже, вокруг языка крутятся посторонние люди, которые плохо понимают требования.

> Во-первых, вместо "стандартного" хотели подсунуть совсем другое, а, во-вторых, пытались
> увести дискуссию с неприятной для вас темы в сторону.

Вопрос надо формулировать соответствующим образом, или не додумывать условия за автора. Может это он и опубликовал решение с сисколами. =)

>> Если слинковаться с libc, тогда бы он написал: "глядите, у Rust есть рантайм!"
> Кто "он"? Разверни мысль.

Да хоть кто. Тема рантайма идёт рефреном под каждой новостью.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 16:08 
> из зависимостей достаточно ядра

Тю, спалил.
Кстати, как тут некоторые умники собрались линковать статику под венду - вопрос.
Раньше там вообще бинарник без импортов не считался валидным.

> пишут, что к программе на Rust проблематично прилинковать статично его стандартную библиотеку.
> Вот это уже звоночек.

Помимо того, что требовать беспроблемную _статическую_ линковку с любой, даже "хитровывернутой", либой на _другом_ как-то странно, glibC - ни разу не "стандартная библиотека" раста.
Но тоже очень удобная для местных:
https://man7.org/linux/man-pages/man2/syscalls.2.html
> System calls are generally not invoked directly, but rather via
> wrapper functions in glibc (or perhaps some other library).

Сделали свой дубль - "тащин ненужный рантайм", используют системную либу "Фе, зависят от сишного рантайма!". Было уже с аллокатором, тащили jemalloc - "блоатварь тащит свой велосипед!", перешли по умолчанию на системный - "фу, не осилили свой аллокатор, используют сишрный, зачем раст вообще нужен!".
Кстати, растовская стат. либа вполне себе нормально линкуется с сишными.


#[no_mangle]
pub extern "C" fn main() {
    println!("Hell world");
}
gcc -static rstest/target/release/libstatictest.a -lpthread


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 16:47 

> либой на _другом_ как-то странно

на _другом_ ЯП
//fix


"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 20:44 
> как тут некоторые умники собрались линковать статику под венду - вопрос.

Ты всё перепутал. Я тебе предлагал просто собрать сискольно-растовый helloworld под винду, не обязательно в статике, но без модификаций исходника. И показать нам что у тебя получилось.

Я и под Бздю предлагал его тебе собрать, ибо чел выше написал, что он переделывал сискольно-растовый исходник под Линь. А я, не вдаваясь в подробности его модификаций, посчитал, что без них у него что-то не собиралось или не работало.
Но ты тут же прибежал и начал кричать что я дико обглюкался, показывая мне строчку "$FreeBSD$".

Мда уж... молодец.

> glibC - ни разу не "стандартная библиотека" раста.

Ага. Это системная библиотека на подавляющем большинстве GNU/Linux-ов.
Через неё ваш Раст и работает, если верить выхлопу ldd. И нет никаких оснований этому выхлопу не верить.

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


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 21:49 
>> как тут некоторые умники собрались линковать статику под венду - вопрос.
> Ты всё перепутал. Я тебе предлагал просто собрать сискольно-растовый helloworld под винду,
> не обязательно в статике, но без модификаций исходника. И показать нам
> что у тебя получилось.

Хорошая отмазка но нет. У тебя претензии были 1) "не кроссплатформенно" 2) "собери статику".
Получается как обычно: "там считаем, там ... ты все перепутал!"

> Я и под Бздю предлагал его тебе собрать, ибо чел выше написал,
> что он переделывал сискольно-растовый исходник под Линь. А я, не вдаваясь
> в подробности его модификаций, посчитал, что без них у него что-то
> не собиралось или не работало.
> Но ты тут же прибежал и начал кричать что я дико обглюкался,
> показывая мне строчку "$FreeBSD$".

Конечно же обглюкался - потому что оригинал дампа и был собран под "бздю"


wc -c nostd && file nostd      
     496 nostd
nostd: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), statically linked, stripped

(к чему и были "претензии" - мол, чей это у вас номера сисколов странные, не порядок!).
Но ты читал афедроном - понял что-то совершенно свое и выдвинул соотв. претензии, причем в соотв. тоне.


>> glibC - ни разу не "стандартная библиотека" раста.
> Ага. Это системная библиотека на подавляющем большинстве GNU/Linux-ов.
> Через неё ваш Раст и работает, если верить выхлопу ldd. И нет никаких оснований этому выхлопу не верить.

Ну т.е. ты не знаешь разницы между системной и стандартной библиотекой.
Или же, я правильно понимаю, что (условная) "kernel32.dll" или "winnt" - стандартная библиотека сишки, плюсов (и еще кучи языков), потому что на венде "через нее ваш X и работает", если цитировать тебя же?
Или кто-то запутался в своей демагогии?


"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 03-Авг-21 02:12 
> У тебя претензии были 1) "не кроссплатформенно"
>
>> Я тебе предлагал просто собрать сискольно-растовый helloworld под винду,
>> не обязательно в статике, но без модификаций исходника. И показать нам
>> что у тебя получилось.

Здесь легко прослеживается причинно-следственная связь. Все, у кого мозги на месте, поймут.

> Хорошая отмазка но нет.

Нет так нет. Но я теперь имею полное моральное право считать тебя токсичным г.

> Конечно же обглюкался - потому что оригинал дампа и был собран под "бздю"

Ну и радуйся, что я обглюкался. Да, я повёлся на вот эту хрень, не вдаваясь в детали:

> (... у вас номера сисколов странные, не порядок!).  

Сильно радостно от такой "великой победы"?

Ты вообще понимаешь насколько это мелко?

>> Через неё ваш Раст и работает, если верить выхлопу ldd. И нет никаких оснований этому выхлопу не верить.
> Ну т.е. ты не знаешь разницы между системной и стандартной библиотекой

А я и не указывал в каких именно местах Раст работает через (g)libc. Я этого и не знаю, и знать не хочу - не интересно.
И в твоих фантазиях на тему виндузы я тоже не стал разбираться, прости.

А вот по поводу терминологии читай цитаты из README от glibc:

"The GNU C Library is the _standard_ _system_ C library for all GNU systems,
...
the runtime facilities of other programming
languages use the C library to access the underlying operating system".


P.S. Унылый ты, анон, очень унылый.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 03-Авг-21 14:12 
Сисколы в Виндосе, насколько помню, меняются в пределах версии ОС. Никто в здравом уме их там не использует. Если кто-то предлагает обойтись без ntdll.dll (а в случае вывода на консоль наверняка потребуется и WriteConsoleW из kernel32.dll) -- он либо не владеет предметом, либо намеренно пытается свести дискуссию к священной войне.

"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 17:39 
> Нет никакого стандарта на helloworld-ы

Вообще-то растовский "стандартный" helloworld есть прямо в главной книжке по расту:
https://doc.rust-lang.org/book/ch01-02-hello-world.html

> Пример показывает, что из зависимостей достаточно ядра.

Практически любую прикладную программу можно написать на один только сисколах. Но так никто не делает. И этому есть много разных причин.

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

> helloworld и системное программирование ортогональны и не исключают друг друга

Это не совсем так. За helloworld-ом уже давно закрепился особый смысл.
Вот, например, его описание на Wiki: https://ru.wikipedia.org/wiki/Hello,_world!

> Это хороший, годный минимальный пример.

Возможно. Но к размеру бинаря классического helloworld-а имеет весьма далёкое отношение.

> Вопрос надо формулировать соответствующим образом, или не додумывать условия за автора.

Нормально там был сформулирован вопрос: "Сколько весит хелло ворд на русте с зависимостями?".

Но вместо прямого ответа последовали всякие плутовства. Тут тебе и сисколы, тут тебе и prefer-dynamic.  Всё это бросается в глаза.

Вы, ребята, этими своими хитростями создаёте своему любимому Расту плохую репутацию. Этот язык прямо на глазах становится "токсичным".
Я это и по буржуским форумам вижу, кстати. К RUST-евангелистам ведь не только на опеннете многие негативно относятся. Это уже общемировая тенденция, можно сказать.
Многих вы уже утомили своим Растом, да.



"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 03-Авг-21 14:07 
>> Нет никакого стандарта на helloworld-ы
> Вообще-то растовский "стандартный" helloworld есть прямо в главной книжке по расту:
> https://doc.rust-lang.org/book/ch01-02-hello-world.html

По ссылке насчитал 4 вхождения слова "standard":

"12.6. Writing Error Messages to Standard Error Instead of Standard Output

"If you want to stick to a standard style across Rust projects

"with the standard Rust distribution"

потому дальнейшую часть сообщения читать не буду, вряд ли она имеет смысл.


"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 15:05 
> Опечатка то по Фрейду. Действительно, не какая-то хрень, кросплатформенная, а, внезапно, пример системного программирования.

Ты и в этом случае, кстати, выдернул одну фразу из контекста. Такое "хитроумное" выборочное цитирование.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 16:45 
>> Если очередной опеннетный "антирастовец" не владеет предметом, то кто ему ССЗБ?
> Ты не умеешь в статическую сборку, а не владею предметом оказывается я.

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

>> плюс как правильно собирать и что, как и где считать.
> В Си статическая сборка делается просто ключом "-static" у gcc.

В последний раз:
давай полный пример, чтобы не было потом "Ты не так понял и вообще я не я и мопедолошадь - не моя!"


"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 18:18 
>> В Си статическая сборка делается просто ключом "-static" у gcc.
> ... для тебя стат. сборка "ух какой крутой скилл"

Да, знание ключа "-static" я считаю крутым скиллом. (facepalm.jpg) [нет, конечно]

> предыдущим (к сожалению, удаленным) перлам - не владеешь.

Ты свои перлы до сих пор продолжаешь извергать:

> как-то странно, glibC - ни разу не "стандартная библиотека" раста.

Собери свой растовский helloworld и посмотри наконец выхлоп ldd, что ли. Может поймёшь как оно у тебя работает. Я тебе писал это ночью, но всё потёрли.

> давай полный пример

Я не должен давать тебе никакой примеров.
Это ведь ты доказываешь крутизну Раста, а не я доказываю крутизну Си.
Есть такое общепринятое правило: "Бремя доказательства лежит на утверждающем".
Ты утверждаешь - ты и доказывай.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 21:27 
>> как-то странно, glibC - ни разу не "стандартная библиотека" раста.
> Собери свой растовский helloworld и посмотри наконец выхлоп ldd, что ли. Может поймёшь как оно у тебя работает. Я тебе писал это ночью, но всё потёрли.

Я то в курсе (и у меня оно ни разу не зависит от glibc),


rustc -O hello.rs && ldd hello
hello:
    libthr.so.3 => /lib/libthr.so.3 (0x8010af000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x8010dc000)
    libc.so.7 => /lib/libc.so.7 (0x8010f3000)

а вот ты похоже то ли унылый набросчик, то ли просто очередное опеннетное ламо, то ли гибрид из того и другого.

>> давай полный пример
> Я не должен давать тебе никакой примеров.
> Это ведь ты доказываешь крутизну Раста, а не я доказываю крутизну Си.

Ссылку на "ты доказываешь крутизну Раста" или балабол?


> Есть такое общепринятое правило: "Бремя доказательства лежит на утверждающем".
> Ты утверждаешь - ты и доказывай.

Видишь ли, балабол, ты ошибся методичкой - каких-то "доказательств" требуешь ты,
фыркая на существующие - "это не то! И это тоже не считается!". Ветку начал тоже "из ваших".
При этом четко и внятно описать что вам нужно, вы не в состоянии, отмазываясь "Я не должен давать тебе никакой примеров."
В общем-то, правильно опасаетесь, что вас опят ткнут носом в лужу.



"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 23:21 
> (и у меня оно ни разу не зависит от glibc),
>  libc.so.7 => /lib/libc.so.7 (0x8010f3000)

Угу, у тебя оно зависит от другого libC. Но сути-то это не меняет.

> а вот ты похоже то ли унылый набросчик, то ли просто очередное опеннетное ламо, то ли гибрид из того и другого.

Ты вообще токсичное г., с которым противно иметь какие-либо коммуникации. О другом участнике дискуссии, кстати, я такого пока не могу сказать.

> Ссылку на "ты доказываешь крутизну Раста"

Да хоть вот это: https://www.opennet.me/openforum/vsluhforumID3/124921.html#517

>...фыркая на существующие - "это не то! И это тоже не считается!".

Конечно, потому что ты всех за л0х0в держишь. Написали "с зависимостями", а ты подсовываешь вообще обрезанный по максимуму бинарь, у которого на самом деле куча зависимостей, которых не видно. Типа, хитросделанный очень.

> В общем-то, правильно опасаетесь, что вас опят ткнут носом в лужу.

Можешь себя этим успокаивать. Но причина-то совсем не в этом.

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


"Выпуск языка программирования Rust 1.54"
Отправлено Котофалк , 03-Авг-21 13:34 
извините, что прерываю, но откуда вообще появилось требование статической линковки? тем паче для helloworld?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 19:46 
Всего лишь 200+ килобайт. А какой вес у ноды? А какой у джавы? У дотнета? У питона?

А у C++? Тоже со стандартной либой?

#include <iostream>

int main() {
    std::cout << "hello world" << std::endl;
    return 0;
}

$ g++ hello.cpp -O2 -static-libstdc++

$ du -sh ./a.out
1.3M    ./a.out

$ strip a.out
$ du -sh ./a.out
948K    ./a.out

(и 880K если Clang)


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 22:20 
В Расте так вообще не получится.
Нужно специально устанавливать MUSL libc и выбирать соответствующий target, чтобы получить на 100% статический бинарник.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 23:26 
> $ g++ hello.cpp -O2 -static-libstdc++

У мну без доп. -static ldd ругается на зависимости.
А полностью стат., "пострипаный" плюсовой бинарь выходит в 1.4МБ (1.1 для шланга).


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 00:27 
В любом случае меньше любого интерпретируемого языка,
а с учетом засилья PHP, Python, Ruby для сайтов (коих у каждой компании),
то не думаю, что это как-то сильно кого-то беспокоит.

А тебе рекомендую уже дойти до магазина и купить себе новый диск.
Сейчас уже SSD стали вполне доступными, а порнуху можно и в облако загрузить.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 00:46 
> В любом случае меньше любого интерпретируемого языка,
> а с учетом засилья PHP, Python, Ruby для сайтов (коих у каждой
> компании),
> то не думаю, что это как-то сильно кого-то беспокоит.

Ты его лучше спроси, как он вообще зависимости считает.
И пусть "эталонный" пример, с эталонными опциями сборки (и пояснением за эталонне окружение выполнения) на труЪ ЯП кинет, для начала.
Охренее^W Узнаешь много "нового".


"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 00:00 
> Узнаешь много "нового".

Уже узнали, что Раст не умеет в статическую линковку с glibc.
Для статической линковки ему нужна MUSL.

Это просто "праздник" какой-то.


"Выпуск языка программирования Rust 1.54"
Отправлено Растофиля , 02-Авг-21 13:08 
Вроде в новых версиях линковать статически с glibc они уже научились. Но это всё нужно проверять. У них там есть оговорки.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 22:21 
> Инкрементальная компиляция была отключена в выпуске 1.52.1 из-за выявления скрытых ошибок

Теперь не только безопасная работа с памятью, но и безопасная компиляция.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:06 
Друг, безопасности памяти в коде и отсутствие уязвимостей в принципе - принципиально разные вещи, второе нельзя достигнуть, но лучше всё же жить без первого

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:29 
Не такие уж и принципиальные, смежные. Ошибки работы с памятью запросто используют для уязвимостей.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:50 
Тогда зачем нужна эта ваша «безопасная память»?

"Выпуск языка программирования Rust 1.54"
Отправлено Sw00p aka Jerom , 30-Июл-21 00:10 
безопасная память это физически разделенная

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 09:38 
чтобы тратить больше времени на разработку, изворачиваясь, делая обычные вещи. как с С++ в своё время.

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 07:48 
> безопасности памяти в коде (1)
> отсутствие уязвимостей  в принципе (2)

...
> второе нельзя достигнуть,
> но лучше всё же жить без
> первого

Так понятнее, что на самом деле написано.


"Выпуск языка программирования Rust 1.54"
Отправлено КО , 30-Июл-21 07:52 
"отсутствие уязвимостей в принципе" нельзя достигнуть, но лучше всё же жить без "безопасности памяти в коде".
Так понятнее, чем здец из ">"

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 10:05 
Задним числом все умны.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 29-Июл-21 22:35 
>Вызов макросов внутри атрибутов может оказаться полезным для включения в документирующие комментарии содержимого из других файлов. Например, для вставки содержимого файла README и результата выполнения скрипта можно указать

Что-то я непронял совсем что тут происходит и зачем это нужно.
Макрос в коде меняет файл с кодом или что тут происходит?


"Выпуск языка программирования Rust 1.54"
Отправлено Dzen Python , 29-Июл-21 22:45 
Мне больше интересно, зачем вставлять в .rs файл содержимое .md файла.

Стандартный хедер "этот файл под лиценцией {0}, писан {1}, email {2}" может вставить даже не самая продвинутая IDE. Далее по идее ридми.тхт и комментарии должны наоборот, из src-файлов ИЗвлекаться, и на их основе генерироваться нормальная человеческая документация + файл ридми.

Также мне реально стало интересно, зачем пихать в .rs файл вывод .[скрипт].

Вот тут действительно, непонятно. Хотелось бы увидеть хотя бы три сценария использования, где это не натягивание совы на глобус, а глобуса - в попугая


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 29-Июл-21 22:48 
> Далее по идее ридми.тхт и комментарии должны наоборот, из src-файлов ИЗвлекаться, и на их основе генерироваться нормальная человеческая документация + файл ридми.

Вот и я раньше так думал, а теперь не понимаю что происходит. Может нам опытные растенианци объяснят.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:37 
>Может нам опытные растенианци объяснят.

Растаманы - это растения? Растаман - это овощь?


"Выпуск языка программирования Rust 1.54"
Отправлено ПомидорИзДолины , 29-Июл-21 23:23 
В Расте документация генерируется на основе специально оформленных комментариев (doxigen вид сбоку). Когда документации становится много это усложняет навигацию по исходному когда.

Теперь часть документации можно вынести в отдельные файлы, а в исходниках остваить только краткую выжимку.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 03:57 
Но зачем для этого какие-то макросы в исходниках? В доках пишешь имя функции и комментарий.

Или я чего-то не понимаю?


"Выпуск языка программирования Rust 1.54"
Отправлено Анонимъ , 30-Июл-21 04:19 
Комментарии-документация чисто технически являются специальным синтаксисом для #[doc] макроса.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 04:35 
Я к тому что.
1 Доки собираются из исходников.
2 В исходниках слишком много доков, вынесем их в отдельный файл. Чтобы... Чтобы линковать отдельный файл в исходники откуда собирать доки?

Почему бы не собирать доки сразу из отдельного файла с доками?
Зачем в исходники то тянуть что попало из каких-то файлов?

Или я всё неправильно понимаю?


"Выпуск языка программирования Rust 1.54"
Отправлено Анонимъ , 30-Июл-21 05:29 
https://doc.rust-lang.org/std/pin/index.html

Вот пример выше. Подобную документацию удобнее держать рядом с кодом.

Ну или https://docs.rs/legion/0.4.0/legion/index.html в качестве случайного примера.

В дополнение: примеры кода в документации являются полноправными тестами (выполняются по cargo test).

Там подкрутили, здесь сделали удобнее, вон там ещё затюнили маленько. Мелочи, но по совокупности получаем одну из самых лучших документаций в индустрии. По крайней мере у крейтов, которые используют больше чем 1.5 землекопа.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 06:39 
> примеры кода в документации являются полноправными тестами (выполняются по cargo test)

Особенно удобно, если это пример кода к какому-нибудь std::fs::remove_dir_all :)


"Выпуск языка программирования Rust 1.54"
Отправлено Анонимъ , 30-Июл-21 22:38 
Для таких случаев есть no_run.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 23:16 
Да это понятно :-) Просто не люблю такое неявное поведение.
Мне видится более разумным явное указание того, что пример кода является одновременно и тестом, чем такая инвертированная логика.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:15 
>> примеры кода в документации являются полноправными тестами (выполняются по cargo test)
> Особенно удобно, если это пример кода к какому-нибудь std::fs::remove_dir_all :)

Ага, и то ли дело "make test" или ./configure_портянка_на_пару_тысяч_строк - там такое ну абсолютно невозможно!

> Суть проблемы в том, что в файле install.sh для очистки локальной копии собранных файлов вместо команды "rm -r yd-tools/usr" по ошибке была добавлена строка "rm -r /usr". Проблема появилась в коде 20 мая в ходе переработки сборочных скриптов и была исправлена несколько часов назад

Ой!


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 08:30 
> Почему бы не собирать доки сразу из отдельного файла с доками?
> Зачем в исходники то тянуть что попало из каких-то файлов?

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


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 15:56 
Это логично, однако.
Комментировать код, и иметь отдельный файл для хранения документации, друг другу не противоречащие вещи.

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

Понятно если к такой системе пришли эволюционно и постепенно.
Но было ли абсолютно необходимо для раста набивать все шишки прошлых поколений, вопрос открытый.

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


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 16:21 
Документация ведь делится на несколько уровней. Есть и краткое описание проекта (почти не меняется и к какому-то конкретному фрагменту кода не привязана), информация об авторе, лицензии и т.п. Вот пример титульной страницы документации на Доксиген, наверняка в отдельном файле https://www.doxygen.nl/index.html

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:14 
В cargo doc появилась поддержка не только api документации, поэтому теперь не обязательно нужен дополнительный тулинг, чтобы писать гайды, туториалы и проч подобные вещи.

"Выпуск языка программирования Rust 1.54"
Отправлено псевдонимус , 30-Июл-21 06:13 
Тут происходит Чад кутежа во мгле ада.

Это раст, парень!


"Выпуск языка программирования Rust 1.54"
Отправлено Дмитрий , 29-Июл-21 22:40 
А когда перепишут Rust на Rust'e?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 22:43 
Он уже на расте.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:10 
Дак вон оно что, Михалыч... Потому ошибки и вылазят.

> Инкрементальная компиляция была отключена в выпуске 1.52.1 из-за выявления скрытых ошибок


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 08:48 
Могу только предположить, но вероятно это происходило из-за логических ошибок в реализованных алгоритмах, а не из-за обращения к памяти после ее освобождения или выхода за границы буфера и т.п., что составляет 70-80 процентов ошибок в прогах на C/C++

"Выпуск языка программирования Rust 1.54"
Отправлено Kuku , 01-Авг-21 00:28 
Давайте не будем бла-бла-бла. Среднестатистически даже в релизах ПО 90 процентов ошибок - логические. А потом уже идут эти ваши обращения к освобожденной памяти и прочая фуета.
Интересно, как в расте борются с этой проблемой, учитывая то, насколько на нем неудобно выражать свои мысли, в отличие от того же питона, к примеру

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 10:34 
Мне вот удобно выражать свои мысли на русском, чуть менее удобно на английском, поскольку не родной, а на китайском совсем неудобно, ведь я им не владею. А китайцу ровно наоборот.

С языками программирования та же ситуация.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 14:02 
> А китайцу ровно наоборот.

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

Так что да. Пример очень показательный.


"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 30-Июл-21 11:09 
Есть какой-то компилятор в котором не допускали ошибок? Или какой-то язык, на котором не допускали ошибок?

"Выпуск языка программирования Rust 1.54"
Отправлено leap42 , 30-Июл-21 06:51 
>Он уже на расте.

Это как говорить что весь веб на JS, игнорируя весь бэкенд на PHP,Java,C#,Ruby,Go и т.д.


"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 30-Июл-21 11:10 
Что конкретно вы имели в виду?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 14:21 
наверное, что там llvm на на расте в качестве бэкэнда

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 17:26 
Когда успели llvm на раст переписать?

"Выпуск языка программирования Rust 1.54"
Отправлено . , 31-Июл-21 23:02 
А кто сказал что rustc только llvm умеет? Кроме другого бекенда написанного на C++ (gcc, он был недавно принят), уже давно поддерживается cranelift, а он целиком на Rust написан

Пускай cranelift пока не может соревноваться по скорости работы выхлопа с llvm (Для x86, основные усилия в нём брошены в сторону wasm), он уже работает, и для дебаг билдов его некоторые используют из за его высокой скорости компиляции


"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 29-Июл-21 22:52 
> макросов, напоминающих функции (процедурные макросы и макросы, созданные при помощи макроса "macro_rules!"). От функций подобные макросы отличаются символом "!" после имени (macro!(...)) и подстановкой исходного текста макроса вместо генерирования вызова функции

Они наконец изобрели inline-функции? %D


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 22:54 
В каком смысле? Инлайн давно есть

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 29-Июл-21 22:56 
Или, слава ржавчине, они изобрели #define? Непонятненько...

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 22:58 
Макросы C - худшие макросы ever, не надо их тут вспоминать, пожалуйста

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:46 
Макрос это не часть языка это препроцессор компилятора и чем же макросы rust лучше чем си?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 00:01 
Действительно, наверное и в стандартах языков С и С++ ничего нет про макросы?

А про разницу можно легко найти в гугле.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 00:08 
Спецификация C или C++ описывает не только сам язык, а еще например язык макросов для компилятора

А спецификация Java или C# описывает байткод, но ты же не пишешь на байткоде?

Есть технические особенности реализации того или иного ЯП которые отражены в стандарте ЯП, имеющие коственное отношение к ЯП и прямое к его компиляции или интерпритации, тобишь исполнению


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 01:05 
Кажется, что тебе нужно прочитать секцию Scope стандарта.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 01:25 
Помню был тут один поехавший который мне доказывал что язык Си это ООП язык только по тому чтт в стандарте Си имеется слово "обьект трансляции" то есть всмысле раздельная компиляция, но слово же "обьект" есть в стандарте Си значит ООП? И ты туда же? А логику как? Включить не пробывал?

"Выпуск языка программирования Rust 1.54"
Отправлено adolfus , 30-Июл-21 01:50 
Нет в стандарте С никакого "объекта трансляции", но есть "единица трансляции" -- это то, что получается в результате работы препроцессора.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:45 
Был он меня задолбал этим слово, вроде в C89 его нашел... хз погугли

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 00:12 
Стандартная библиотека тоже отношения не имеет к синтаксису ЯП, она лишь описывает API для взаимодействия с окружением внутри ОС, но это же не мешает ей быть в стандарте


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 01:06 
Синтаксис языка != язык.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 01:16 
Хм, ЯП может считаться то что компилируется напрямую в машинный код(неважно как статически, через jit или интерпритатор)

Макрос транслируется в C/C++ код, какое отношение он имеет к ЯП?


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 01:27 
Синтаксис ЯП так или иначе имеет машинное отображение в виде исполняемого файла с инструкциями процессора... макросы этого не имеют

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 01:19 
> Макрос это не часть языка это препроцессор компилятора и чем же макросы rust лучше чем си?


// Wrong!
#define SWAP(x, y) \
  tmp = x; \
  x = y; \
  y = tmp

// Correct!
#define SWAP(x, y) \
  do { \
    tmp = (x); \
    (x) = (y); \
    (y) = tmp; } \
  while (0)


И правда, чем же макросы, которые часть языка и "умеют" в AST, лучше примотанного на синюю изоленту независимого текстового препроцессора, которому неведомы ни имена переменных, ни области видимости, ни прочее "ненужно"?



"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 01:38 
Макросы это тупо подстановка кода из макросов в код программы, иначе говоря шаблонизатор... какое нафиг AST причем здесь оно?

Функциональный макрос это шаблон заполнения кода внутри него до этапа компиляции

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

Ну и классическое, раз дефайн это тупо шаблонизатор подставляющих значения никакой проверки типов входящих значений в нем нет


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 02:15 
> Макросы это тупо подстановка кода из макросов в код программы, иначе говоря шаблонизатор... какое нафиг AST причем здесь оно?

"новое определение макроса бай опеннетный аноним"

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

"Папа, где море?!" (c)



"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:24 
Ответь умник где найти код дефайна в обьектном файле? Ах да я ж забыл что он существует лишь в памяти компилятора на момент компиляции...или ты не согласен?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 02:44 
> Ответь умник где найти код дефайна в обьектном файле?

Зачем мне отвечать на твои бредовые фантазии, невежда, у которого "дефайн вычисляется только один раз на этапе компиляции"?
> Ах да я ж забыл что он существует лишь в памяти компилятора на момент компиляции...или ты не согласен?

На момент компиляции никаких "дефайнов" уже нет, компилятор работает с результатом препроцессора.
man cpp, man gcc -E, man что_такое_препроцессор (да хоть man gcc вводная часть).


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:25 
И не трави за подстановки дефайна, ты скажи где он как машинный код в обьектном файле?

"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 02-Авг-21 11:39 
Он не говорил, что define-ы улетают в машинный код. Он говорил, что макросы как часть AST-а языка -- это лучше чем отдельный препроцессор.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 01:40 
Короче разберись что такое макросы, инлайн функции и обычные функции чем они отличаются, а то у тебя венегрет какой то в голове


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 02:30 
>> макросы, которые часть языка и "умеют" в AST
>> ... ни имена переменных, ни области видимости,
> какое нафиг AST причем здесь оно
> Функциональный макрос это шаблон заполнения кода внутри него до этапа компиляции
> Короче разберись что такое макросы, инлайн функции и обычные функции чем они отличаются, а то у тебя венегрет какой то в голове

Подсказка: для начала подтяни базовые (в смысле ВУЗа, а не школьных уроков информатики) знания по ЯП -- и многое перестанет быть "венегретом".


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:20 
Хотя вычисление макроса на этапе компиляции вроде нигде не прописано, поэтому в старых компиляторах применяется обычный копипаст

Ну и не все макросы можно вычислить, тот же printf например который работает со стандартным потоком ОС

Поэтому для каноничности без особо умных компиляторов, будем считать макросы копипастой


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 08:44 
Смотрите раздел Translation phases. Препроцессор это отдельная фаза трансляции, семантический анализ и трансляция (компиляция) идут несколько позже, после чего происходит связывание (линковка).

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:41 
Макросы раста - это конструкции языка, а не препроцессора. Уместнее сравнение с темплейтами в плюсах.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 22:53 
Постепенно углубляюсь в этот язык, кайфую
После C/C++ совсем сказка, море возможностей и удобств, при этом высокая производительность

Советую всем, даже кого C/C++ держит и точно не отпустит. С разбором Раста приходит большее понимание, как лучше писать код вообще.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 29-Июл-21 22:56 
Лисп попробуйте, схему какуюнить, Racket например.
Много почерпнёте.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:03 
Спасибо за рекомендацию!
К сожалению, как-то так складывается, что не перевариваются скобочные языки с фп в чистом виде. А вот элементы фп в других языках - приятное дополнение к их возможностям.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:15 
Да нет в этих лиспах никакого чистого ФП. В scheme ФП, конечно, побольше, чем в CL, но по сути там столько же ФП, сколько его в современном Джаваскрипте.

За чистым ФП - в Haskell, ну или к некоторым языкам семейства ML.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 09:41 
для haskell нужно вспоминать забытый после универа матан( подзабил в своё время на его изучение

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 18:43 
Да не надо там никакого матана. Просто он из академической среды, и потому им привычнее в терминах теории категорий рассуждать. На самом деле всё это объясняется на пальцах элементарно: http://learnyouahaskell.com/

"Выпуск языка программирования Rust 1.54"
Отправлено Kuku , 01-Авг-21 00:39 
Напоминает хаскелевский хайп надцатилетней давности. Потом как-то все устаканилось, и язык трехсот головоломных способов вычисления чисел Фибоначчи занял почетное место во главе промышленно используемых языков, но с конца.
Тем же окончится и абсолютистский подход к "безопасности использования памяти", когда без ансейфа код становится пароксизмом пи*доватизма, а безопасность страдает уже от множества других проблем, решение которых так и не удается загнать вместо линтера в компилятор ))

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 01-Авг-21 01:22 
Напоминает.
Но все-же хаскель был немного о другом. Если я верно понимаю, фишка хаскеля это корректность и верифицируемость (ещё про ленивость много шутили)

В то время как фишка раста, это универсальность в первую очередь но с сахаром и плюшками.
Раст можно сравнить в этом плане с котлином например.

Учитывая, что раст даже вот в линукс ядро пропихивают, есть некие надежды на то, что будет он чуть более популярнее хаскеля.


"Выпуск языка программирования Rust 1.54"
Отправлено wyry , 14-Дек-21 14:54 
Это другое!). А так история циклична, а ПО как писали на C/C++, JVM-семействе, так и пишут. Когда училась в универе функциональные и околофункциональные языки были очень в моде, с одной стороны Haskell, с другой стороны LISP'еры грозились захватить мир и было очень даже много неплохих ресурсов по LISP, Microsoft на хайпе запилили свой диалект OCaml и носились с ним просто ВЕЗДЕ! И знаете что? Все перечисленные языки во всех смыслах лучше и качественнее Rust! В каждом есть своя идея, реализация на уровне проектирования, вот почему-то F# написан на F#, то есть разработчики в кои то веки с технической точки зрения знали что делают и чего хотят достичь. Rust же до сих пор не вышел из состояния зародыша, НО УЖЕ покрылся ржавчиной (собственно правдивое название), причём язык даже не умудрился привнести вообще ничего нового. На C++ почти на всю функциональность Rust есть свои приёмы, можно без труда писать на C++ в стиле Rust и заиметь все те преимущества (не очень то и существенные) которые он даёт. То есть если Хаскель или ML-семейство или LISP или даже JVM-семейство даёт альтернативные пути и фишки, то Rust не привносит ВООБЩЕ НИЧЕГО кроме агрессивного маркетинга. Причём я никогда не хейтила Rust от чистого сердца, но разобравшись в нём получше поняла, что во-первых на C и С++ писать И ЧИТАТЬ (для меня) намного проще, во-вторых сам язык не несёт вообще никаких критических инноваций, по поводу удобств и производительности разработчика - я это слышу уже годами. Java говорила что она быстрее, удобнее и надёжнее, в итоге паттерны (а на практике чаще антипаттерны) создают настолько шизанутый код, что если бы он был тупо был написан в стиле чистого C - разобраться в нём было бы в разы легче. F# говорил что код можно писать значительно короче и сразу без ошибок. И да, там где задачу можно решить просто в функциональном стиле - F# хорош, как только дело доходит до чего-то другого, проще родить ежа и ужа, чем написать, в итоге производительность разработчика откатывается обратно в 0 или даже хуже.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 14-Дек-21 18:01 
Да, лучше бы типизированный лисп развивали конечно.

Я после того как осилил лисп смотрю на сиподобные языки как на ужасное нечно. Непонятно зачем вообще сделанное.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 14-Дек-21 18:07 
>И да, там где задачу можно решить просто в функциональном стиле - F# хорош, как только дело доходит до чего-то другого, проще родить ежа и ужа, чем написать, в итоге производительность разработчика откатывается обратно в 0 или даже хуже.

Думаю всегда можно.
Не всегда наверное нужно.

Я так понимаю F# должен интегрироваться с C# ибо всё на одной платформе, так что штука по идее крутая для дотнетчиков, коим я уже давно не являюсь.

> Java говорила что она быстрее, удобнее и надёжнее, в итоге паттерны (а на практике чаще антипаттерны) создают настолько шизанутый код, что если бы он был тупо был написан в стиле чистого C - разобраться в нём было бы в разы легче

Джава создавалась для интернета вещей, затем сан убили, а оракл натянул сову на глобус, получили в итоге корпоративную джаву с фабриками фабрик порождений парсинга XML классов.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 14-Дек-21 18:09 
>Rust же до сих пор не вышел из состояния зародыша, НО УЖЕ покрылся ржавчиной (собственно правдивое название), причём язык даже не умудрился привнести вообще ничего нового. На C++ почти на всю функциональность Rust есть свои приёмы, можно без труда писать на C++ в стиле Rust и заиметь все те преимущества (не очень то и существенные) которые он даёт.

Мне нужно написать на расте что нибудь достаточно объемное чтобы как-то об этом судить. Давно собирался, да руки как-то не доходили. Изис Агора Лавкрафт вроде отзывалась положительно о расте, надо в общем самому посмотреть.

А вас случайно на OSDN Conf 2021 не было?


"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 29-Июл-21 22:57 
Углубляйся. Даже, можно сказать, погружайся! Смотри только, метаном не задохнись.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:00 
Метаном пованивает, когда возвращаюсь C/C++
После Раста весьма прискорбное занятие.

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 29-Июл-21 23:05 
Это ты просто не переоделся после погружений в раст.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:09 
Ты же понимаешь, что после Раста это и правда совершенно ниочемные языки?
Особенно пустой C, в C++ хотя бы стандартная либа более-менее что-то из себя представляет (впрочем, нетворка всё равно до сих пор нет)

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 29-Июл-21 23:14 
А можно больше конкретики? Что именно позволяет сделать раст такого, чего нельзя (причем эффективнее) сделать на плюсах?

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 29-Июл-21 23:26 
Вот интересно, ярый фанат раста уже полчаса ничего не отвечает на этот простой вопрос... Отчего бы?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:31 
Спать пошёл, не?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 20:42 
Мамка запугала, что за компутером поздно сидит

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 05:10 
Он ищет истину! Там где ее нет... заблудшие растоманы такие

"Выпуск языка программирования Rust 1.54"
Отправлено Anonnnym , 29-Июл-21 23:34 
> Что именно позволяет сделать раст такого, чего нельзя (причем эффективнее) сделать на плюсах?

Ну вот представь, понадобилось тебе выделить голой памяти через new. Не знаю зачем, просто понадобилось, и ты забыл потом вызвать delete - в плюсах ты получишь ворнинг, а в расте не получишь, потому что для выделения голых байтов, тебе придется нырнуть в unsafe.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:50 
Статический анализатор для unsafe кода написать не проблема.

Просто никому не надо, поскольку в расте это исключение, а в плюсах (особенно в старом коде) вокруг и рядом.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 08:51 
Если не знаете зачем понадобилась память, то и ошибки, вероятно, нет: это одна из стратегий работы с памятью. При завершении процесса она вернётся к системе. Ошибкой это будет в цикле, когда и сборщик мусора не всякий справится.

"Выпуск языка программирования Rust 1.54"
Отправлено ПомидорИзДолины , 30-Июл-21 00:04 
Растовские маркросы - это просто песня. После них в сторону темплейты, даже с концептами, смотреть вообще не хочется.

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 30-Июл-21 00:33 
Ну приведи же пример песни, что-нибудь такое, что заставит всех ахнуть от восхищения и навсегда забыть прочие богомерзкие ЯП! А то на поверку оказывается практически всегда, что растаманы просто не знают C++ и выдают теплое за мягкое )))))

"Выпуск языка программирования Rust 1.54"
Отправлено ПомидорИзДолины , 30-Июл-21 01:28 
А ты такой наивный, крошка.
Если интересно - сам найдешь.

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 30-Июл-21 01:47 
То есть блеснуть киллер-фичей не могём, понятно. Ладно, не расстраивайся, продолжай надувать щёки...

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:10 
Захочешь - сам найдешь. Не захочешь - тебе хоть двести фич под нос сунь, все равно плеваться будешь.

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 30-Июл-21 13:23 
Да ладно, слив уже засчитан.

"Выпуск языка программирования Rust 1.54"
Отправлено . , 31-Июл-21 23:41 
Ну как пример которым пользуются в любой кодовой базе на Rust (А фич у макросов намного больше) - derive макросы

Есть у тебя структура, поставил ей #[derive(Debug)] - и для неё реализован отладочный вывод в консоль (трейт Debug), то же самое с Clone, Copy, PartialEq, Eq, PartialOrd, Ord...

Такую же штуку могут реализовывать библиотеки (Это всё же макросы, а не чот встроенное и заточенное под стандартную библиотеку) - например serde имеет макросы Serialize/Deserialize, которые после добавления позволяют писать данную структуру как json/cbor/xml/bson/msgpack/... (в любой формат, для которого реализована библиотека с поддержкой serde, под protobuf правда такого нет, у него отдельный #[derive(Message)])


"Выпуск языка программирования Rust 1.54"
Отправлено freecoder , 30-Июл-21 22:57 
Например вот:


let value = json!({
    "code": 200,
    "success": true,
    "payload": {
        "features": [
            "serde",
            "json"
        ]
    }
});


"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 31-Июл-21 02:28 
Серьёзно? https://github.com/nlohmann/json

auto j2 = R"(
{
    "happy": true,
    "pi": 3.141
  }
)"_json;


"Выпуск языка программирования Rust 1.54"
Отправлено freecoder , 31-Июл-21 12:40 
> Серьёзно? https://github.com/nlohmann/json
>
auto j2 = R"( 
> {
>     "happy": true,
>     "pi": 3.141
>   }
> )"_json;

Ваш вариант - это просто строка. В случае же макросов в Rust можно DSL-синтаксис смешивать с выражениями Rust:


let full_name = "John Doe";
let age_last_year = 42;

let john = json!({
    "name": full_name,
    "age": age_last_year + 1,
    "phones": [
        format!("+44 {}", random_phone())
    ]
});



"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 31-Июл-21 17:16 
Ну тогда так, устроит?
 #include <iostream>
#include <nlohmann/json.hpp>
  
using json = nlohmann::json;
  
int main()
{
     // create JSON values
     json j_empty_init_list = json({});
     json j_object = { {"one", 1}, {"two", 2} };
     json j_array = {1, 2, 3, 4};
     json j_nested_object = { {"one", {1}}, {"two", {1, 2}} };
     json j_nested_array = { {{1}, "one"}, {{1, 2}, "two"} };
  
     // serialize the JSON value
     std::cout << j_empty_init_list << '\n';
     std::cout << j_object << '\n';
     std::cout << j_array << '\n';
     std::cout << j_nested_object << '\n';
     std::cout << j_nested_array << '\n';
}


"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 02-Авг-21 11:43 
> json j_object = { {"one", 1}, {"two", 2} };

Это в JSON будет {"one":1, "two":2} ?


"Выпуск языка программирования Rust 1.54"
Отправлено freecoder , 02-Авг-21 11:53 
> Ну тогда так, устроит?

Сравни теперь это с вариантом на Rust и поймешь, почему разработчикам больше нравятся его макросы.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 06:04 
Раст переносит гарантии смартпоинтеров в компайл тайм, убирая соответствующий рантайм-оверхед. Цена за это - когнитивная нагрузка, надо вникнуть в принципы, перестроить мышление, ну и временами уговаривать компилятор, чтобы он понял, что тут все окей (поскольку полный статический анализ сделать невозможно ввиду проблемы останова).

В остальном, конечно, разницы особо нет, больше вопрос предпочтений.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 06:15 
Кстати, в теории возможно реализовать аналог компайл-тайм модели Раста на плюсовых темплейтах, они, как-никак, Тьюринг-полные.

Это, конечном будет полный brainfuck, для компиляции которого понадобятся терабайт памяти и пара лет, но в теории :)


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 08:55 
> Раст переносит гарантии смартпоинтеров в компайл тайм, убирая соответствующий рантайм-оверхед.

А какой у современных компиляторов оверхед в unique_ptr<>?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 18:46 
У unique_ptr никакого, а вот у shared_ptr есть.

В Расте же compile time refcount.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 06:23 
serde.rs

"Выпуск языка программирования Rust 1.54"
Отправлено red75prime , 30-Июл-21 10:36 
> Что именно позволяет сделать раст такого, чего нельзя (причем эффективнее) сделать на плюсах?

Писать код без ошибок (инвалидация итераторов, exception unsafety, data races). А насчёт функциональности программ: что такого можно сделать в С++, чего нельзя (причём эффективнее) сделать на ассемблере?


"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 30-Июл-21 13:37 
> Писать код без ошибок

Что-то, судя по постоянным растопроблемам, нифига не получается )))) Детка, ни один ЯП не позволяет писать код без ошибок, серебряных пуль не бывает, тебя обманули.

> что такого можно сделать в С++, чего нельзя (причём эффективнее) сделать на ассемблере?

Естественно, все что можно сделать на C++, можно сделать на ассемблере. И все что можно сделать на ржавом, можно сделать на ассемблере. Как это влияет на сравнение плюсов с ржавым?


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 19:12 
> что такого можно сделать в С++, чего нельзя (причём
> эффективнее) сделать на ассемблере?

Вычисления во время трансляции. Из ассемблеров только fasm на это способен (я не смотрел остальные, просто угадываю).


"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 31-Июл-21 00:14 
Стоп, ты сейчас написал, что C++ не умеет в вычисления на этапе компиляции? Серьезно, я тебя правильно понял? То есть ты признался, что нифига не знаешь C++? Похоже, рассказы про тупость растаманов имеют под собой нехилую основу...

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 31-Июл-21 00:19 
Прошу прощения, неправильно понял мысль, дико извиняюсь.

"Выпуск языка программирования Rust 1.54"
Отправлено freecoder , 30-Июл-21 22:41 
Дело не в том, что Rust _позволяет_ сделать такого, чего нельзя на плюсах, а в том, что Rust _не позволяет_ делать, в сравнении с плюсами.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:38 
У C++ есть два плюса Boost и Qt, ну и сишные либы ему как родные

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 00:01 
Буст - весьма специфическая штука и нужна именно языку C++
В Расте заменяется стандартной либой и некоторыми крейтами
Интеграция с Qt есть

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 29-Июл-21 23:12 
А почему ты пишешь C/C++? Не видишь разницы? Еще один товарищ из криокамеры с томиком Ритчи 80-лохматого года издания?

"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 30-Июл-21 11:16 
Он как раз видит разницу и она не в пользу раст. Например, на раст невозможно реализовать даже вектор - придётся лезть в ансейф.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 00:01 
На Расте можно что угодно реализовать, а unsafe - часть Раста

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 00:03 
Потому что у C++ все те же болячки C и уши из 80-90ых
Да, C++ лучше, особенно для прикладного применения, но все новинки не избавляют его от древних болячек, увы
Они даже побоялись аби нарушить ради увеличения производительности

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 01:04 
Метан - он без вкуса и запаха.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 04:08 
Это он природный без запаха, а тут после интенсивной газификации малых водоёмов.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 09:37 
Путаете метан с сероводородом и аммиаком.

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 29-Июл-21 23:05 
А вообще, хочешь совет? Если хочешь реально посмотреть на программирование с новой стороны, попробуй Haskell. Очень интересная, хотя и временами мозговыносящая штука.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:21 
На Rust после C++ и Haskell мне было довольно приятно перейти. Теперь на нём фулл-тайм и пишу.

"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 30-Июл-21 11:18 
Ты забыл уточнить кое-что важное - пишешь хэлворды за бесплатно. Интересно, какой в этом смысл?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 21:09 
Себя проецируешь, себя и спрашивай ;)

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:26 
Брат жив?

"Выпуск языка программирования Rust 1.54"
Отправлено adolfus , 30-Июл-21 02:18 
Спецификация этого раста существует? Строгое описание синтаксиса, ситуации неопределенного поведения, особенности функционирование в среде, автономное функционирование? Срок поддержки текущих спецификаций какой? Вот все современные компиляторы языка С спокойно и без каких-либо проблем компилируют код, написанный в начале 80-х и содержащий кучу вызовов библиотечных функций, включая лонгджампы и сложный форматный ввод/вывод. Код не менялся около сорока лет и сегодня используется без какой-либо доработки в том виде, в котором использовался с самого начала.
Аналолгично и с C++ -- код, написанный в начале 90-х и компилировавшийся semantic C++ и topspeed C++ без проблем сегодня компилируется и собирается с помощью g++. Как обстоит дело с этим у раста? Ныне написанный код скомпилируется в 2035 году? Или нужно будет искать программиста, чтобы он апедйтил исходники от версии к версии этого раста?


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:40 
Даже видео на эту тему Страуструп запи ывал))) но вы ни понимаете это другое

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 10:08 
Правда? А чего для многих проектов указывают конкретные версии компиляторов?
Ибо на последних оно не соберется

"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 30-Июл-21 11:21 
Я тебе сектрет открою, там указывают _протестированные_ компиляторы и их версии.

"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 02-Авг-21 11:56 
Вообще-то если даже взять один и тот же компилятор Си (одной и той же версии) и попробовать собрать (и запустить) проект в других условиях (например, другая ОС), то уже вылезает тонна проблем. А если ещё и версию поменять, то ещё выползут. А если ещё и другой компилятор взять, то ещё выползут. Как минимум тупо разные UB создадут проблем. Я уж не говорю про такие мелочи, как -Werror делает тонну проектов не собираемых почти всегда (а без этого флага в коде копится ещё больше UB).

Но даже если забить на это, тут ещё проблема в том, что язык превращён в свалку (особенно последние С++).

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


"Выпуск языка программирования Rust 1.54"
Отправлено Совершенно другой аноним , 02-Авг-21 12:41 
> Вообще-то если даже взять один и тот же компилятор Си (одной и
> той же версии) и попробовать собрать (и запустить) проект в других
> условиях (например, другая ОС), то уже вылезает тонна проблем.

Э.. а они точно вылезут из-за компилятора, а не, например, наличия библиотек, или настроек, сделанных при сборке самого компилятора? У нас есть самодельная прошивка, которая собирается GCC разных версий, и при сборке под Linux пришлось только добавлять -fleading-underscore, т.к. в сборке GCC она по-умолчанию выставлена для Windows, а для Linux нет.

> А если ещё и версию поменять, то ещё выползут. А если ещё и
> другой компилятор взять, то ещё выползут.

Вы точно говорите про компилятор C?

> Как минимум тупо разные UB создадут проблем. Я уж не говорю про такие мелочи, как -Werror
> делает тонну проектов не собираемых почти всегда (а без этого флага
> в коде копится ещё больше UB).

И часто Вы встречаете эти UB? Имхо, про них обычно узнают, когда что-то падает, и в итоге выясняется - да, здесь программист положился на UB, а в другой аппаратной платформе/другом компиляторе оно работает (или не работает) по-другому.


"Выпуск языка программирования Rust 1.54"
Отправлено Брат Анон , 30-Июл-21 08:43 
Что только люди не сделают. Лишь нормальные языки не учить.Согласен переход с извращения на другое извращение -- несколько разнообразит боль.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 00:05 
А какие есть нормальные с производительностью уровня раста / c++?
И такие, чтоб популярные, а не ним или кристал

"Выпуск языка программирования Rust 1.54"
Отправлено Брат Анон , 01-Авг-21 08:39 
> А какие есть нормальные с производительностью уровня раста / c++?
> И такие, чтоб популярные, а не ним или кристал

При чём тут производительность? Если в С++ проблемы с текущей памятью, а в расте с концептуальной перегруженностью (и это только начало) -- как это поможет в написании надёжного софта?

Что ним, что кристалл -- одинаковые поделки любителей, попытка подражания мейнстриму.

Хочешь глоток свежего воздуха? Смотри в сторону Обероно-подобных языков. Например, MultiOberon. Если хочешь зашаливающей производительности -- посмотри на тесты варианта Оберона "Vostok". Там тебе и десктоп, и JVM, и ведроид. Ты сожешь попробовать Оберон прямо сейчас в песочнице браузера. Ссылки гуглятся на раз.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 11:06 
Обероны с GC  поэтому конкуренты не для раста а для Go и D.

"Выпуск языка программирования Rust 1.54"
Отправлено Брат Анон , 01-Авг-21 21:04 
> Обероны с GC  поэтому конкуренты не для раста а для Go
> и D.

Кто тебе такую чушь сказал? В 60% реализаций Оберонов нет никакого GC. Оберон успешно запускают (лично я, например), на STM32F4T6. Там памяти, простите за мой французский -- с гулькин нос. Какой там GC? именно в этом и сила Оберонов -- хочешь будет тебе GC, не хочешь -- не будет. Ещё обращу твоё внимание анон: в варианте "Vostok" Оберон откровенно нагибает С++ и заставляет нервничать Си. См. тесты в блогпосте от ComDiv. Ещё раз специально для тебя повторю: на Оберонах написан под десяток операционных систем. Сколько операционных систем написано на Расте, которые испольуются в боевых самолётах, типа "Еврофайтера"? Или сколько управляющих систем на Расте используется на Ростовской атомной станции? На подстанции 110 кВ (как в Калининграде)? Или при управлении БПЛА? Ты пишешь с умным видом глупости по теме, которой совершенно не знаешь.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 11:13 
> В 60% реализаций Оберонов нет никакого GC

Ссылку можно хоть на одну реализацию и чтобы там прямо говорилось что без GC. А то гугль наоборот больше подсовывает ссылки как оберон умеет в GC даже в ядерном коде.


"Выпуск языка программирования Rust 1.54"
Отправлено Брат Анон , 04-Авг-21 08:34 
> Ссылку можно хоть на одну реализацию и чтобы там прямо говорилось что
> без GC. А то гугль наоборот больше подсовывает ссылки как оберон
> умеет в GC даже в ядерном коде.

Достаточно на сайте Вирта почитать сообщение  о языке. Там ни слова нет о GC. Я тебе даже дам ссылку на русский перевод. Плохо ищешь.

https://github.com/Spirit-of-Oberon/ProjectOberon2013 -- виртовский Оберон, даже с эмулятором. Нет GC.

https://github.com/AntKrotov/oberon-07-compiler -- работает на ТРЁХ осях. Нет GC.

https://docs.google.com/document/d/14-KQD4UT0_Xd_s7kVHVKa6tx... -- перевод на русский язык, где GC даже не упоминается.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 04-Авг-21 13:33 
>виртовский Оберон, даже с эмулятором. Нет GC.

Есть GC https://github.com/Spirit-of-Oberon/ProjectOberon2013/blob/m...

>работает на ТРЁХ осях. Нет GC.

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

>перевод на русский язык, где GC даже не упоминается.

Тут http://www.projectoberon.com/ в pdfках много раз упоминается.


"Выпуск языка программирования Rust 1.54"
Отправлено Брат Анон , 05-Авг-21 09:02 
>>виртовский Оберон, даже с эмулятором. Нет GC.
> Есть GC https://github.com/Spirit-of-Oberon/ProjectOberon2013/blob/m...

Хм. Что-то новенькое. Когда последний раз смотрел -- не было. Как по мне -- даже хорошо.

>>работает на ТРЁХ осях. Нет GC.
> Тут да нет, но это не полноценная реализация оберона, код на него
> легко переносим не будет, сразу потечет. И из-за отсутствия GC нет
> одного из самых любых пропагандистами оберон фич - динамической модульности. Про
> компонентное программирование тоже можно сразу забыть.

Код будет перенесён легко. Три оси это доказывают. Динамической модульности нет, да.
Но это не функция языка -- это функция системы. Наоборот, чем меньше фич в ЯЗЫКЕ -- тем легче перенос. Компонентное программирование реализуется не через язык,а через среду. BBCB тебе в помощь.
Если ты внимательно прочитал описание -- там на нормальном буржуйском языке написано, что это не коммерческий вариант. Пацанчег его запили в одну харю. Попробую запили в одну харю Аду или ржавого. Ещё раз отдельно отмечу: существует ДВА ДЕСЯТКА реализаций Оберона одиночками. Переносимость у Оберона -- кратно выше, чем в Си. Зависимость от железа -- нулевая. Именно это главная фича Оберона, а не GC или динамическая модульность.

>>перевод на русский язык, где GC даже не упоминается.
> Тут http://www.projectoberon.com/ в pdfках много раз упоминается.

Нет. Нигде не упоминается обязательность GC. См. реализацию Оберона на основе виртовского от AIXP -- там всё также нет GC.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 06-Авг-21 11:11 
>Хм. Что-то новенькое. Когда последний раз смотрел -- не было. Как по мне -- даже хорошо.

Судя по пдфкам последний раз 8 лет назад обновленным, оно там всегда было.

>Код будет перенесён легко. Три оси это доказывают

Я про перенос кода с других реализаций оберона, а там GC и все на этой реализации тупо утекет.

>Попробую запили в одну харю Аду или ржавого.

В свое время в одиночку форт пилил, ничего сложного в пилении примитивных языков не вижу.

>Ещё раз отдельно отмечу: существует ДВА ДЕСЯТКА реализаций Оберона одиночками.

Фортов и лиспов еще больше было, часто плохо совместимых, похоже тут та же болезнь.

>Нет. Нигде не упоминается обязательность GC.

Это очень плохо. Теперь более понятна стала для меня непопулярность оберонов. Вообще как-то раньше ставил побаловаться xds oberon,  его умения оптимизации кода тогда впечатлили.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 03-Авг-21 08:55 
Если уж говорить о промышленных языках, на которых написано вот всякое такое, то это Ada.

А оберон это для узкого круга фанатов, он слишком уж вещь в себе.


"Выпуск языка программирования Rust 1.54"
Отправлено Брат Анон , 04-Авг-21 08:39 
> Если уж говорить о промышленных языках, на которых написано вот всякое такое,
> то это Ada.
> А оберон это для узкого круга фанатов, он слишком уж вещь в
> себе.

Нет. Ада это полукоммерческий продукт, который в ардуино ты не запихнёшь при всём желании.
Узкий круг фанатов Оберона, ещё раз для уяснения: фазированная антенная решётка основного боевого самолёта Евросоюза -- "Еврофайтер", швейцарский национальный центр управления дорожным движением. процессинговый центр "Дойчебанка", диспетчерский центр управления каскадом ГРЭС на Амазонке, подсистема резервирования телеметрии на Ростовской АЭС, управляющая программа БПЛА (в России, гуглится на раз), подсистема дорасчёта электрических параметров ПС 110 кВ "Восточная-1" Калининград, система диспетчерского управления перерабатывающих заводов в Орле(2 шт, Мираторг),символьная система расчёта проблемы дефекта массы нейтрино (объединённый центр ядерных исследований, Дубна), комплекс приборов для исследования эффекта люминисценции в биологических растворах (Новосибирск), основы преподавания программирования (клуб "Байтик", Троицк), кружок программирвоания для детей при Новосибирском государственном федеральном университете.

В каком месте это узкий круг фанатов? В каком месте тут хоть раз использована Ада? Пишешь то, о чём не имеешь ни малейшего понятия. Попробуй детям попреподавать Аду -- я на тебя посмотрю. Вот те самые детишки, что освоили Оберон -- будут программировать на нём ВСЁ, и уних не будет болеть голова от концепции владения раста (с его диким синтаксисом) и не думая о том, что такое адресная арифметика, как не поломать память, и всякие низкоуровневые вещи. Но при этом, при необходимости -- всего могут спуститься на аппаратный уровень. Один язык для всегда -- это технологическое преимущество перед всеми остальными, кто сначала учит Васик, потом Паскаль, потом С++, а когда приходят на работу -- оказывается надо было учить питон или пхп какой-нибудь. На Обероне -- для программирования железа даже ассемблер не нужен, как отдельная сущность. Собственно, как отдельной сущности -- ассемблера в Обероне и нет (в отличии от Си, который в ассемблере всё же нуждается -- в сущности, второй язык).


"Выпуск языка программирования Rust 1.54"
Отправлено Совершенно другой аноним , 05-Авг-21 10:16 
> На Обероне -- для программирования железа даже ассемблер не нужен, как
> отдельная сущность. Собственно, как отдельной сущности -- ассемблера в Обероне и
> нет (в отличии от Си, который в ассемблере всё же нуждается
> -- в сущности, второй язык).

Если не сложно изложите по-подробнее - как Вы без ассемблера сможете в регистре CR0 установить соответствующий бит для перехода в защищенный режим? или загрузить регистр GDTR таблицы GDT?


"Выпуск языка программирования Rust 1.54"
Отправлено Брат Анон , 06-Авг-21 09:03 
> Если не сложно изложите по-подробнее - как Вы без ассемблера сможете в
> регистре CR0 установить соответствующий бит для перехода в защищенный режим? или
> загрузить регистр GDTR таблицы GDT?

Оберон -- это ЯВУ. Ему плевать какие есть регистры в процессоре, потому что это уже не ЯВУ. А если таки руки чешутся добраться до железа (за что в Оберонах придётся мягко говоря серьёзно держать ответ перед тимлидом за такие выкрутасы) -- для этого во всех Оберонах есть псевдомодуль SYSTEM (который позволяет творить с железом что угодно и для безопасности -- импорт этого модуля легко детектируется анализатором исходников). SYSTEM (* если прям очень сильно хочется *) может содержать ассемблер, но в сущности -- он просто не нужен.  Манипуляцию с байтами в машинной памяти берёт на себя компилятор (у которого есть высокоуровневые сущности от железа, что существенно снижает вероятность косяков, но не даёт ложную уверенность программисту, что всё будет ништяк).


"Выпуск языка программирования Rust 1.54"
Отправлено Совершенно другой аноним , 06-Авг-21 10:13 
>> Если не сложно изложите по-подробнее - как Вы без ассемблера сможете в
>> регистре CR0 установить соответствующий бит для перехода в защищенный режим? или
>> загрузить регистр GDTR таблицы GDT?
> Оберон -- это ЯВУ. Ему плевать какие есть регистры в процессоре, потому
> что это уже не ЯВУ.

Ну, несмотря на то, что C до недавнего времени тоже был ЯВУ, и там для повседневной работы тоже не нужно было знать регистры, но мы вроде как про программирование железа - а там, как-раз эти регистры и есть, какие в процессоре, какие отображенные на память (иногда с хитрым поведением, когда для обнуления каких-то определённых бит надо именно эти биты записать в регистр, а иногда, которые просто обнуляются по факту чтения из данного регистра), а какие (в архитектуре 8086+) отображенные на специальное пространство ввода-вывода, к которому доступ идёт спец-командами (in/out).

> но в сущности -- он просто не нужен.  Манипуляцию с
> байтами в машинной памяти берёт на себя компилятор (у которого есть
> высокоуровневые сущности от железа, что существенно снижает вероятность косяков, но не
> даёт ложную уверенность программисту, что всё будет ништяк).

Всё-же не совсем понятно, как Вы можете не используя ассемблер, установить в регистре CR0, бит 0, чтобы перевести процессор в защищенный режим процессора. На память этот регистр не отображается. Ну или всякие взаимодействия с отладочными регистрами DR (мы-же вся так-же про программирование железа, в том числе и настроек самого процессора).


"Выпуск языка программирования Rust 1.54"
Отправлено Брат Анон , 09-Авг-21 08:55 
> Ну, несмотря на то, что C до недавнего времени тоже был ЯВУ,...

Си никогда не был ЯВУ.

> и там для повседневной работы тоже не нужно было знать регистры,

Поэтому Си не ЯВУ.

> Всё-же не совсем понятно, как Вы можете не используя ассемблер, установить в
> регистре CR0, бит 0, чтобы перевести процессор в защищенный режим процессора.

Откройте для себя машинные команды.



"Выпуск языка программирования Rust 1.54"
Отправлено Совершенно другой аноним , 09-Авг-21 09:20 
>> Ну, несмотря на то, что C до недавнего времени тоже был ЯВУ,...
> Си никогда не был ЯВУ.

гм.. вообще-то был, до того, как пошли C++/Java.

>> и там для повседневной работы тоже не нужно было знать регистры,
> Поэтому Си не ЯВУ.

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

Как Вы из этого вывели, что C не ЯВУ? или под ЯВУ Вы понимаете что-то другое?

>> Всё-же не совсем понятно, как Вы можете не используя ассемблер, установить в
>> регистре CR0, бит 0, чтобы перевести процессор в защищенный режим процессора.
> Откройте для себя машинные команды.

какие-такие машинные команды, и как можно вписать в программу на Обероне? или как в старых ассемблерах, которые не поддерживали некоторые новые команды лепили что-то типа:

        db 0eah
        dw 0
        dw entry


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 14:53 
За него уже деньги платят? Трудяг реальных для интересных и стабильных работ ищут?

"Выпуск языка программирования Rust 1.54"
Отправлено Anonnnym , 29-Июл-21 23:13 
> управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора

lockfree без GC, или при чем тут упоминание параллелизма?


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 00:27 
Есть там GC, сказки растоманов про некую магию избавлющую от всех проблем это полная туфта

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 01:51 
Приведите ссылку на строку(и) кода, благо Rust на Github есть, показывающего что в расте есть GC. Очень интересно посмотреть. Под GC имеется в виду именно runtime\времени исполнения.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:57 
Магия?

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 03:08 
> Магия?

Да: https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:24 
Ахахаха вот это да сильно... выдавать за ноухау подобие умных указателей C++ !!! Это фиаско братан

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:57 
На плюсах с умными указателями и RAII в смысле управления памятью и получится примерно Rust.
Принципиальных отличий два (и они тесно взаимосвязаны). Первое - это (почти) нулевой оверхед, поскольку проверки в Расте делаются в компайл-тайм (да, в это сложно поверить, видя впервые, надо вникать :). Второе - невозможность нарушения RAII заложена в дизайн языка, просто не скомпилируется.

"Выпуск языка программирования Rust 1.54"
Отправлено Sem , 30-Июл-21 18:28 
Поздравляю с разморозкой.
Лучше бы доку по расту почитал, чем время тратить на такие комментарии.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:24 
По секрету... чисто между нами... умные указатели это тоже разновидность GC...прикинь да...

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 08:09 
Cемейство: Box, Rc, Arc, Cell и т.д. можно отнести к умным указателям, имеющим runtime overhead. Я уже говорил что говоря о GC имеется именно runtime а не механизм чистки. В основном, всё держится на механизме владения, и там никакого overhead-а нету, + ZST https://doc.rust-lang.org/nomicon/vec-zsts.html (о таком раньше вообще не слышал, если кто знает - дайте ссылку, интересно). Если что-то надо подчистить раньше чем это сделает компилятор - есть функция `drop`.

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 09:11 
> + ZST https://doc.rust-lang.org/nomicon/vec-zsts.html
> (о таком раньше вообще не слышал, если кто знает - дайте
> ссылку, интересно).

А для чего нужны эти типы нулевого размера? Какую задачу решают?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 10:11 
Задач несколько, самая простая - это типизация без оберток.
Почитать можно тут
https://www.hardmo.de/article/2021-03-14-zst-proof-types.md#...
https://ferrous-systems.com/blog/zero-sized-references/#diff...

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 12:13 
> Задач несколько, самая простая - это типизация без оберток.
> Почитать можно тут
> https://www.hardmo.de/article/2021-03-14-zst-proof-types.md#...
> https://ferrous-systems.com/blog/zero-sized-references/#diff...

Спасибо, во втором случае увидел практический смысл.

В примере имеется два блока памяти, из которых выделяются элементы. Тут есть нюансы:
1. Информация о принадлежности элемента конкретному блоку содержится в адресе элемента.
2. Для задачи "вернуть элемент куда следует" явная обработка вышеуказанной информации не является необходимой.
3. Информация доступна во время исполнения. ZST (по определению) такое не обеспечивает. Насколько понимаю, инстанциируется (я слышал, что темплейты в С++ это жесть, но они это позволяют без ZST) два экземпляра деалокатора.

Наверное, я что-то упустил?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 13:38 
Если честно, то я с ZST знаком теоретически, на практике в моих задачах они просто не были нужны. Но насколько я понимаю вся фишка что проверки типов идут на этапе компиляции, а не в рантайме и в момент компиляции подставится нужный вызов. Ну или просто не скомпилируется.
Так что сори что не смог ответить на вопросы. Нужно спросить кого-то более знающего.

Еще можно глянуть пример PhantomData как частный вариант ZST.
https://doc.rust-lang.org/stable/core/marker/struct.PhantomD...


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 14:41 
> Еще можно глянуть пример PhantomData как частный вариант ZST.
> https://doc.rust-lang.org/stable/core/marker/struct.PhantomD...

Я бы дал ссылку на
https://doc.rust-lang.org/nomicon/phantom-data.html

> PhantomData consumes no space, but simulates a field of the given type for the purpose of static analysis. This was deemed to be less error-prone than explicitly telling the type-system the kind of variance that you want, while also providing other useful things such as the information needed by drop check.

там и пример для ZST более лаконичен и поняте не-рустовцам
https://doc.rust-lang.org/nomicon/exotic-sizes.html
> On their own, Zero Sized Types (ZSTs) are, for obvious reasons, pretty useless.

...
> One of the most extreme examples of this is Sets and Maps. Given a Map<Key, Value>, it is common to implement a Set<Key> as just a thin wrapper around Map<Key, UselessJunk>. In many languages, this would necessitate allocating space for UselessJunk and doing work to store and load UselessJunk only to discard it. Proving this unnecessary would be a difficult analysis for the compiler.
> However in Rust, we can just say that Set<Key> = Map<Key, ()>. Now Rust statically knows that every load and store is useless, and no allocation has any size. The result is that the monomorphized code is basically a custom implementation of a HashSet with none of the overhead that HashMap would have to support values.


"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 31-Июл-21 10:28 
> А для чего нужны эти типы нулевого размера? Какую задачу решают?

Rust ими активно пользуется в стандартной библиотеке, но в эту сторону я не сильно копал. Задача, на сколько я знаю, это Zero Cost Abstraction, примеры привели выше.

Самое большое впечатление составил этот проект: https://github.com/Rahix/avr-hal , это, грубо говоря, библиотека <Arduino> для Rust. Если посмотреть исходники, становится понятно то как используются ZST. По сути, ZST позволяют управлять потоком исполнения так, как и в случае если у тебя есть объект с данными, т.е. ты можешь обращаться к сущности, задавать или спрашивать некие свойства, хотя, под капотом, сама сущность не хранит никакой информации и её можно было бы заменить на 100500 #define\#if\#ifdef. Это как модуль или область видимости, но в виде объекта и со свойствами объекта. Короче, самое крутое, доведённое до предела использование ZST я, пока что, видел только в avr-hal (за счёт того что для embedded каждый байт на счету).

https://doc.rust-lang.org/stable/embedded-book/static-guaran... не помню где я видел класное описание того как в avr-hal пины\периферия в виде ZST создаются. Там, вроде как, смежный проект для cortex (вместо atmel), книгу написал как ZST можен это обиграть. Может где в issues есть ссылка, я просто, интерес к проэкту на время потерял, не хочу сейчас в нём копаться.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 09:06 
Умные указатели это разновидность автоматического управления памятью, как и сборка мусора. Путаница возникает, поскольку и там и там есть варианты с подсчётом ссылок.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 08:14 
То есть по твоему получается что C++ это тоже язык с GC? Ведь разницы у него с растом по подержке умных кказателей практически нет.

"Выпуск языка программирования Rust 1.54"
Отправлено Anonnnym , 30-Июл-21 15:06 
>> управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора
> lockfree без GC, или при чем тут упоминание параллелизма?

Судя по дискуссии, меня не совсем правильно поняли. Я не говорил о GC таком как в Java, C# или D, который прибирает за пользователем всю выделенную память. Я говорил о GC для lockfree структур.

Изначально процитированная часть (не полная) говорит о том, что в rast высокая скорость выполнения параллельных заданий достигается без использования GC и runtime. Тут я предположил 2 вещи о которых может вестись речь: выделение/освобождение памяти и lockfree структуры. Для первого сообщение в новости исключает кастомные аллокаторы, а без них мы не можем выделить памяти без блокировок, так как ходим в ядро. По этому я и спросил только про lockfree, т.к. мне не совсем понятно как можно организовать lockfree-структуру без сборщика мусора.

На пример возьмем односвязный список с 2мя полями - value и next, где next - указатель на следующий элемент, а value - значение, которое нам в примере неинтересно.

Для добавления элемента в список нам нужно создать его - записав значение и nullptr в next, после чего указатель на наш элемент надо добавить в конец списка, для этого через CAS сравниваем и заменяем nullptr поля next последнего элемента списка на указатель на наш новый элемент. Т.к. пока мы искали последний элемент списка он мог перестать быть последним, данная операция выполняется в бесконечном цикле.

Для удаления можно попробовать поступить так же, но если мы после удаления элемента из списка (замена указателя на него nullptr), удалим сам элемент (вызовем delete), то мы можем уронить приложение обращением к освобожденной памяти, из-за того, что другой поток обратился к элементу перед удалением, а прочитал поле из него уже после удаления.

По этому для удаления элементов нужен сборщик мусора, который когда-нибудь таки дернит блокировку и по удаляет элементы (вызовет delete).


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 30-Июл-21 20:25 
О "безопасном" параллелизме в раст пишут только по одной причине. О подмножестве состояний гонки - гонки по данным. "когда разные потоки обращаются к одной ячейке памяти без какой-либо синхронизации и как минимум один из потоков осуществляет запись."

Такое в раст запрещено правилами владения/заимствования и не скомпилируется. Остальные гонки (логические) конечно приведут к дедлокам.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 31-Июл-21 09:17 
> О "безопасном" параллелизме в раст пишут только по одной причине. О подмножестве
> состояний гонки - гонки по данным. "когда разные потоки обращаются к
> одной ячейке памяти без какой-либо синхронизации и как минимум один из
> потоков осуществляет запись."

Если один _писатель_, то где там гонка? Запись одной ячейки атомарна. Скорее всего, вместо записи имелась ввиду модификация.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:20 
Неужели нельзя сделать не столь адовый синтаксис? Такое чувство что это C++ под веществами

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:25 
Нормальный синтаксис, просто для некоторых незнакомый и непривычный, потому что нет опыта с ML-языками например.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:30 
Нормальный? В каком месте? Это же кому то взбрело в голову скрестить ML-языки в которых шарит 3,5 анонимуса и ООП вроде C++/Java/C# которое знают процентов 90... от чего получился Rust который могут понимать все теже 3,5 анонисуса

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 00:45 
> ML-языки в которых шарит 3,5 анонимуса

То что вы не шарите, не означает, что шарит мало людей.

> и ООП

И в чём тут проблема? ООП родной подход для функциональных языков.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:31 
Аудитория OCaml, F#, Haskell, Lisp как бы намикает на популярность и понятность ФП

Особняком стоит Erlang который также непонятен но кое где взлетел


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 04:46 
>Аудитория OCaml, F#, Haskell, Lisp как бы намикает на популярность и понятность ФП

Вы забыли Javascript и Python.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 20:21 
JS в котором любой базовый тип это обьект? Хммм не знал что в ФП все обьект и наследование есть через прототипы, хотя это уже неактуально в новом JS наследование правильное

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:00 
С чего вы вдруг взяли что в Rust есть ООП? ООП держится на 3х китах: инкапсуляция, наследование, полиморфизм. Можете начать пояснять начиная с наследования.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:33 
Ключевое слово "Скрестить" ФП и ООП... понятное дело что нормальным ООП там и не пахнет

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:44 
Т.е. ваше экспертное мнение таково, что LINQ для C# как и сам С# не состоятелет в силу того что используются 2 таких несовместимых подхода как ФП и ООП?

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:52 
C# изначально спроектирован как ООП язык, различные фичи добавлялись походу, так что дефолтная концепция не пострадала

Скажи еще что у Java плохое ООП из за того что туда добавили лямбды


"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 03:04 
RTFM: https://doc.rust-lang.org/book/ch17-00-oop.html

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:22 
Наследования нет))) лол

Тупо почти структуры...


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 12:14 
А чего вы его здесь минусуете? Ну, ведь, действительно же в Rust нет нормального наследования.

"Выпуск языка программирования Rust 1.54"
Отправлено adolfus , 30-Июл-21 02:38 
Не три кита, а гораздо больше, причем главный из них -- это обмен сообщениями между объектами, чтобы передавать информацию, а не вызовы "методов". Кстати, в C++ вообще нет методов, только функции-члены классов.

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:49 
> Не три кита, а гораздо больше

Нить рассуждений потеряна. Я выступил с критикой сравнения стуктур в Rust с ООП, в то время как вы.. не знаю о чём говорите.



"Выпуск языка программирования Rust 1.54"
Отправлено adolfus , 31-Июл-21 15:32 
>> Не три кита, а гораздо больше
> Нить рассуждений потеряна. Я выступил с критикой сравнения стуктур в Rust с
> ООП, в то время как вы.. не знаю о чём говорите.

О том, что "три кита" инкапсуляция, наследование, полиморфизм для ООП вторичны, а первичен обмен сообщениями. Эти три кита появились в дискурсе потому, что не смогли в сообщения.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 04:05 
>инкапсуляция, наследование, полиморфиз

Никакого отношения к ООП не имеет.
Это система типов страуструпа.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 04:30 
Бредишь истинным ООП Алана Кея на клеточном уровне? Лол конечно, но это лютые тормоза... для примера можешь написать программу где каждая функция будет отдельным процессом и любой чих будет вызывать ОС для передачи сообщений через пайпы

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:36 
Концепция не имеет никакого отношения к вопросам производительности. Концепция - одно, реализация - другое.

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

А вот полиморфизм обязателен - это просто другая формулировка принципа контрактов. А без виртуальных функций с соответствующим оверхедом никакого полиморфизма не будет, так что всегда в общем случае будет dispatch table. Называть это вызовом метода или обменом сообщениями - вопрос терминологии, суть та же. Принимать «неизвестные сообщения» (скажем, в специальный метод, как в Ruby), или не давать такое скомпилировать - вопрос дизайна языка, добавить или убрать случай «not found in dispatch table» можно всегда».

Инкапсуляция тоже обязательна, но она может быть и неявно выражена в языке.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 07:48 
Действительно я то думал, че смолтолк так взлетел с его передачей сообщений! Прям да, тормоз был всех времен и народов

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:26 
На трёх китах держится плоская земля. А для ООП достаточно понятия контракта и объекта как чёрного ящика, поддерживающего контракты.

Способ реализации в плюсах, позаимствованный из Симулы - это лишь способ реализации. Читайте Алана Кея, короче.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 08:01 
ООП Кея больше подходит для сетей, в чем и нашло себя в виде микросервисов.... но в программе ООП по Кею не канает

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:12 
Если воспринимать буквально, то не канает.

А если немного переформулировать, и добавить типизации (что намного чаще полезно, чем вредно), то получается:

1. Есть контракты, описывающие по сути сигнатуры методов,
2. Есть объекты, которые снаружи "черные ящики", о которых известно, что они поддерживают определенные контракты,
3. Нет привязки к конкретным объектам, есть привязка к контрактам.

Тогда внезапно получается, что:
1. Инксапсуляция нужна ("черный ящик", во внутренности которого не лезем),
2. Полиморфизм нужен (привязка к контрактам, конкретный объект не важен),
3. А вот наследование вообще мимо. И, действительно, наследование всегда заменяется композицией, и зачастую в языках, где есть наследование, композиция предпочтительнее (см. composite reuse principle).

При этом и Rust, и Go получаются вполне себе ООП.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:18 
Другими словами, представь себе, что в С++ ты можешь наследоваться только от pure abstract классов. После чего, чтобы не городить кучу микрообъектов и ручное делегирование, добавим трейты как в Scala.

Что-то принципиально изменилось? Да ничего.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 09:12 
> Нормальный синтаксис, просто для некоторых незнакомый и непривычный, потому что нет опыта
> с ML-языками например.

Это не синтаксис. Когда вместо return пишется просто значение - в случае ML это семантика. Получается, что Rust исходно функциональный с императивными возможностями. Отсюда все споры и отторжение его как "замены Си".


"Выпуск языка программирования Rust 1.54"
Отправлено Rev , 30-Июл-21 00:33 
Адовый синтаксис только если использовать дженерики и указание времён жизни. Но есть секрет - можно их не использовать :-D

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:03 
А ещё можно разобраться в том как это всё работает, говорят помогает. + относительно новые версии раста много чего уже делают сами (вроде как в 1.28+ много сахара добавили)

"Выпуск языка программирования Rust 1.54"
Отправлено topin89 , 30-Июл-21 01:58 
Из всех языков на выбор, ты выбрал C++ для сравнения? C++?

С его шаблонами шаблонов шаблонов, где чёрт ногу сломит понять, как и что устроено, если писал не ты? И они при этом _не могут_ полностью заменить макросы для такой банальной вещи, как определить, под какую ОС компилируем.

Язык, в котором в try catch можно упихнуть всю функцию, примерно так:

void func() try {} catch(...) {}

Язык, в котором для проброса rvalue-ссылок нужно городить огород из шаблонов и std::forward? Вместе с самими rvalue/lvalue ссылками.

Язык, в котором до недавней редакции простая конкатенация векторов превращалась в квест с двумя begin'ами и одни end'ом?

Вместе с тем в новой редакции появились концепты с ещё одним новым, интересным синтаксисом?

Да по библиотекам, unique_ptr должен был быть очень простой, очень эффективной обёрткой над обычным указателем, с буквально нулевым оверхедом. Гугловцы выяснили, что оверхед дам огого, и без поломки совместимости это не исправить.

По самыми медленными регулярками в одном из самых быстрых языков только ленивый не прошёлся.

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

Rust -- это C++ без веществ, а не наоборот. Не уверен, помогут ли эпохи остаться таковым, но очень надеюсь.

Чего мне не хватает в нём -- это пользовательские литералы, типа 10ms вместо Duration::from_millis(10). Было предложение, но что-то заглохло.


"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:22 
Если постараться, на Rust можно написать код который будет куда хуже того что вы привели. Много кто из новичков жалуется не неочевидность trait-ов. Библиотеки, в том числе стандартная, имеет тенденцию раскрывать потенциал структур через trait-ы, например используя `std::fs::File` нужно ещё `std::io::{Read, Write}` подключить. Обращу ваше внимание что они даже не в одном модуле находятся. И эта же ситуация возникает повсеместно во всех crate-ах, это уложняет понимание библитек без хорошой документации. В целом, ко всему есть доступ, но путаница всё равно возникает.

Ещё можно критиковать Rust за сырость и относительно частые deprecation. На С++ можно использовать последнюю версию GCC\Clang и просто ставить `std=c++11` или какую либо ещё версию, обновляется ли rustc\cargo если ставишь override на старую версию не знаю. Тот же С++ с нами уже очень давно, много проблем уже обросли костылями.


"Выпуск языка программирования Rust 1.54"
Отправлено Ordu , 30-Июл-21 13:25 
> Обращу ваше внимание что они даже не в одном модуле находятся.

В генерируемой документации есть ссылки на все трейты типа. Ты можешь вниз прокрутить, или в боковой панели посмотреть. И им не надо находиться здесь: что такое трейт Read, Write, я знаю и так. Когда используешь крейт постоянно (например std) все основные трейты его знаешь, иногда реализуешь их не консультируясь с документацией на тему того, как там в точности выглядит декларация методов. В std таких грядка -- Read, Write, Iterator, PartialEq, PartialOrd ... Их запоминаешь со временем примерно так же, как в C++ запоминаешь как перегружать те или иные операторы, и пишешь заголовок int operator+(чётотам) не консультируясь с документацией.

> это уложняет понимание библитек без хорошой документации.

Да. Но без документации разобраться сложно с библитекой на любом языке. В расте же есть гарантия документации -- может быть плохой документации, если разработчик не озаботился, но по-крайней мере иерархический html, с модулями, типами, с трейтами типов, и всякой прочей информацией ты получишь. Этим может заниматься IDE, наверное, выводя всю информацию о типах, но я пользуюсь сгенерённой документацией. Потому как не нашёл способ сделать всё это удобно в emacs -- всплывающие кстати и некстати подсказки я пробовал, мне они мешают. Может можно сделать, чтобы отдельная панель была для отображения структурированной информации, но emacs не дружит с мышью, её поддержка сделана через привычное для emacs'а место костылями, поэтому я предпочитаю браузер.

> Библиотеки, в том числе стандартная, имеет тенденцию раскрывать потенциал структур через trait-ы, например используя `std::fs::File` нужно ещё `std::io::{Read, Write}` подключить.

Да, это раздражает иногда. В качестве обходного манёвра библиотеки часто предоставляют модуль prelude, который можно импортировать все трейты сразу. Хотя я предпочитаю без этого: когда вручную импортируешь трейт за трейтом, особенно из новой для себя библиотеки, лучше понимаешь происходящее. Потом, когда происходящее стало понятно, можно и prelude импортировать.

> На С++ можно использовать последнюю версию GCC\Clang и просто ставить `std=c++11` или какую либо ещё версию, обновляется ли rustc\cargo если ставишь override на старую версию не знаю.

В расте есть эдишны. Edition 2015, Edition 2018, и тут на подходе Edition 2021. Ты можешь использовать распоследний компилятор с любым эдишном.


"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 31-Июл-21 11:01 
Не знаю, может меня не так поняли, я Rust пользуюсь, относительно, давно. Критика была не вида "в Rust нету .." а, скорее, "хотелось бы чтобы было ..". Я понимаю, что к Rust можно привыкнуть, или, как минимум, попытаться. Да и то что я им пользуюсь никак не умоляет факт наличия косяков, ну прям совсем.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:39 
Ключевое слово "Синтаксис" C++, а не детали реализации его стандартной либы или грязных костылей во имя совсестимости...

А Rust чисто синтаксис адовее C++ и это без всяких требований обратной совместимости не только с C98 но и с C89...

Казалось бы делайте с чистого листа, вы не обременены различными комитетами но все как всегда


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:19 
*C++98

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 30-Июл-21 11:36 
Серьезно, прочитайте уже https://habr.com/ru/post/532660/ а то опять про синтаксис, когда не в нем проблема. А в новых фичах, которых нет в С++ - отсюда сложность.

"Выпуск языка программирования Rust 1.54"
Отправлено Ordu , 30-Июл-21 14:00 
Хорошая ссылка. Но мне кажется не поможет. Люди лезущие на баррикады из-за синтаксиса -- это безмозглые фанатики с мозгами отутюженными идеологией. Им бесполезно что-то объяснять.

Когда люди лезут на баррикады с горящими факелами потому, что растовый борроу-чекер им не позволяет что-то сделать -- это можно понять. Человеку приходится переучиваться и находить новые для себя способы выразить свою программерскую мысль, и когда борроу-чекер непонятен, им непонятно зачем всё это, и естественно это вызывает раздражение. И в этих случах, как показывает практика, помогают подробные объяснения того, почему борроу-чекер в данном случае ругается, каких ошибок это позволяет избежать, и как можно сделать, чтобы он не ругался. Это помогает даже в тех случаях, когда в данном конкретном случае борроу-чекер не прав, когда он слишком туп, чтобы понять безопасность кода.

Но когда претензии к синтаксису -- это всё, сливай воду.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 14:52 
Ты ссылку на хабр кинь пацанам из Microsoft, а то они не знали как нужно  и значит сделали C# с одним из самых чистых и читаемых синтаксисов в статически типизированных языках

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 15:56 
Как-то по последним версиям шарпа не видно что это "одним из самых чистых и читаемых синтаксисов в статически типизированных языках" там уже навортили почти как в C++. Хотя у ms есть такой чистый и очень читабельный язык - это F#.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 30-Июл-21 20:29 
А как же сборщик мусора в виртуальной машине? Это сильно упрощает многое по синтаксису кмк.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 01-Авг-21 03:41 
Даже если вручную удалять обьекты в C# синтаксис читается сразу, а не после пару банок темного нефильтрованного

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 30-Июл-21 16:48 
> И они при этом _не могут_ полностью заменить макросы для такой банальной вещи, как определить, под какую ОС компилируем

Ты правда настаиваешь, что

#[cfg(target_os = "macos")]
fn macos_only() {
  // ...
}

чем-то принципиально лучше чем
#ifdef __linux__
void linux_only() {
}
#endif
?
Как по мне, те же шарики, вид сбоку. Как минимум, в сишном варианте писать меньше: можно в один блок насовать много платформоспецифичного.

> Язык, в котором в try catch можно упихнуть всю функцию, примерно так: void func() try {} catch(...) {}

Да просто как жить-то теперь?

> Язык, в котором для проброса rvalue-ссылок нужно городить огород из шаблонов и std::forward? Вместе с самими rvalue/lvalue ссылками.

о, ты слышал про std::forward, молодец. а про std::move слышал?

> Да по библиотекам, unique_ptr должен был быть очень простой, очень эффективной обёрткой над обычным указателем

Он такой и есть ))

> Вместе с тем в новой редакции появились концепты с ещё одним новым, интересным синтаксисом?

Появились, и что? Полезная штука.

template<int N>
concept power_of_two = (N & (N-1)) == 0;

template<int N = 256>
auto fft(/*...*/) requires power_of_two<N> {
    cout << "Doing fast Fourier transform by " << N << " samples." << endl;
    //...
}

проделай такое на ржавом, пример в студию.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 08:36 
Зря спорите, по хитровыкрученным конструкциям оба хороши.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 02-Авг-21 13:44 
>проделай на расте

Я не тот чел, но вот константная функция которая вычисляется во время компиляции.

const fn power_of_two(n: u32) -> u32 {
    if n & (n-1) != 0 { panic!("oops"); }
    return n;
}


"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 04-Авг-21 00:22 
Нет, мне не нужно, чтобы функция вычислялась в компайл-тайме, мне нужно, чтобы компилятор проверил, что шаблон параметризуется не абы каким целым N, а степенью двойки. А работать функция должна в рантайме, выполняя N-точечное БПФ на данных, скажем, читаемых из файла.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 05-Авг-21 20:42 
Пока не запилили в языке, вот таким макросом можно:

macro_rules! const_assert {
    ($x:expr $(,)?) => {
        const _: [(); 0 - !{ const ASSERT: bool = $x; ASSERT } as usize] = [];
    };
}

Это ассерт статических значений - стадии компиляции. (Из крейта static_assertions)

"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 05-Авг-21 23:33 
Мои глаза.... Ты должен мне глаза!

"Выпуск языка программирования Rust 1.54"
Отправлено Ф1 , 06-Авг-21 13:58 
> Мои глаза.... Ты должен мне глаза!

Как художник художнику, у нас C++ программистов в этих глазах такое бревно, что должно быть стыдно такое про раст писать.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 07-Авг-21 11:17 
Чем-то отличается от устаревшего?

#define STATIC_ASSERT(COND,MSG) typedef char static_assertion_##MSG[(COND)?1:-1]


"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 07-Авг-21 14:45 
Серьезно? Смотри, static_assert в C++:

template<int N = 256>
auto fft(/*...*/) {
    static_assert((N & (N-1)) == 0, "Assert message");
    cout << "Doing fast Fourier transform by " << N << " samples." << endl;
    // ...
}


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 07-Авг-21 17:49 
> Серьезно? Смотри, static_assert в C++:
>
template<int N = 256> 
> auto fft(/*...*/) {
>     static_assert((N & (N-1)) == 0, "Assert message");


"Серьезно? Смотри, жопа!"
Он привел _реализацию_ static_assert на мкаросах (а не вызов
const_assert!(std::mem::size_of::<String>() == 24);)

ты - просто вызов (реализованной где-то в недрах компилятора).


"Выпуск языка программирования Rust 1.54"
Отправлено Кир , 09-Авг-21 02:30 
Ты не поверишь, какой магии можно накрутить в C++, но разве этим стоит хвастаться? По-моему, реализованный в компиляторе static_assert в миллион раз лучше всяких коловерчений на расте, не говоря уж про концепты. Именно эту мысль и хотелось подчеркнуть )

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:23 
Какой язык выбрать новичку для изучения, чтобы потом грести бабло лопатой? rust, haskell, js, vlang, crystal, zig, java? Как я понимаю большие деньги можно заработать в кровавом энтерпрайзе, а они любят джавку, поэтому выбирать и не приходится. Только java?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:26 
Выбирать лучше предметную область, а не язык.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:32 
Бред сказал... тип ну например он выбрал веб и тут... бац!!!
PHP
Python
Ruby
Бац
Java
C#
Бац бац
Go


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 29-Июл-21 23:34 
> Бред сказал... тип ну например он выбрал веб и тут... бац!!!

Javascript.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:34 
Typescript
Бац бац

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 29-Июл-21 23:35 
Вжух! И в продакшен!

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 12:15 
Вжух и в продакшен - это Electron.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:42 
Веб - слишком широкое понятие. Там например есть и фронт, и бэк. Поэтому странно просто выбрать "веб". Это как выбрать "прикладное программирование". Лучше чем ничего, потому что отсекает какое-то множество языков, но всё ещё недостаточно специализировано, чтобы остановиться на паре.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:44 
А это уже абстракция реального мира за который так критикуют ООП они могут быть сколь угодно вложенными друг в друга, совсем другое дело манямирки зумеров у них все просто и понятно... ровно до того момента написания кода

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 29-Июл-21 23:33 
> Какой язык выбрать новичку для изучения, чтобы потом грести бабло лопатой?

Русский, английский. Язык бизнес отношений и социальных связей.

>rust, haskell, js, vlang, crystal, zig, java?

Точно не поможет.

> Как я понимаю большие деньги
> можно заработать в кровавом энтерпрайзе

Нельзя.

Какие-то особые доходы есть сейчас у "блокчейн девелоперов", криптография вот это всё.
И, чуть поскромнее в машинном обучении и ИИ.
Попробуйте поучиться контракты для эфира писать.

Когда заработаете много денег отпишитесь, дам кошелёк для доната.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 00:15 
У нас только в банковском ИТ секторе водятся деньги, а там Java и C#

Все остальное это или 30-50 тыщ на госконторах или кукишь в статапах из сколково


"Выпуск языка программирования Rust 1.54"
Отправлено RomanCh , 30-Июл-21 10:08 
А "у нас" это где? Учитывая что сейчас можно удалённо работать примерно где угодно и деньги там отличаются на порядок. И это вовсе не говномешалки блокчейна или стартупы с "гибким графиком" на котором вас будут гнуть во все стороны в любое время дня и ночи.

Да и по ЯП особо плотного зажима в отрасли вроде как нет. Нормальным спецам платят везде.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 18:01 
В рфии на полную ставку официально, а так да аутсорс интернационален... но ипотеку под него не возьмешь((( таки дела

"Выпуск языка программирования Rust 1.54"
Отправлено RomanCh , 30-Июл-21 21:10 
> В рфии на полную ставку официально, а так да аутсорс интернационален... но

Вы что, эникей что-ли? Сейчас на удалёнку берут в обычные организации где стандартное 5/2 и раньше все ходили в офис, но теперь то же самое из дома. Сам в такой работаю, у нас уже пол отдела в офисе ни разу не было и контора на несколько сот человек приросла с начала ковида. Понятное дело что там полный соцпакет и т.д. И таких контор на рынке вообще-то не одна и не две, а чуть более чем дофига и кадровый дефицит серьёзный.

> ипотеку под него не возьмешь((( таки дела

Мне тут недавно банк где зарплатный проект ипотеку на 25 млн. предлагал. Такие дела.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 21:18 
Если вбелую через ИП работать, и ИП больше, чем пара лет - никаких проблем нет.

"Выпуск языка программирования Rust 1.54"
Отправлено mma , 31-Июл-21 06:52 
>У нас только в банковском ИТ секторе водятся деньги, а там Java и C#

Может у вас местные "царьки" бизнеса до сих пор живут по принципу рабовладельцев рассуждая "зачем босоте платить больше если все равно ни куда не денутся", но как мне кажется таких уже давно накрыл кадровый голод. Последних несколько лет толковый бизнес всех кто хочет, умеет и самое главное может у таких увел. Сейчас бьются между собой подымая планки годовых доходов. И условия все: хочешь переезд, хочешь удаленка, хочешь особый график, некоторые идут уже дальше, например "а собирайтесь как вы всей группой и поработайте в рамках рабочего расписания пару недель из крыма, сочи или турции, заодно отдохнете, вот вам билеты и гостиница"

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

>Все остальное это или 30-50 тыщ на госконторах или кукишь в статапах из сколково

Такие предложения только для неумех от которых требуется просто занимать штатное расписание и что-то делать с переменным успехом. Сейчас даже джуны прикладывающие усилия для проф развития и способные достичь успеха претендуют на большое.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:34 
В кровавом только два языка жабка и дотнет

"Выпуск языка программирования Rust 1.54"
Отправлено Онаним , 30-Июл-21 09:38 
Пых ещё, как ни странно. Почти во всех кровавых ныне там, где нужна пристойная морда.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 16:39 
Пых никуда не делся и все так же монопольно властвует в сети со своими то 70% то 80%

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 15:00 
Да. Ентерпрайзу плевать на язык, он деньги делает и время экономит, поэтому использует языки с мощными фреймворками. А инты в циклах, кто быстрее, пацаны на форумах считают ...

"Выпуск языка программирования Rust 1.54"
Отправлено Онаним , 30-Июл-21 09:37 
Английский.
В худшем случае - китайский.

"Выпуск языка программирования Rust 1.54"
Отправлено freecoder , 30-Июл-21 23:34 
Выбирай Rust и осваивай разработку под Solana или Polkadot.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:29 
Всё также полдня собирается?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:34 
Бесплатно ништяков не бывает, за всё надо чем-то платить. Был бы Rust как Go - собирался бы так же быстро, как и Go.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:35 
В чем реальное преимущество Rust над Gо?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:48 
Го не орут на каждом шагу что безопасный. Хотя куда уж более безопасный.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:52 
Ну да, они просто им пользуются... а не мечтают изобрести чудоязык

"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 31-Июл-21 12:13 
Я пользуюсь Go и всё мечтаю заиметь immutable как в Rust :(

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 29-Июл-21 23:53 
Преимущество в одном контексте является недостатком в другом. Rust как язык мощнее Go, но если команда на 75% из джунов, то это минус. Джуны на Go напишут лучше и быстрее, чем на Rust.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:56 
Так Go лучше получается?

И кстати да, за широкими как галактика возможностями это к C++, но это вещь в себе


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 00:38 
> Так Go лучше получается?

Го хорошо подходит для написания сетевых сервисов.
Он именно для этого и создавался.
Ну или для чего-то с интенсивным IO.

Для всего остального, уже не так интересно.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:27 
Ниша Go уже давно обозначена...

А для чего хорошо подходит Rust?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 04:13 
Раст универсальный, тоесть для всего.

Впрочем, время написания на нём больше чем на динамических языках вроде питона жс или лиспа. По слухам. Надо бы проверить.

Поэтому видимо не очень для прототипирования, и для каких-то наколенных скриптов.

В тоже время есть патерн матчинг, и макросы, так что может быть и с этим всё окей.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:44 
Что лучше - лопата или экскаватор?

Правильно, зависит от задачи.


"Выпуск языка программирования Rust 1.54"
Отправлено Kuku , 01-Авг-21 00:46 
Так раст - это и есть лопата, в отличие от экскаватора Го. По скорости разработки, конечно. Зато потом скорость выполнения программ будет аж в 2-3 раза выше. Это ж жуть какая производительность!! ))

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 08:40 
Так написанно как будто го может на порядки ускорить разработку, такое видел только со скриптовыми языками и с готовыми библиотеками под задачу.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 09:03 
>В чем реальное преимущество Rust над Gо?

Ты ещё С++ с PHP сравни.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 15:33 
Не могу, PHP интерпретируемый ЯП, C++ компилируемый ЯП

А вот Rust и Go можно оба компилируемые, оба с GC в исполняемом файле, оба с недоООП, оба системные

Только вот Go показал себя как годную технологию, а Rust как манямирок для идиотов вроде тебя


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 16:04 
> А вот Rust и Go можно
> оба с GC в исполняемом файле,
> оба системные

Все продолжаешь газифицировать лужи?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 16:17 
Про GC в расте это тролинг?

"Выпуск языка программирования Rust 1.54"
Отправлено Kuku , 01-Авг-21 00:48 
Там просто статический ГЦ. Кстати, он не всегда лучше динамического ))

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 08:45 
Нет там ни какого статического GC. Там точно такой же контроль времени жизни и использование raii как и в C++. Отличие только в жестком контроле компилятора над ссылками и в перемещении вместо копирования по умолчанию.

"Выпуск языка программирования Rust 1.54"
Отправлено Kuku , 02-Авг-21 11:23 
Ты элементарной грамоте научись сначала, а потом уже будешь разглагольствовать о том, есть там GC или нет.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 12:29 
Если человеку нечего сказать по существу он резко становится громотеем. А настоящий статический GC конечно были попытки реализовать, но что-то реальное получилось только на регионах https://en.m.wikipedia.org/wiki/Region-based_memory_management и толком нигде не прижилось.  

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:36 
Имхо конечно, но пока растоманы кричат какой ржавый отполированный и блестящий, чуваки на Go просто пишут софт


"Выпуск языка программирования Rust 1.54"
Отправлено Ненавижу SJW , 29-Июл-21 23:47 
Казалось бы причём тут Go

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 29-Июл-21 23:49 
На Go есть реальные сложные проэкты которые доказывают состоятельность разработки на этом языке... а что есть на Rust?

"Выпуск языка программирования Rust 1.54"
Отправлено Rev , 30-Июл-21 00:34 
На Расте тоже дохрена всего, достаточно просто поискать :)

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 01:19 
Гонишь

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:33 
avr-hal имеет аналог для Go? https://github.com/Rahix/avr-hal
+100500 других проэктов разрабатываемых энтузиастами (server less на cloudflare и webassembly ещё один интересный проэкт, название ток забыл)

Замечу что Rust не соревнуется с Python или Go потому что у него задачи\возможности другие, а не потому что он хуже\лучше.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:43 
Бред какой то... кому это нужно?

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:53 
Если вы о Go, я с вами полностью согласен (хотя отголоски разума всё таки говорят что на нём почти как на python код пишется, легко и непринуждённо)

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:18 
Смешной

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 00:01 
Если долго вглядываться в код на расте, скоро раст начнет вглядываться в тебя

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 00:35 
Виджетов нет, IDE нет. Софта на расте тоже не видно, так наколенные поделки качества хуже чем на питоне

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 00:40 
> Виджетов нет, IDE нет. Софта на расте тоже не видно, так наколенные
> поделки качества хуже чем на питоне

Есть забытое искусство писать без IDE, функциональные языки позволяют это делать продуктивно.

Ну и таки, интеграция с VScode у раста отличная. Есть и Эклипс например. Чего тебе ещё собака надо?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:00 
Есть забытое исскуство работать с памятью. Но это конечно другое.

IDE я не панацея от всего. Но элементарно хочется не просто подсветку синтаксиса, а контекстную навигацию, контекстный рефакторинг и элементарно встроенную документацию.

VSCode на минутку вообще ниразу ни IDE, это редактор текста с подсветкой синтаксиса. Он вообще ничего не умеет. Нужно тянуть васянские конфликтующие между собой плагины и мудохаться с всяки *опа сприптом. Писать код в броузере - жуйте сами.

Эклипс? Это то чудовище у которого по непонятным причинам вечно что-то слетает? То индексация то ещё чего. Спасибо, нэнадо.

Что до emacs, то опять таки, поддержка базовая. Просто поставить и наслаждаться языком не выйдет. Вечное мудохавство. Нафига оно тогда надо если есть нормальные языки где с этим всё впорядке.

C/C++ нет никаких проблем. А в современных плюсах даже не нужно забытое исскуство работы с памятью. Этих проблем там нет уже 100 лет в обед.

Так что собаки берите это ржавое и топайте в будку.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 04:22 
>Есть забытое исскуство работать с памятью. Но это конечно другое.

Это как искусство вспахивать поле лопатой.
И не исскуство, и хорошо никогда не получалось.

>а контекстную навигацию, контекстный рефакторинг и элементарно встроенную документацию.

Для раста этого нет?

>Нафига оно тогда надо если есть нормальные языки где с этим всё впорядке.

С емасом всё в порядке, или с эклипсом?

>C/C++ нет никаких проблем.

Ну нет так нет. Главное 3 раза по 3 перед сном повторить.

>Так что собаки берите это ржавое и топайте в будку.

Злой вы, как собака.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:04 
>Есть забытое исскуство работать с памятью. Но это конечно другое.

Это миф, до сих пор всплывают уязвимости в коде с возрастом больше десяти лет.


"Выпуск языка программирования Rust 1.54"
Отправлено РЭЮЭШЬ , 01-Авг-21 19:14 
Idea вполне ок с растом.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 01:08 
>Виджетов нет

60FPS.

>IDE нет

Qt Creator + rust-analyzer


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:06 
А можно подробнее про QtCreator и раст?

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 09:26 
Скорее всего, имеется ввиду поддержка LSP. То есть QtCreator точно так же как и VSCode при просмотре исходников подгружал и выполнял код. :) https://opennet.ru/55159-rust

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 15:35 
Растоманы советуют плюсовую RAD QtCreator для разработки на расте...Теперь я слышал все

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 16:21 
Плюсисты давно сидят в IDE написаных на яве, шарпе и даже на лиспе.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 01:18 
Нет софта нет проблем...стабильность!

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:37 
Барин за слова не отвечает: Rust Language Server в виде Rust analyzer 100 лет как есть. Можно что на Vim что на VS Code писать с одинаковой степенью интеграции. VS Code даже дебажить через gdb может, если напрягает запуск с терминала.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:17 
Барин тупит?

Где контекстный поиск? Где контекстный рефакторинг? Где интерактивная справка? Или у тебя ide это только подстветка синтаксиса.

Не удивительно что ты VSCode к IDE приплёл. Потому что кроме подсветки синтаксиса оно ничего не умеет. Или обмазывайся васянскими дырявыми тырящими всё на свете плагинами. Ни в одной серьёзной канторе тебе такое не позволят.

С language server. Тоже мне. Нахрена мне ещё сервер какой-то там пускать если у нормальных языков и так всё без проблем. Оно это только ржавое не хочет ворочаться нигде.

Но что меня обрадовало. Тут упомянули что QtCreator что-то может. А это уже заявка. Если доведут поддержку до ума это будет действительно прорыв для rust.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 09:47 
> Барин тупит?

Да, барин тупит вместо того что бы посмотреть возможности VSCode c плагинами.
Барин не понимает, что IDE это и есть редактор кода с плагинами в большинстве своем.
По крайней мере, мне не извесно ни одного монолитного (без плагинов) IDE.

>Потому что кроме подсветки синтаксиса оно ничего не умеет.

Вот тут барин просто нагло врет.

>С language server. Тоже мне. Нахрена мне ещё сервер какой-то там пускать если у нормальных языков и так всё без проблем.

А вот тут барин опять проявил свою тупость, лень и незнание. Т.к.  нормальные языки и IDE с поддержкой нормальных языков не стесняються пользоваться серверами языков. Барин может загуглить что такое clangd, например, и в каких IDE он используется.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:13 
>Где контекстный поиск? Где контекстный рефакторинг? Где интерактивная справка? Или у тебя ide это только подстветка синтаксиса.

Все это и больше, в плагине руста для иде от jetbrains. У меня например усановлен в clion и работает по моему лучше чем сам clion с С++.


"Выпуск языка программирования Rust 1.54"
Отправлено РЭЮЭШЬ , 01-Авг-21 19:15 
нечеловечески чудовищно плюсую!

"Выпуск языка программирования Rust 1.54"
Отправлено Sem , 30-Июл-21 18:37 
У меня VSCode всё это умеет. У нас разные VSCode?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 18:53 
> Где контекстный поиск? Где контекстный рефакторинг? Где интерактивная справка?

neovim + lsp + language server + конфигурация (neovim_rust, например). Всё есть, но требуется навык работы с вимом, да.

Если хочется прям IDE, то IntelliJ Rust есть.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 06:41 
Вариантов для создания UI полно. Вопрос в том, зачем писать тот UI на языке, который для этого плохо подходит (Rust, C, C++, Java, etc)
Оптимальнее использовать core на Rust и что угодно иное для интерфейса

По IDE:
- rust analyzer действительно мощная штука, активно развивается.
vscode, vim, etc
- IntelliJ Rust, официальный плагин от JetBrains
Интересен своим собственным парсером, не лишен интеграции cargo check

Всё отлично с IDE.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 13:29 
>зачем писать тот UI на языке, который для этого плохо подходит (Rust, C, C++, Java, etc)

Из перечисленных, C++ для (G)UI подходит лучше всего. Потому, что Qt, FLTK, FOX и менее известные.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:24 
Сила Qt как раз в выносе интерфейса в отдельный декларативный язык
А на виджеты они уже в целом забили

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 00:36 
https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=rust - это вот всё кто разгребать будет? Или они только и могут на других вину сваливать?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 00:36 
И это наминутку не в софте на расте. Это в САМОМ расте

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 00:49 
> И это наминутку не в софте на расте. Это в САМОМ расте
>Deno is a runtime for JavaScript and TypeScript that uses V8
>Это в САМОМ расте

Чё?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 07:54 
> И это наминутку не в софте на расте. Это в САМОМ расте

В первой же дыре код на _Си_ "A flaw was discovered in GNU libiberty within demangle_path() in rust-demangle.c". В остальном дыры в unsafe-блоках  каких-то левых crate-модулей.


"Выпуск языка программирования Rust 1.54"
Отправлено Совершенно другой аноним , 30-Июл-21 09:15 
CVE-2020-36317, CVE-2020-36318, CVE-2020-36323, CVE-2021-31162, CVE-2021-28875 - CVE-2021-28879 тоже левые крейты? И как понять, какие крейты левые, а какие - одобренные к использованию?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:00 
Это всё дыры в unsafe-коде. Залатают.

Фишка в том, что unsafe-код базовых библиотек конечен, за несколько лет всех блох словят. Главное не добавлять нового unsafe-кода без крайней нужды.


"Выпуск языка программирования Rust 1.54"
Отправлено пейсатель unsafe , 30-Июл-21 22:14 
Ничего у вас не получится - unsafe в Расте будет всегда!


"Выпуск языка программирования Rust 1.54"
Отправлено пейсатель unsafe , 30-Июл-21 22:18 
Да здравствует unsafe в Расте!

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:25 
Ну так в этом и смысл
В либах он есть, а программист чаще всего не нуждается

В любом случае, это лучше 100% unsafe


"Выпуск языка программирования Rust 1.54"
Отправлено Совершенно другой аноним , 02-Авг-21 08:49 
> Ну так в этом и смысл
> В либах он есть, а программист чаще всего не нуждается

Возможно, но пока, судя по количеству CVE, и по просмотру некоторых проектов, складывается, возможно не верное, впечатление, что что-либо сделать на Rust нетривиальное требует этого самого unsafe. Т.е. количество unsafe-кода явно больше, чем это декларируется.


"Выпуск языка программирования Rust 1.54"
Отправлено Совершенно другой аноним , 02-Авг-21 08:52 
> Это всё дыры в unsafe-коде. Залатают.

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


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 01:18 
Раньше все отнекивался от раста и думал, что это очередной распиаренный проходняк. Но на днях решил попробовать на вкус, что это такое. Скачал компилятор, открыл растбук и начал писать код. И знаете, что? Мне понравилось, такого хорошего языка я еще не встречал. С первого взгляда зацепил, зараза. Поэтому желаю языку дальнейшего развития, чтобы однажды перейти на него полностью.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 02:02 
Какой-то п0pн0рассказ...

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 02:22 
Похоже, что на свет уже появилась такая сущность, как "растоботы".

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 02:26 
Дайте угадаю, вы еще ни одной строчки на расте не написали, верно?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:01 
На самом деле как только нормальные батарейки появятся, так сразу. Скорее всего, многим людям всё равно на чём писать, да и в целом люди любят нескучный синтаксис (позволяет тешить чсв), так что это единственная преграда (практически в текущем состоянии мало кому интересно для прикладных задач). Какой смысл писать на языке, на котором тебе придётся всё изобретать самому? Хотя, конечно, зависит от задач, где-то и можно впихнуть. Но скорее на расте всё равно придётся реализовывать только какую-то часть логики. Ну вот вроде сложные и опасные задачи сложения строк или перебора массивов, на остальное как видится раст не способен.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:50 
За батарейками иди в Питон. Здесь тебе делать нечего.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 21:44 
> За батарейками иди в Питон. Здесь тебе делать нечего.

Или в си. Или в плюсы, да.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:29 
> Какой смысл писать на языке, на котором тебе придётся всё изобретать самому?

Верно, поэтому и выбирают Раст, поскольку не хочется велосипедить на C, где ничего нет из коробки


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:36 
>> Какой смысл писать на языке, на котором тебе придётся всё изобретать самому?
> Верно, поэтому и выбирают Раст, поскольку не хочется велосипедить на C, где
> ничего нет из коробки

Для си конечно нет фреймворков уровня Qt, но примерно весь код на свете это либо си и плюсы, либо джава. Если говорить о готовых, пригодных к использованию компонентах. И, что немаловажно, проверенных и оттестированных.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:03 
Я написал. И моей целью было сделать так чтобы в safe он упал. И прикинь. Он упал. Грохнулся с треском.

Пример я сюда уже кидал. Повторять не буду. И знаете что? Правиль, модератор скрыл сообщение. Потому что растоманы лицемеры. Но не удалил, так что его можно найти и раскрыть.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:09 
А пример в этом треде? Если нет, то дайте наводку, чтобы я смог найти его.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:32 
Пример не в этом треде. Наводка rust падает точно также как современный C++ в тех-же местах.

Буду дома залогинюсь и найду точно.


"Выпуск языка программирования Rust 1.54"
Отправлено Прорыв_запарты_фелиал , 30-Июл-21 08:51 
> А пример в этом треде? Если нет, то дайте наводку, чтобы я
> смог найти его.

https://github.com/NieDzejkob/fake-static - я найду за тебя, жертва пропаганды.


"Выпуск языка программирования Rust 1.54"
Отправлено anonymous , 30-Июл-21 11:45 
Просто баг в компиляторе, вот и всё. В C++ багов ещё больше. А уж если учесть разный уровень поддержки стандартов...

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:01 
И какое отношение баги в компиляторе имеют к самой модели языка?

Баги в компиляторах есть везде. В gcc, в clang, где угодно.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:30 
Жесть какая, код максимально отдаленный от ежедневной практики

"Выпуск языка программирования Rust 1.54"
Отправлено Прорыв_запарты_фелиал , 02-Авг-21 02:28 
>> А пример в этом треде? Если нет, то дайте наводку, чтобы я
>> смог найти его.
> https://github.com/NieDzejkob/fake-static - я найду за тебя, жертва пропаганды.

Кстати, можно посмотреть как клоуны кукарекали "нету, покажи", а как только им показали - началось нытьё и нелепые оправдания.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 21:42 
> Потому что растоманы лицемеры. Но не удалил, так
> что его можно найти и раскрыть.

А может, потому что ты - очередной опеннетный невежда?
Теоремы Райса, Геделя (или если для совсем уж школьников и первокурсников: "проблема остановки")?
Не, не слышали ...


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:49 
Расобот - это бывший Си плюс-плюсник перешедший на Раст. Раньше они тут, в двоём или втроём, целые разговорные спектакли устраивали. В конце каждого спецтакля человек интересовавшийся Растом клятвенно обещал перейти на Раст.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 02:26 
Брат жив?

"Выпуск языка программирования Rust 1.54"
Отправлено Aukamo , 30-Июл-21 02:40 
IMHO, лучше всего начинать читать Книгу (The Book https://doc.rust-lang.org/book/) там 20 глав, они покрывают 100% всего что есть в раст и дают понять где смотреть то, чего в книге нет.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 18:56 
Только начинать надо сразу с главы 4 :)

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:25 
Что ты написал? Hello wrold копипастом?

Молодец, возьми пирожок с полочки


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 08:38 
С прозрением и добро пожаловать в лучший ЯП ближайших как минимум двух десятилетий.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:00 
> Раньше все отнекивался ... думал, что  очередной проходняк. Но на днях решил попробовать на вкус ...И знаете, что? Мне понравилось!

Напоминает: "Я сначала как и все был уверен что это развод!... Сам был удивлен когда... Это действительно работает!!!"


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 17:26 
> Напоминает: "Я сначала как и все был уверен что это развод!... Сам был удивлен когда... Это действительно работает!!!"

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


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:54 
>Развод подразумевает какой-то ушерб, зачастую финансовый, но в этом случае я ничего не потерял, а наоборот, даже приобрел.

Неважно, сама суть пропоганды Раста та же, и это вызывает подсознательное неоверие. Ах да, потерянное время на изучение Раста не считается?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 21:56 
> Неважно, сама суть пропоганды Раста та же

+1


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:32 
Отзыв по языку в новости о языке
ВЕЛИКАЯ ПРОПАГАНДА

"Выпуск языка программирования Rust 1.54"
Отправлено Ф1 , 31-Июл-21 10:14 
>Ах да, потерянное время на изучение Раста не считается?

Для С++ программиста это время точно не потерянное, даже если он никогда больше не будет писать на расте, во первых очень полезно посмотреть как все работает в очень близком, но намного более жестко контролируемом языке, во вторых рано или поздно в C++ добавят аналоги borrow checker.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:33 
Сделай Redox на все ноутбуки

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 17:27 
> Сделай Redox на все ноутбуки

Сделай Hurd на все ноутбуки.



"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 22:50 
Есть Minix, есть DFBSD из гибридномикроядерных которые уже работают... зачем нужен протухший 30 лет назад Hurd?

А у растоманов кроме Redox есть хоть что то?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 00:15 
>> на все ноутбуки
> Есть Minix, есть DFBSD из гибридномикроядерных которые уже работают...

Мощный пук! Респект!

> А у растоманов кроме Redox есть хоть что то?

Ты сейчас пишешь с оси конца 70х начала 80х? Или это был еще одинм мощный выброс метана?



"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 01-Авг-21 23:47 
Че там с Redox?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 02:01 
> Инкрементальная компиляция была отключена в выпуске 1.52.1 из-за выявления скрытых ошибок

Как так-то?! Раст же безопасный! Или раст не на расте растаманы пишут?


"Выпуск языка программирования Rust 1.54"
Отправлено Второе Я , 30-Июл-21 02:28 
Раст не панацея. От неосиляторов с опеннета, вот, например, - не спасает.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:11 
И откуда на опеннете столько зумеров, считающих что здесь DTF какой нибудь где все друг друга хвалят и восторгаются хеллоуворлдами?

Любое обсуждение ЯП это ожесточенные споры, обвинения в некомпетности, троллинг и тонны лулзов причем жоских и это нормально

И когда комьюнити сливается сливается весь ЯП, в этом смысл холиваров

А с растоманами даже спорить не интересно, чуть что убегают и прячутся в своем манямирке где все безопасно и ничто не течет


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:28 
> А с растоманами даже спорить не интересно, чуть что убегают и прячутся в своем манямирке где все безопасно и ничто не течет

Вот тут ты прав.

Там выше было интерересно. Человек спросил кто вот это будет разгребать https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=rust

И что? его сообщение скрыл модератор, сделав вид что в растомире всё нормально и безопасно.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:34 
Спорим это сообщение он тоже спрячет :D

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 07:49 
> Там выше было интерересно. Человек спросил кто вот это будет разгребать https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=rust
> И что? его сообщение скрыл модератор, сделав вид что в растомире всё
> нормально и безопасно.

А вы сами тот список читали? Там дыры в левых проектах и в областях, не касающихся областей, в которых Rust даёт возможность поднять безопасность. В первом CVE-2021-3530 дыра в коде на языке _Си_ в не имеющей никакой связи с Rust библиотеке - "A flaw was discovered in GNU libiberty within demangle_path() in rust-demangle.c". Во втором и третьем      дыры в  левой библиотеке в логике разбора HTTP-заголовка Content-Length и расчёта размера chunk-ов. В четвёртом дыра в JavaScript-движке Deno в логике загрузки модулей.  И т.п.

Какое отношение эти дыры имеют к Rust? Если бы код тех проектов был на Си, можно предположить, что дыр бы там было в три раза больше, из-за переполнений буфера и кривой работы с указателями.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 08:35 
Т.е. вы тоже считаете что безопасность это просто слово, которое надо всем повторять, а не работа, которую надо делать? Безопасный язык, который на каждый чих вытягивают миллион пакетов, как какой-нибудь nodejs или php с известными уязвимостями, это просто смешно.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:33 
> Любое обсуждение ЯП это ожесточенные споры, обвинения в некомпетности, троллинг и тонны лулзов причем жоских и это нормально

Спор ради спора? А зачем? Можно и более полезными вещами заняться.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:39 
Тут другой вопрос. К нормальным людям. У растоманов память короткая из за наркотиков.

А вы помните когда они своего-же загнобили? Чувак там какой-то движок сайта на расте делал. Его загнобили что он не тру растоман и не по растомански пишет. Человека довели даже до того что он проект свернул послав всех.

Rust (ржавчина), как физическое явление, как процесс, токсичен и разрушителен. И такое ощущение что сообщство языка этому соответсвует.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:44 
> А вы помните когда они своего-же загнобили? Чувак там какой-то движок сайта на расте делал. Его загнобили что он не тру растоман и не по растомански пишет. Человека довели даже до того что он проект свернул послав всех.

Ну справедливости ради, такое на всех языках происходит. Если ты будешь писать в Си стиле на С++, то тебя тоже никто по головке не погладит.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 03:49 
Справедливо и ты прав. Это жутчайшая жуть писать в стиле C на C++

Тем не менее до истерики и закрытия проектов людей не доводят.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:57 
Писательство в Си стиле порой вынужденно если не хочешь городить абстракции для сишных либ и потом их тестить и отлаживать

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


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 03:52 
Не спор ради спора, а по сути естественный отбор в ЯП и их фан базе... если их язык дно, а они толстенькие неженки с айфончиками тогда их чудотехнологию раздавят как катком адепты других ЯП вот с такими огроменными яелами

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 03:59 
Есть забавная история, с месяц назад. Я уже писал о том как пробовал использовать Rust в automotive. Повторятся не буду.

Но был у меня на собеседовании человек заявлявший что знает rust. Честно я думал одного взять. Для следующего поколения техники, может он поможет и подскажет то что не заметил я.

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

Я не говорю что все такие, я говорю что мне такой попался. О языке я по этому кандидату вывода не делал. Я вообще не делаю выводов. То что удобно - я использую, то что нет - не использую.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 04:11 
Лол конечно... но что с них взять?

Асм никто в глаза не видел и не понимают к примеру что такое стек или куча, где хранятся обьявленные ими переменные, что такое массив на самом деле без абстракций и почему например он не может быть динамическим в исполняемом файле, чехарда в головах насчет что такое глобальная переменная и локальная(аля автоматическая память) или например не знают почему нужно приводить типы к одну...


Короче образование уровня Уганды и все


"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:30 
Понимаешь, мне потом кошмары реально снились от таких инопланетных технологий.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 04:37 
Я аж заскринил это))) но ты хоть обьяснил пареньку в чем суть?

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:44 
Нет, я не выдержал после того как он сказал что авторитетно может заявить что iOS это Linux и я ему могу верить потому что он специалист.

Мой мозг взорвался.


"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:49 
> Я аж заскринил это))) но ты хоть обьяснил пареньку в чем суть?

А как я мог объяснить по сути? Я даже не понимал за какую базу закрепится если там полностью инопланетяне скушали мозги. Где точка отсчёта? на основании чего эту всю кашу в голове можно разобрать? ААААААААААААААА

Зачем я про него вспомнил. Опять кошмары будут.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 04:17 
Или спроси по приколу почему цикл никогда не вызовет переполнение стека в отличии от рекурсии

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:30 
Слушай, гениально. Всё, у меня на следующей неделе собеседование. Я обязательно спрошу. Классный вопрос. Спасибо.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 04:41 
Ну или такое, чем технически отличается глобальная переменная от статической?(спойлер... ничем... разница лишь в том что в функции известен ее адрес в исполняемом коде, а за ее пределами ее адрес не известен)

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:44 
Такой у меня уже есть вопрос.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 05:05 
Значит разрабы правильно юзают возрат из функции по ссылке на статическую переменную ибо безопасно

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 17:57 
И юзают в другом потоке?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 17:18 
Если статическая внутри функции или блока кода то даже в c++ 98 отличаются так как инициалируется только если был вход в функцию, а начиная с c++ 11 еще обязаны потокобезопасно инициализироваться https://en.cppreference.com/w/cpp/language/storage_duration#...

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 05:36 
Теперь поцелуйтесь.

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 31-Июл-21 02:41 
> Теперь поцелуйтесь.

Это ты к сладкой парочке Fracta1L и iPony обращайся, они по этому делу.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 17:30 

int main()
{
  for(int i = 1; ; ++i) {
    volatile int _[i];
    *_ = i;
  }
}


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 18:05 
> int _[i]

это на каком языке? не на си++ точно, на си++ так массивы можно только с константами объявлять


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 18:51 
>> int _[i]
> это на каком языке?

C99

> не на си++ точно, на си++ так массивы
> можно только с константами объявлять

Пффф. Ломать не строить! man alloca.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:19 
А ничего что alloca в куче выделяет память, а не в стеке?

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 19:38 
> А ничего что alloca в куче выделяет память, а не в стеке?

ОПИСАНИЕ
       Функция  alloca()  выделяет  size  байтов  памяти  в  стековом  кадре вызывающего. Это временное
       хранилище данных автоматически освобождается после возврата из функции, вызвавшей alloca().

https://www.opennet.me/man.shtml?topic=alloca&category=3&rus...


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:25 
alloca не выделит памяти больше, чем возможно

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 19:43 
> alloca не выделит памяти больше, чем возможно

Заблуждаетесь. Например, RPM5 в Rosa Tresh падал как раз из-за alloca() при установке пакетов с количеством фалов больше определённого.


"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 31-Июл-21 02:42 
>
 
> int main()
> {
>   for(int i = 1; ; ++i) {
>     volatile int _[i];
>     *_ = i;
>   }
> }
>

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


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 31-Июл-21 07:39 
>[оверквотинг удален]
>> {
>>   for(int i = 1; ; ++i) {
>>     volatile int _[i];
>>     *_ = i;
>>   }
>> }
>>
> А сказать чего хотел? Или мы тут играем в телепатов как компилятор
> rust который на этапе компиляции предугадывает сколько я данных из файла
> в массив загружу? По крайней мере так любят утверждать некоторые фанаты.

Скопирую контекст из сообщений, на которые я отвечал:
>>  Или спроси по приколу почему цикл
>> никогда не вызовет переполнение стека в отличии от рекурсии
> Слушай, гениально. Всё, у меня на следующей неделе собеседование.
> Я обязательно спрошу. Классный вопрос. Спасибо.


"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 31-Июл-21 14:59 
>[оверквотинг удален]
>>> }
>>>
>> А сказать чего хотел? Или мы тут играем в телепатов как компилятор
>> rust который на этапе компиляции предугадывает сколько я данных из файла
>> в массив загружу? По крайней мере так любят утверждать некоторые фанаты.
> Скопирую контекст из сообщений, на которые я отвечал:
>>>  Или спроси по приколу почему цикл
>>> никогда не вызовет переполнение стека в отличии от рекурсии
>> Слушай, гениально. Всё, у меня на следующей неделе собеседование.
>> Я обязательно спрошу. Классный вопрос. Спасибо.

А, вот оно что. Спасибо что контекст вернул, тут иногда его трудно отследить.

Что-ж, замечание достойное, принимается. Но поскольку мы тут стали играть в задачки со звёздочками твой пример не сработал. Давай подумаем почему?


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 31-Июл-21 17:09 
>[оверквотинг удален]
>>> в массив загружу? По крайней мере так любят утверждать некоторые фанаты.
>> Скопирую контекст из сообщений, на которые я отвечал:
>>>>  Или спроси по приколу почему цикл
>>>> никогда не вызовет переполнение стека в отличии от рекурсии
>>> Слушай, гениально. Всё, у меня на следующей неделе собеседование.
>>> Я обязательно спрошу. Классный вопрос. Спасибо.
> А, вот оно что. Спасибо что контекст вернул, тут иногда его трудно
> отследить.
> Что-ж, замечание достойное, принимается. Но поскольку мы тут стали играть в задачки
> со звёздочками твой пример не сработал. Давай подумаем почему?

А зачем думать? У меня переполняет. Достаточно, что бы опровергнуть "никогда не вызовет переполнение". Выполнил ли кто-то ulimit -s 500000000, задал размер стека в заголовке PE образа, или же при адресации проскочили сторожевую страницу и программа завершилась "без ошибок" -- важно не это, а что она обязательно где-то упадёт. Просто изменят тип счётчика на "правильный" и она упадёт.

Она упадёт даже без цикла и с константным размером массива, потому что где-то WCHAR_MAX всего 65535, а где-то нет.

Она вообще просто так возьмёт и упадёт, потому что... смотрите внимательно за руками, что бы я не смухлевал:

Like all other architectures, x86_64 has a kernel stack for every
active thread.  These thread stacks are THREAD_SIZE (2*PAGE_SIZE) big.
https://www.kernel.org/doc/Documentation/x86/kernel-stacks

arch/x86/include/asm/page_32_types.h:#define THREAD_SIZE_ORDER    1
arch/x86/include/asm/page_32_types.h:#define THREAD_SIZE        (PAGE_SIZE << THREAD_SIZE_ORDER)

arch/x86/include/asm/page_64_types.h:#define THREAD_SIZE_ORDER    (2 + KASAN_STACK_ORDER)
arch/x86/include/asm/page_64_types.h:#define THREAD_SIZE  (PAGE_SIZE << THREAD_SIZE_ORDER)
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux...

но пока везёт и "у меня на виртуалке всё работает!"


"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 01-Авг-21 09:51 
> А зачем думать?

Действительно, зачем? Ведь божественный раст все спасёт. Удачи тебе ездить на авто писанное такими думателями.

p.s. ссылки твои и аргументы я рассмотрел. Ты в чём-то безусловно прав. Замечания все достойны.

Только вот нет, не упал твой весёлый цикл, прикинь. А как так?

Тут подумать бы. Но зачем? Ведь так?

p.p.s. раст валится ещё хуже кстати говоря и на более элементарных вещах. Подумать только надо. Но тут ведь "А зачем думать?"


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 01-Авг-21 12:52 
Господин экзаменатор, я не у Вас на собеседовании. Если Вы согласились с тезисом, который по факту оказался ложным -- подумайте над этим сами. Да, "подумаем" -- это множественное число, а не только привычная манипуляторам фигура речи. Так что Ваша очередь, и нечего тут пальцы загибать, приплетая не относящийся к вопросу язык.

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 02-Авг-21 00:47 
> Господин экзаменатор, я не у Вас на собеседовании. Если Вы согласились с
> тезисом, который по факту оказался ложным -- подумайте над этим сами.
> Да, "подумаем" -- это множественное число, а не только привычная манипуляторам
> фигура речи. Так что Ваша очередь, и нечего тут пальцы загибать,
> приплетая не относящийся к вопросу язык.

Цетирую: "А зачем думать?"

Автора хоть узнали? ;)


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 02-Авг-21 12:16 
>> Господин экзаменатор, я не у Вас на собеседовании. Если Вы согласились с
>> тезисом, который по факту оказался ложным -- подумайте над этим сами.
>> Да, "подумаем" -- это множественное число, а не только привычная манипуляторам
>> фигура речи. Так что Ваша очередь, и нечего тут пальцы загибать,
>> приплетая не относящийся к вопросу язык.
> Цетирую: "А зачем думать?"
> Автора хоть узнали? ;)

Естественно, я же помню контекст -- это мой ответ на предложение "давайте подумаем". Я не знаю, зачем мне думать о причине, из-за которой заведомо ошибочный пример не упал в частном случае -- запустить, что бы оно "работало", я тоже могу. Не вижу каких-либо подробностей о сборке и запуске. Не вижу других гипотез, лишь убеждения подумать. Не спорю, надо, значит надо. Давайте уже подумаем. :)


"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 02-Авг-21 00:50 
> Господин экзаменатор, я не у Вас на собеседовании. Если Вы согласились с
> тезисом, который по факту оказался ложным -- подумайте над этим сами.
> Да, "подумаем" -- это множественное число, а не только привычная манипуляторам
> фигура речи. Так что Ваша очередь, и нечего тут пальцы загибать,
> приплетая не относящийся к вопросу язык.

Не, человек, ты в принципе молодец. Отличный пример, отличное замечание. Жалко только что немного не туда и не о том. Но вообще мне понравилось и появилось дополнительно интересное.


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 02-Авг-21 12:33 
> Жалко только что немного не туда и не о том.

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


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 13:38 
>если контроллеру не хватает памяти то он может попросить у другого через глобальные переменные....

Офигеть, прямо NUMA-кластер контроллеров!


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 04:07 
Бред какой-то. Я думал, что пригодность языка определяет его эфыктивность и удобство при решении задач, а не игра кто кого перевоняет в интернете.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 04:11 
Вспомни D

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 04:12 
Не перевоняет, а докажет ненужность... этл разные вещи

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:14 
Хаааан, ты уже обоср@лся в каждой ветке под этой новостью. Заканчивай.

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:32 
Добро пожаловать в реальность.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 08:06 
Мне больше интересно как эти неженки смогли бы исправить ошибку в месе, которая приводила к тирингу в i3, и может других рабочих столах/вмах. Пусть эти малохольные как админы поддерживающие прости господи шиндоуз и линукс в одной конторе учат Си, С++, Ржавого, Жабу, Жабоскрипт, баш, питон и лишь потом вылезают с авторитетными комментариями. Даже создатели языков Си и С++ вели себя скромнее.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 04:53 
>Любое обсуждение ЯП это обвинения в некомпетности, троллинг и тонны лулзов причем жоских и это нормально

Это просто общение дебилов.
К ЯП отношения не имеет.


"Выпуск языка программирования Rust 1.54"
Отправлено Ordu , 30-Июл-21 14:48 
> Любое обсуждение ЯП это ожесточенные споры, обвинения в некомпетности, троллинг и тонны лулзов причем жоских и это нормально

Смотри, я озаботился посчитать частоты ников:

$ sort tmp.txt | uniq -c | sort -n
...
      1 Совершенно другой аноним
      2 Anonnnym
      2 Ordu
      2 Rev
      2 Аноним зеленый
      2 Анонимъ
      2 Онаним
      3 adolfus
      3 ПомидорИзДолины
      6 anonymous
     11 deeaitch
     12 Кир
     13 Aukamo
     14 n00by
     20 Аноньимъ
     68 Хан
    104 Аноним

За ником Аноним прячется куча людей, он не считается. Ты на первом месте среди размахивающих шашкой, с большим отрывом от Аноньимъ, которого я бы объединил в одну группу с deeaitch, Кир, Aukamo и n00by, в группу людей умеренно размахивающих шашкой.

Это я к тому, что, действительно, в глаза бросается, что для тебя нормально превращать разговор о языках программирования в холивар. Ты эт, таблетки пить не пробовал?


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 14:57 
Оналитег однако!

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:57 
Товарищ майор вам надо в отпуск. Вы заработались.

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 03:47 
Эх, а у меня почти получилось его внедрить в компании в automotive. Но нет, сыровато.

Тем не менее удачи проекту, а сообществу быть менее токсичным, перестать обвинять всех вокруг и научиться признавать ошибки и недочёты.

Буду следить и может через пару лет в новом поколении техники попробую ещё раз. Даже не может, а точно попробую. Думаю устранят недостатки.

Только честно, помимо карго добавьте нормальные вещи, карго не пропустят, честно.


"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:33 
О, классно, растоманы меня минусуют, не спят, бдят.

А вопрос почему? Ответа не будет. Но ребята, расслабтесь. Будет готово и я с удовольствием воспользуюсь. А пока гуглите на пример подгобного рассказа про ваш Rust и Automotive в двух томах. Эксперимент длинною в полтора года.


"Выпуск языка программирования Rust 1.54"
Отправлено Next_Losers_rules , 30-Июл-21 06:07 
Не Automotive , а Automake руст лишь паразиты objectтированного кода созданного архитектором который переиначил пути для большей производительности

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 31-Июл-21 02:41 
> Не Automotive , а Automake руст лишь паразиты objectтированного кода созданного архитектором
> который переиначил пути для большей производительности

Ну вот глупость же поправил. Откуда ты там нарисовал Automake?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 08:30 
Чтож вам хрустикам постоянно что-то мешает. Фаерфокс не смогли переписать, да ничего не смогли даже написать. Но мешают этому конечно же хейтеры, это из-за них вы ничего не можете сделать с вашим язычком.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 04:23 
Вангую что растоманы даже не знают как передаются аргументы в функцию и почему например нельзя вернуть массив из функции, это же так низкоуровнево))) а в расте все просто и понятно

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:35 
Ты знал

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 05:02 
Ладно расскажу и я, вообще думаю все помнят скандал со злополучным Audacity и сливом персональных данных, один разраб кричал что мол хэш-функция обратно не реверсится, на что ему знающие люди тактично указали что если число входящих значений в хэш-функцию конечно как те же IP-адреса, то не составляет труда составить таблицу хэшей всех IP адресов после чего прогнать интересующий тебя хэш по ней дабы найти соответствие и узнать IP-адрес... на что разраб сказал что вы все врети и отключился

Кстати эта лабуда с хэшами IP и тип анонимностью на каждом сайте


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 05:16 
Хотя вру, можно, по ссылке если массив обьявлен как static внутри функции

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 06:21 
А кстати из функции struct можно вернуть. В нем массивы можно же сделать. Это не прокатит? :)

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 07:25 
В общем то Си разрешает функциям возращать структуры, но это просто офигительные дополнительные расходы на копирование, представь если структура большая и не помещается в регистры которых в x86 кот наплакал, поэтому компилятор может так использовать стек для возврата не сбрасывая его указатель перед выходом из функции и лишь потом сбросить его чтобы было время сохранить значения, а если и этого не хватает тогда в зависимости от компилятора могут быть различные грязные хуки но опять же двойным а то и тройным копированием...

Поэтому проще, быстрее и надежнее пробрасывать ссылку(адрес) на static память вызываемой функции в вызываемую и работать с ней как с обычной глобальной переменной


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 09:35 
> В общем то Си разрешает функциям возращать структуры, но это просто офигительные
> дополнительные расходы на копирование

Не должно быть копирования. Достаточно зарезервировать стек перед вызовом.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 12:18 
Будет или нет копирование - зависит от оптимизатора и конкретного кода. Хинто: сравни x=f(x) и y=f(x)

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 13:08 
> сравни x=f(x) и y=f(x)

Нет разницы, пока мы говорим о возврате структуры из функции, а не подменяем предмет обсуждения на сравнение f(x,y) и f(y,x). Что бы избежать копирования, достаточно передать её адрес неявным аргументом.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 14:43 
Ну смотри стек функция не сбросила и сохранила в нем возвращаемое значение, но его же нужно как то обработать, а перед этим сохранить

Копирование 1
Из стека в регистры
Копирование 2
Из регистров в память

После чего сбросить стек


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 15:41 
Что значит "сбросить стек"?

Вы предполагаете, что структура при возврате из функции куда-то копируется. Значит место (приёмник) зарезервировано в памяти. Для чего указатель стека уменьшается на размер структуры (плюс выравнивание, но это не существенно). Происходит это при определении экземпляра. То есть до вызова функции.

struct foo r;
r = foo_construct();

Далее в теле функции определяется второй экземпляр структуры и как-либо инициализируется.

struct foo
foo_construct()
{
  return (struct foo) { /* ... */ };
}

Локальные переменные живут до выхода из функции. Соответственно, при выполнении return, по-Вашему, необходимо скопировать данные из локального для вызванной функции экземпляра в стек вызывающей.
Представьте, что один из членов структуры инициализирован указателем на неё. Что предпринять в данном случае? Как видим, копирование вообще решением не является.
С другой стороны, если копирование должно быть выполнено до выхода из функции -- значит адрес приёмника каким-то образом в теле функции известен. А раз он известен, то незачем создавать локальную структуру, достаточно формировать результат непосредственно в стековом кадре вызывающей функции. На практике передаётся неявным аргументом указатель (как this в C++), либо функция-конструктор встраивается.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 17:03 
Сбросить стек значит вернуть указатель стека в изначальное положение которое было до вызова функции(чтобы не получить переполнение стека)


... ну смотри ты говоришь что во время return локальные переменные копируются в стек вызываемой функции... только вот стек общий на всю программу(можешь себе представить стек разделяемой памятью фиксированного размера)


Отсюда ты и говоришь про некий адрес приемника... там адреса не нужны это или регистры или стек которые заранее известны

Локальной памяти не существует(она хранится в стеке), название неправильное, оно не отражает ее природу, в отличии от определения автоматической памяти


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 17:07 
*в стек вызывающей

Короче суть такова что стек один на всех, а не укаждого свой


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 18:36 
> Сбросить стек значит вернуть указатель стека в изначальное положение которое было до
> вызова функции(чтобы не получить переполнение стека)

"Восстановить" вместо "сбросить" было бы понятнее. Вернуть значение указателя нужно, что бы можно было дальше обращаться к своим локальным переменным. А то до переполнения дело не дойдёт.)

Единственно что, в зависимости от конвенции вызова, аргументы (если таковые были переданы через стек) могут быть оставлены на стеке (cdecl) или сняты вызывающей стороной (ctdcall). То есть при выходе из подпрограммы вершине стека не обязательно сразу же вернётся прежнее значение.

> ... ну смотри ты говоришь что во время return локальные переменные копируются
> в стек вызываемой функции...

Я говорю, что копирование вообще неправильно (почему -- подробнее можно почитать про глубокое копирование в С++). Но если бы оно было, то там ему самое место.

> только вот стек общий на всю программу(можешь
> себе представить стек разделяемой памятью фиксированного размера)

Стек общий, но у меня говорится о стековых кадрах. То есть об областях стека, где подпрограммы хранят свои локальные переменные. Дословно: достаточно формировать результат непосредственно в стековом кадре вызывающей функции.

По поводу разделяемой памяти - в моём понимании это страницы ОЗУ, которые принадлежат различным адресным пространствам (процессам). Стека в такой памяти быть не должно.

> Отсюда ты и говоришь про некий адрес приемника... там адреса не нужны
> это или регистры или стек которые заранее известны

Если возвращающая структуру функция (назовём её конструктором) вызывается из одного места, тогда строение стекового кадра вызывающей стороны действительно известно и однозначно, можно не передавать адрес для сохранения результата. Но в таком случае конструктор скорее всего окажется встроен (inline).

Если же вызывается из разных мест, или для массива структур, то придётся передавать адрес конструктору. И этот же адрес потребовался бы, если бы пришлось копировать структуры.

> Локальной памяти не существует(она хранится в стеке), название неправильное, оно не отражает
> ее природу, в отличии от определения автоматической памяти

Как раз вместо "автоматической памяти" в стандарте языка Си определено время жизни объектов (аutomatic storage duration). И опять же, у меня "локальные переменные". Кадр стека локален для каждого вхождения в подпрограмму, поскольку обращение к нему происходит относительно регистра стека.

> Короче суть такова что стек один на всех, а не укаждого свой

Вот именно. Потому, предприняв меры (передав указатель на место под результат), можно создавать структуру сразу в нужном месте и без копирования.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 19:52 
Ты умный чел сразу видно.. но пиши чут чут попроще тип без такого формализма читать сложно...

Указатель стека нужно возвращать/сбрасывать дабы он не вышел за границы стека, ведь проверки границ стека как и массива не предусмотрено, разве что проц выкинет исключение на стек и Ояс завершит программу в отличии от массива

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

Ясно что можно передавать структуру по указателю, мы же говорили про накладные расходы при передаче по значению

Насчет конструктуров и стековых фреймов чет не понял...


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 20:10 
С друго стороны такие хитроумные манипуляции похожи на костыль из разряда передать массив(до 8 байт) запаковать в long и вернуть по значению а потом распаковать снова в массив

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 31-Июл-21 08:14 
> Ты умный чел сразу видно.. но пиши чут чут попроще тип без
> такого формализма читать сложно...

Короче пушим дворды и зовём функу потом попаем. Это называется сидекл. В стдкол функа сама попает ретн. А в фастколе параметры в регистрах. :)

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

Верно. Но это не главное. Допустим, перед вызовом подпрограммы по адресу [rsp - 8] что-то сохранили. Подпрограмма изменила указатель стека, отработала, произошёл возврат. В rsp другое значение, и по [rsp - 8] прочитали мусор. Так до переполнения дело не дойдёт.

> Спор насчет локальных или автоматических переменных ниочем, это же логично что с
> вызовом подпрограммы формируется ее стековый фрейм, а фрейм вызывающей не очищается
> так как она не завершена

Так я и не спорю.

> Ясно что можно передавать структуру по указателю, мы же говорили про накладные
> расходы при передаче по значению

Я говорю только по поводу возврата структур https://www.opennet.me/openforum/vsluhforumID3/124921.html#249
то есть отвечал вот на это:
> В общем то Си разрешает функциям возращать структуры, но это просто офигительные
> дополнительные расходы на копирование

С передачей всё верно. Если вызываемая функция меняет переданный аргумент и эти изменения не нужны вызывающей стороне, приходится создавать копию. Это дополнительные расходы, но без них запортится оригинал. Иначе передаём по указателю (константной ссылке в С++).

При возврате нет смысла создавать копию.

> Насчет конструктуров и стековых фреймов чет не понял...

Конструктором я назвал функцию, которая возвращает структуру, что бы меньше писать.

Про фреймы просто надо подумать, как в ассемблере будет выглядеть сишный псевдокод из исходного объяснения https://www.opennet.me/openforum/vsluhforumID3/124921.html#348

Вот как оно описано в "System V Application Binary Interface AMD64 Architecture Processor Supplement"

The returning of values is done according to the following algorithm:

2. If the type has class MEMORY, then the caller provides space for the return
value and passes the address of this storage in %rdi as if it were the first
argument to the function. In effect, this address becomes a “hidden” first ar-
gument. This storage must not overlap any data visible to the callee through
other names than this argument.
On return %rax will contain the address that has been passed in by the
caller in %rdi.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 18:16 
Локальные(автоматические) переменные могут и после выхода из функции, до тех пор пока не сбросится стек, это как раз случай возврата большой структуры для которой не хватает регистров

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 18:42 
> Локальные(автоматические) переменные могут и после выхода из функции, до тех пор пока
> не сбросится стек, это как раз случай возврата большой структуры для
> которой не хватает регистров

Не стоит на это полагаться! Прерывание разрушит содержимое стека. System V x86-64 ABI гарантирует всего 128 байт Красной Зоны.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 19:14 
Это уже особенности ОС как я понимаю....


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 19:48 
Особенность ОС это наличие красной зоны, или переключение адресного пространства/стека в обработчике прерывания, или гарантированное отсутствие прерываний. В общем же случае данные за вершиной стека сразу невалидны. И ловить это дело не слишком просто, особенно, если о таком не знать, а под отладчиком оно не проявится. :)

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 19:53 
Скинь ссылку где это описано, я чет с этим не сталкивался

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 31-Июл-21 08:26 
> Скинь ссылку где это описано, я чет с этим не сталкивался

Параграф 3.2.2 The Stack Frame

System V Application Binary Interface
AMD64 Architecture Processor Supplement
Draft Version 0.99.7

https://www.uclibc.org/docs/psABI-x86_64.pdf


"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 31-Июл-21 08:33 
Вот новее версия в исходниках https://gitlab.com/x86-psABIs/x86-64-ABI

Вот pdf версии 1.0 https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0...


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 07:26 
Прокатит, только это тормозной вариант

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 07:31 
Кстати из за таких накладных расходов в Си нельзя массивы передавать по значению, а вовсе не потому что этому что то мешает...

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

Кстати на обьектах в C++ весь это ад с передачей по значению закончился


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 07:41 
Чтобы просто было понятно

Между передачей функции ссылки на структуру и возвратом ссылки на static структуру нет никакой разницы обе структуры будут глобальными


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 08:10 
То есть невозможность передать и вернуть массив по значению это чисто ограничение языка Си, просто его создатели так решили массивы только по ссылкам, а структуры ладно и так сойдет

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 09:36 
Ой, блин, умники.
Во первых вернуть массив из функции возможно во многих ЯП.
Даже в С++, если использовать std::array .

А теперь давай, просвети нас, неразумных. Почему это в С нельзя вернуть массив сам по себе, но если завернуть его в структурку, то можно ?


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 14:34 
std::array это стадартная либа, речь же шла про возможности синтанксиса

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:21 
перечитай свое первое сообщение в этой ветке.
Где там говорилось что речь строго про синтаксис? Где там вообще говорилось про какой-либо ЯП.

Вот так вывалил поток сознания, и потом рассказывает что ему отвечают не то.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 16:48 
Хера память как у рыбки... выше на коммент глянь, кто про C++ и std::array начал

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 17:10 
Хера у тебя соображалка как у морской свинки.
Я же отвечал на твое сообщение, что где-то нельзя вернуть массив из функции.
Я же и привел как пример с std::array. Только вот не я начал, я уже писал в ответ на твое непонятное утверждение.

Что, уже на 2 уровня выше не в состоянии подняться по сообщениям?
Блин, и это недорозумение рассказывает какие растоманы тупые !!!


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 17:33 
Лол што? Что ты привел? std::array который выступает оберткой над обычным массивом? Действительно при чем тут втроенные возможности языка и синтаксис? Гений раста что тут еще скажешь

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 14:38 
Уже ответил читай выше

"Выпуск языка программирования Rust 1.54"
Отправлено n00by , 30-Июл-21 15:59 
> Почему это в С нельзя вернуть
> массив сам по себе, но если завернуть его в структурку, то
> можно ?

"Еще более удивительно (по крайней мере на первый взгляд) то, что а[i] можно записать как *(а+i)" (c) K&R


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:12 
> "Еще более удивительно (по крайней мере на первый взгляд) то, что а[i]
> можно записать как *(а+i)" (c) K&R

i[a] же.

                                                                                         
int a = 123;                                                                        
int *b = &a;                                                                        
0[\b] = 456;   // форумный движок считает b в [] тегом
char* anon[2] =
    {"аноним","аноним"};                                                    
1[anon] = "рулит";                                                                    
  


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 16:43 
Не спойлери, что обращение к массиву тип mas[2] это просто синтаксический сахар над указателем *(mas+2)

"Выпуск языка программирования Rust 1.54"
Отправлено Ф1 , 30-Июл-21 17:37 
В си нельзя вернуть массив из функции тупо потому что он его не может толком отличить от указателя, в раст массив без проблем возвращается

fn tst() -> [i32; 3] {
    [1, 2, 3]
}    

fn main(){
    println!("{:?}", tst());
}  



"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 17:47 
По значению нельзя, но это особенность реализации массива в Си, в той же структуре тот же Си обходится без указателей а просто пакует побайтово

Чтобы такие растоманы не гоняли память туда сюда без толку


"Выпуск языка программирования Rust 1.54"
Отправлено Ф1 , 30-Июл-21 17:58 
> По значению нельзя, но это особенность реализации массива в Си,

Я тебе про это и пишу.

> Чтобы такие растоманы не гоняли память туда сюда без толку

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


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 18:08 
Хм посмотри на массив в структуре который запакован и передается по значению, такая реализация массива через указатель была выбрана во имя производительности ибо массив это самый гоняемый тудасюда тип данных в IPC, TCP/IP, i/o например

"Выпуск языка программирования Rust 1.54"
Отправлено Ordu , 31-Июл-21 15:31 
> Чтобы такие растоманы не гоняли память туда сюда без толку

Оно не гоняет память туда-сюда без толку.

Глянь:

mod tmp {
    pub fn make_array() -> [i64; 128] {
    [-1; 128]
    }
}
fn main() {
    println!("{:?}", tmp::make_array());
}


(make_array засунута в сабмодуль, чтоб rustc её не инлайнил)

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

Если это скомпилировать код выше с --emit=asm, то можно видеть такую штуку:

;; это main, прошу обратить внимание, mangled нехило, но тем не менее main
_ZN3tmp4main17hef74ed440589210dE:
    .cfi_startproc
    subq    $1112, %rsp     ; выделяется память на стеке под возвращаемое значение
    .cfi_def_cfa_offset 1120
    leaq    88(%rsp), %rdi  ; указатель на неё пошёл в %rdi, неявный аргумент для tmp::make_array
    callq    _ZN3tmp3tmp10make_array17h69c0c6c82460a46fE ; вызов make_array
        ...

Если ты заставишь C возвращать из функции объект килобайтового размера по значению, он сделает тебе примерно то же самое: память под возвращаемое значение будет выделять на стеке вызывающий код.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 17:52 
Проще говоря выражение типа int mas[]={1,2,3,4} не создает никакой массив, просто создает указатель mas и выделяет 16 байт памяти и записывает ее адрес в указатель

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 04:30 
Походу тему атаковала нейросеть на самоподдуве. Забавно.

"Выпуск языка программирования Rust 1.54"
Отправлено deeaitch , 30-Июл-21 04:35 
Бросай наркотики и иди читать книжки.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 05:15 
Это юзеры, к сожалению.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноньимъ , 30-Июл-21 05:33 
> Это юзеры, к сожалению.

С трудом верится. Боты ведь на сетях стали последнее время очень правдоподобными, в том смысле что выглядят как идиоты несущие бред.
Но отличить ботов от идиотов и сумасшедших уже очень трудно, если вообще возможно.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 05:38 
Вышки 5G, чипирование... теперь это... завязывал бы ты уже с рентв

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 06:18 
> #[path = concat(env!("OUT_DIR"), "/generated.rs")]

Прикольно, теперь хрустикам можно будет нетривиальные бекдоры без палева хреначить. Первое со вторым дружит надеюсь?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:33 
#include "generated.h"

"Выпуск языка программирования Rust 1.54"
Отправлено Ф1 , 31-Июл-21 10:38 
В раст есть прямой аналог #include из препроцессора C/C++ это макрос include!, с ним тоже будет что-то типа include!("generated.rs"), а конструкция свыше это полноценная загрузка модуля. Ну и напугавшие, как я понял тут всех, макросы concat и env позволяют задать путь в compile time что хоть и коряво, но весьма удобно в C/C++ все это придется выносить в систему сборки. Хотя когда в C++ модули доведут до ума нечто подобное тоже наверняка появится.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:37 
пипец синтаксис...

"Выпуск языка программирования Rust 1.54"
Отправлено Имя , 30-Июл-21 08:38 
В каждой минорной версии что-то добавляют и добавляют.. Он когда-то будет полным? По сложности уже, наверное, соперничает с плюсами, если еще не обогнал.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 10:59 
Нет конечно все менеджеры уверенны что пользователям нужны только новые фичи. И они правы фанатикам нужны именно они. Но нормальным людям работу надо работать, менеджерам это невдомек.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 14:47 
Ну не пользуйтесь новыми фичами, работайте свою работу, кто мешает?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:18 
Отсутствие обратной совместимости? У хрустиков у них же стабилизация функции это целая фича.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 08:54 
У них эпохи придумали для того чтобы даже новые несовместимые компиляторы могли собирать старый код. Вообще адская несовместимость была только до выхода стабильной 1.0 версии.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 09:48 
Забавно видеть как этот недоязык превращается в C++. Забивает в собственный гроб гвозди. Ржавые.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 10:58 
На самом деле это С++ ввел у себя некоторые хайповые фичи. Но это не комплимент срастикам.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:50 
Стоп-стоп, как это - Раст падает до уровня C++?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 16:07 
Привет еще растоненавистникам:) Я с растом уже как 3-4 года)...

"Выпуск языка программирования Rust 1.54"
Отправлено wyry , 14-Дек-21 14:59 
Прям камингаут...

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 17:30 
Не тратьте время на раст, лет через 10 стабилизируют, за это время на С++ еще библиотек напишут на миллиарды долларов, а вызвать С++ код из раста - это приключение, в котором вы не хотите приключаться

"Выпуск языка программирования Rust 1.54"
Отправлено Sem , 30-Июл-21 18:39 
Через 10 лет уже перепишут всё, что можно на раст )))
Шутка конечно, но тенденция есть.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:34 
Мозила показала, что это невозможно, и выгнала растаманов.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:51 
Это ты прочитал в комментах на опеннете?)

"Выпуск языка программирования Rust 1.54"
Отправлено Kuromi , 31-Июл-21 00:05 
Хаха...nope
https://wiki.mozilla.org/Oxidation

Хотя то, что после отделения Раста процесс притормозился (али как обычно заброслии вики обновлять) - факт. Тем не менее WebRender - растовый и он работает.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:53 
Кого стабилизируют-то? Раст вот уже, а C++ уже никогда

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 18:14 
Начал седня изучать раст, первая же проблема - излишне длинный код. Почитал про макросы. Думаю ну ок, можно как-то извернуться, но хотелось бы постфиксные макросы. Почитал про то что постфиксные макросы нужно заключать в блок. Закрыл страницу

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:52 
А конкретнее, где длинный? Может, это ты что-то не так делаешь?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 18:42 
Да здраствует великая Rust!!! Да здраствует язык будущего!!!
Скоро Linux весь на rust перепишут))))

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 30-Июл-21 19:20 
Все 24 млн строк сишного/ассемблерного кода?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:32 
> Скоро Linux весь на rust перепишут

Они свой редох написать не могут...


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:51 
Кто - они? Несколько энтузиастов, которые пишут чисто изучения / прикола ради?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 00:24 
>> Скоро Linux весь на rust перепишут
> Они свой редох написать не могут...

Ты уже довел Hurd до ума?


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 02:44 
Что ты мелишь? Hurd еще в 90-е рипнули в угоду GNU/Linux даже Столлман об этом говорил в фильме про Linux...

А так да уже давно есть работоспособный Minix...Intel не даст соврать... смешно конечно же наблюдать как дедушка Таненбаум со студентами и аспирантами смогли в микроядро, а толпы растоманов только мечтают о Redox...

Код то хоть не из Minix воруете? А?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 03:25 
> Что ты мелишь? Hurd еще в 90-е рипнули в угоду GNU/Linux даже
> А так да уже давно есть
> отмазки и лютый бред поскипаны.

Ясно. Не осилил. Так и скажи - твои отмазки никому не интересны.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 04:44 
Лол))) вспомни еще мультикс 60-х годов... ее Кен Томпсон и Денис Ритчи неосилили

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 04:45 
Но про Minix ты тактично умолчал))) эх растоманы чуть что в кусты и классическое вы все врети

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 13:22 
> Но про Minix ты тактично умолчал)))

Зачем мне комментировать твой бред? Тебя спрослили за Hurd, а ты начал блеять за что-то там (при этом и рядом не стояв).
> эх растоманы чуть что в кусты и классическое вы все врети

Какой занимательный (нет) диалог шизофреника с лишь ему слышными голосами ...


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 15:28 
Ну че там скоро Redox достигнет уровня Minix?

Вообщем криворучки за которых раст все сделает сам, вашу недоось ждет судьба все того же Hurd который так и не вышел


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 19:07 
Ты что куришь? Кому вообще не плевать на Redox?

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 20:40 
Растоманам же

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 19:32 
>Rust 1.54, основанного проектом Mozilla

Автор новости ошибся. Основал Раст некто Грейдон Хоар. Грейдона Хоара некоторая группа растаманов вытеснила - к его мнению не прислушивались, и он справедливо обидевшись ушёл.

>при этом обходясь без использования ... runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Рантайм в Расте есть. Есть только один язык программирования в, котором нет рантайма, это чистый Си!

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


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 30-Июл-21 20:40 
Вот эти штуки без рантайма. https://rust-lang-nursery.github.io/rust-cookbook/concurrenc...

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 30-Июл-21 20:42 
Ошибся, там вроде токио используется.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 21:49 
> Рантайм в Расте есть. Есть только один язык программирования в, котором нет рантайма, это чистый Си!  
> ... и скажет что при таких-то и таких-то опциях компилятора рантайма не будет

О, очередных опеннетных бала^W теоретиков подвезли. Расскажи нам о том, как freestanding в gcc не требует memcpy, memset, memmove и опций компилятора, не стесняйся!


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 30-Июл-21 23:56 
Что такое "рантайм" в твоем понимании?
В моем - что-то будет вызываться просто потому что (gc и прочее недоразумение)
В Расте же вызывается только то, что вызвал программист

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 07:55 
у Вас большие познания (нет)

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 19:14 
сорян, но если у вас пушинки libc или rust std - рантайм и огромные so-дополнения, то что тогда не рантайм
условно тру рантайм - это монстры уровня джавы, ноды
в сравнении с ними rust std или libc просто незаметные песчинки на фоне огромной пустыни

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 04:18 
Много вы на чистом Си напишете без стандартной библиотеки? (Нет, ну можно, если вы пишете ядро ОС, но там и ассемблер понадобится.)

Чем тот же glibc не "рантайм"?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 06:28 
>Чем тот же glibc не "рантайм"?

Тем, что в чистом Си glibc не часть языка.


"Выпуск языка программирования Rust 1.54"
Отправлено Ф1 , 31-Июл-21 10:45 
Ну так и у раста есть аналог "чистого си" no_std https://docs.rust-embedded.org/book/intro/no-std.html

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 12:27 
>Надеюсь, сейчас не выскочит растаман и скажет что при таких-то и таких-то опциях компилятора рантайма не будет. Не надо, нам это не интересно.

смотри выше.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 12:42 
Понятно цитируемый аноним просто тупо врет что только си язык без рантайма.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 13:29 
>>Надеюсь, сейчас не выскочит растаман и скажет что при таких-то и таких-то опциях компилятора рантайма не будет. Не надо, нам это не интересно.
> смотри выше.

На что именно? На детский сад "Тама нету! А если кто-то даже и покажет что есть, то это НЕ СЧИТАИЦА!"?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 31-Июл-21 13:56 
Стандартная библиотека - часть Си и входит в стандарт. https://ru.wikipedia.org/wiki/Стандартная_библиотека_языка_Си

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 17:29 
Деннис Ритчи с тобой не согласен.

"Выпуск языка программирования Rust 1.54"
Отправлено Ordu , 31-Июл-21 15:04 
> Надеюсь, сейчас не выскочит растаман и скажет что при таких-то и таких-то опциях компилятора рантайма не будет. Не надо, нам это не интересно.

В C ты тоже не сможешь собрать бинарь без libc.so не передавая дополнительных опций компилятору. Если твоя программа начинается с main, то значит в ней уже есть рантайм -- к ней линкуется crt0.o, crti.o, crtn.o плюс-минус ещё какие-то объектные файлы. Попробуй как-нибудь в образовательных целях слинковать C'шную программу вызовом ld. Вот не gcc запускай линкером, а ld. Много чего нового узнаешь, если слинкуешь.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним зеленый , 31-Июл-21 14:14 
Что делать если ты пряморукий, но язык тебе мешает? https://en.wikipedia.org/wiki/C_standard_library#Concepts,_problems_and_workarounds

Есть эффективный способ выучить баги Си/С++ чтобы их эффективно обходить и не отстрелить конечности?


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 17:30 
>Си/С++

Никогда так не пиши. Это два совершенно разных языка.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 19:17 
Почему же?
Да, это условно разные языки, но один - подмножество другого и основные проблемы у них общие, поэтому в некоторых контекстах это очевидно верное написание

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 09:15 
Абревиатура "C/C++" выдумана Майкрософтом в её ВижуалСтудии. Отцы-юниксоиды из Белл Лабса никогда так не писали.

Абревиатура "C/C++" - маздаевский высер.


"Выпуск языка программирования Rust 1.54"
Отправлено fsb4000 , 01-Авг-21 15:23 
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2644.pdf

иди, жалуйся в комитет C(WG14), что они не знают как писать C/C++.

Отцы основатели теперь пишут С/С++.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 03-Авг-21 15:37 
Ни бзди.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 31-Июл-21 20:39 
C++ включает в себя в полном обьеме Си

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 31-Июл-21 23:29 
Не совсем.
Например, в C я могу присвоить указатель на void* типизированному указателю, а в C++ (без явного кастинга) - нет.
Или, скажем, вложенные структуры по разному работают.
Короче, дофига мелких отличий на самом деле.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 01-Авг-21 01:41 
C++ поддерживает Си на достаточном уровнем чтобы юзать Си библиотеки как родные без изменений кода, а это говорит о многом

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 08:40 
я из Паскаля могу юзать Си библиотеки как родные, и что?!

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 01-Авг-21 23:38 
Для маленьких растоманов... на уровне исходного кода юзать, то есть буквально смешивать Си и C++ и все будет ок

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 06:09 
> на уровне исходного кода юзать, то есть буквально смешивать Си и C++

Не учи детей плохому, они ведь поверят, а потом огребут на линковке :) когда случится "симбол нот фаунд". Ты, надеюсь, в курсе, что манглинг у них разный? И почему в сырцах идёт явное указание, что мы собираемся компилировать - си или плюсы.


"Выпуск языка программирования Rust 1.54"
Отправлено Совершенно другой аноним , 02-Авг-21 08:59 
>> на уровне исходного кода юзать, то есть буквально смешивать Си и C++
> Не учи детей плохому, они ведь поверят, а потом огребут на линковке
> :) когда случится "симбол нот фаунд". Ты, надеюсь, в курсе, что
> манглинг у них разный? И почему в сырцах идёт явное указание,
> что мы собираемся компилировать - си или плюсы.

#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus*/

...

#ifdef __cplusplus
}
#endif /*__cplusplus*/


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 02-Авг-21 19:16 
Если чет не так, на уровне синтаксиса отгребают на стадии компиляции, линковка то дела уже ABI

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 01-Авг-21 23:41 
Любую функцию Си можно встроить в качестве метода в обьект C++ просто спопипастив... где еще так возможно?

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 06:17 
> спопипастив

Попой пишешь? Оно и заметно.


"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 02-Авг-21 19:13 
Велосипедоизобретатель?

"Выпуск языка программирования Rust 1.54"
Отправлено Ф1 , 02-Авг-21 20:01 
В с++ такое невозможно, вот эта вполне легальная Си строка

int *arr = malloc(3 * sizeof(int));

не соберется.

"Выпуск языка программирования Rust 1.54"
Отправлено Хан , 02-Авг-21 21:02 
С каких пор malloc не void? Где приведение типа? Это костыль а не Си-код

"Выпуск языка программирования Rust 1.54"
Отправлено Ф1 , 03-Авг-21 08:27 
> С каких пор malloc не void? Где приведение типа? Это костыль а
> не Си-код

Это валидный си код который компилируется с  -Wall -Wextra -pedantic без писка, так что тезис о копипасте несостоятелен. Но соглашусь с тем что из C++ си код очень легко использовать, но это также не отменяет того, что языки уже разошлись и вряд-ли в ближайшем будущем сойдутся до полной совместимости.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 08:36 
Нет. Читайте спеки.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 01-Авг-21 19:05 
https://www.acm.org/media-center/2021/july/dissertation-awar...

In his dissertation, Jung tackles this challenge by developing semantic foundations for Rust that account directly for the interplay between safe and unsafe code. Building upon these foundations, Jung provides a proof of safety for a significant subset of Rust. Moreover, the proof is formalized within the automated proof assistant Coq and therefore its correctness is guaranteed. In addition, Jung provides a platform for formally verifying powerful type-based optimizations, even in the presence of unsafe code.

Осталось подождать срыва покровов от местных экспертом с девятью классами образования.


"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 01:52 
Что сказать-то хотел? Ещё не научился выражать мысли?

"Выпуск языка программирования Rust 1.54"
Отправлено Ага , 02-Авг-21 02:51 
По твоему комменту видно, что ты не научился работать мозгом.

"Выпуск языка программирования Rust 1.54"
Отправлено Аноним , 02-Авг-21 04:57 
И только старый попугай вдруг громко крикнул из ветвей (с): "...не научился работать мозгом!".

"Выпуск языка программирования Rust 1.54"
Отправлено iZEN , 06-Сен-21 19:35 
Собрал на FreeBSD из порта lang/rust. Пакет rust-1.54.0_1 при сборке выжрал 14 ГБ ОЗУ (82%) и 1.4 ГБ SWAP. Я опешил от такого.