LINUX.ORG.RU

Качество книжек по Rust

 


1

4

Решил посмотреть что есть на русском языке по Rust для старта, и каково качество оригинала и перевода. Нашел книжку https://doc.rust-lang.ru/book/, решил посмотреть, хватит ли моих утомленных мозгов чтобы осилить введение в язык. Споткнулся в самом начале на элементарном примере:

io::stdin().read_line(&mut guess)
Вот что там написано:

Главная задача read_line — принять все, что пользователь вводит в стандартный ввод, и сложить это в строку (не переписывая её содержимое), поэтому мы передаём эту строку в качестве аргумента. Строковый аргумент должен быть изменяемым, чтобы метод мог изменить содержимое строки.

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

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

Далее:

одним из главных преимуществ Rust является безопасность и простота использования ссылок. Чтобы дописать эту программу, вам не понадобится знать много таких подробностей. Пока вам достаточно знать, что ссылки, как и переменные, по умолчанию неизменяемы. Соответственно, чтобы сделать её изменяемой, нужно написать &mut guess, а не &guess. (В главе 4 ссылки будут описаны более подробно)

Что значит, что по умолчанию ссылки неизменяемы? Ведь мне только это достаточно знать. Неизменяем «адрес», хранимый в ссылке, или неизменяемы данные, на которые указывает ссылка? Что делает синтаксис «&mut guess» ? Он дает меняться «адресу», чтобы ссылка могла указываеть на другую область памяти, или дает меняться данным, на которые указывает ссылка? Почему, блин, с самого начала людей оставляют в неизвестности, не объясняя что конкретно происходит? Концепция владения в гл. 4 тут вообще не при чем.

Почему я пишу слово «адрес» в кавычках? Потому что я не смог понять, что такое ссылка. Поэтому я не понимаю механизм работы ссылки:

  • Ссылка Rust хранит адрес в памяти, где хранятся данные?
  • Ссылка Rust хранит адрес в памяти, где находится внутреннее описание переменной, на которую указывает ссылка? Через которое уже будет доступ к памяти, где хранятся данные?
  • Ссылка Rust вообще не хранит адрес в памяти, а хранит некий номер/дескриптор из какой-то таблицы доступных переменных, по которой получается адрес в памяти? Но тогда это адрес чего - самих данных или внутреннего описания переменной, по которой доступен адрес самих данных?
  • Может быть, конструкция вообще другая?
★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

The full job of read_line is to take whatever the user types into standard input and append that into a string (without overwriting its contents)

Корявый перевод.

The & indicates that this argument is a reference, which gives you a way to let multiple parts of your code access one piece of data without needing to copy that data into memory multiple times. References are a complex feature, and one of Rust’s major advantages is how safe and easy it is to use references. You don’t need to know a lot of those details to finish this program. For now, all you need to know is that, like variables, references are immutable by default. Hence, you need to write &mut guess rather than &guess to make it mutable. (Chapter 4 will explain references more thoroughly.)

Что тут путает? Референс это one piece of data without copying. Как и переменные, ссылки могут быть мутабельные. Никакой арифметикой указателей здесь и не пахнет.

что такое ссылка

Зависит от контекста. В целом это такой тип данных. В простом случае это типизированный указатель, &i32 состоит только из указателя. А вот &str ещё знает свою длину. Там может быть много разных полей внутри ссылки. И ссылка должна выполнять ограничения принятые для всех ссылок. К примеру нельзя внезапно дропнуть память, хоть под &i32, хоть под &str.

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

от оригинала сильных отступлений не замечено

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

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

A reference is like a pointer in that it’s an address we can follow to access the data stored at that address; that data is owned by some other variable. Unlike a pointer, a reference is guaranteed to point to a valid value of a particular type for the life of that reference.

Что тут непонятного?

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

Я понимаю, что вам трудно сделать интеллектуально усилие, и подумать немного наперед. Я вам подскажу: поживете еще немного, и вас будут хуе$осить веселые владельцы китайского языка, потому что это уже язык международного общения. 你應該去找一個有大陰莖的俄羅斯人外國人。А вы его - вот так сюрприз - не знаете, а надежды на автоматический перевод не оправдываются, потому все тонкости выражений вы все равно не поймете. А вам будут сувать pdf-ки с документацией на китайском и удивляться: как это так вы не понимаете? Ой, какой же вы тупой, китайский не выучили.

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

Непонятно что вы делаете на русскоязычном ресурсе по Linux.

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

Идите в английский интернет, там вам будет лучше.

Не говорите куда идти мне и я, так и быть, не скажу куда идти вам. Хотя, вы и так наверняка знаете заведения где обучают английскому языку.

Зачем здесь флейм разводить

Этот кусочек перед зеркалом повторите. Никто вас не принуждал бежать на ЛОР и плакать о том, что плохие люди не хотят для вас бесплатно официальную документацию переводить.

рассказывать как вы прекрасно знаете инглиш

Я никому ничего не рассказывал. У меня базовый уровень. Даже никаких официальных сертификатов нет.

Нам от этого ни холодно ни жарко.

И много вас там в одной голове?

Хотите конструктивного общения - пишите на русском или проваливайте.

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

китайского языка, потому что это уже язык международного общения

В какой реальности? Китайский кроме, собственно, китайцев знают единицы, которые так или иначе с Китаем связаны. Потому что это общепризнанный самый сложный язык для изучения.

вам будут сувать pdf-ки с документацией на китайском

Если ваши фантазии внезапно станут реальностью. Я не побегу на ЛОР плакать про качество документации к Х из-за того, что она на китайском, а я его не знаю. Это моя проблема, что я его не знаю и моё сознательное решение не изучать китайский. А значит я либо откажусь от чтения документации, либо найду человека, знающего русский и китайский и заплачу ему за перевод.

andalevor ★★★
()

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

Главная задача read_line — принять все, что пользователь вводит в стандартный ввод, и сложить это в строку (не переписывая её содержимое), поэтому мы передаём эту строку в качестве аргумента. Строковый аргумент должен быть изменяемым, чтобы метод мог изменить содержимое строки.

Короче, эта функция берёт то, что вводит юзер, и не модифицируя кладёт в переменную, которую как раз и модифицирует.

Я программист, я так вижу.

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

перевод как цензура(точнее фильтр неочевидной эвристики)

зы/ читать первые издания если текст ужО издаётся не первым изданием - что не который признак что весчь возможно и осмысленная

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

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

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

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

Я нищеброд, у меня денег нет. Поэтому я наоборот готов озвучить сумму для выплаты мне за то что я потратил свое время на чтение документации очередного трендового языка. Предлагаю вам оплатить.

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

А если вам платить нечем, что вы будете делать? Так и останетесь в неизвестности о новых технологиях? Китайцы вперед убегут, а вы будете в уголке сидеть и бормотать: «Я не побегу на ЛОР плакать про качество документации к Х из-за того, что она на китайском, а я его не знаю».

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

Короче, эта функция берёт то, что вводит юзер, и не модифицируя кладёт в переменную, которую как раз и модифицирует. Я программист, я так вижу.

Я тоже так думал, но нет. Не кладет в переменную, а добавляет к значению переменной (если это строка). Он слово append перевел как «сложить», а должен был как «добавить».

Качество книжек по Rust (комментарий)

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

Я нищеброд, у меня денег нет.

Попробуйте на работу устроиться.

выплаты мне за то что я потратил свое время на чтение документации

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

А если вам платить нечем, что вы будете делать?

Как это нечем? Я же работаю. Будет мало денег – сменю работу, найту подработку. Если б я не захотел тратить деньги, и если представить на секунду, что ваши фантазии про господство китайского языка оказались бы реальностью, то пошёл бы учить китайский. Пригодились бы знания и в чтении этой документации, и другой, и в общении. В контексте перевода документации я мог бы попробовать найти людей с похожими интересами/нуждами и совместно профинансировать перевод. В общем, много чего можно придумать если есть желание действительно что-то сделать. Чего я точно не стал бы делать, так это бегать по разным интернет ресурсам и обвинять всех вокруг в том что они умнее и богаче меня, а я вот сижу ничего не хочу делать и хочу чтобы мне всё упало сверху и бесплатно.

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

Я нищеброд, у меня денег нет.
Попробуйте на работу устроиться.

Спасибо, мне моих двух уже хватает. Третью я не вывезу.

Вам определённо стоит попробовать работать.

Вам определенно стоит перестать фантазировать о работе и достатке. Это совершенно разные вещи.

Я же работаю. Будет мало денег – сменю работу, найту подработку.

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

хочу чтобы мне всё упало сверху и бесплатно

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

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

Что тут непонятного?

Всё. Совершенно непонятно что такое reference и как оно на самом деле работает. Написано что это как указатель, но не указатель и всё. Тогда что это, жёваный крот, если это не указатель?

Это то же самое, что в учебнике по электронике написать, что электрический ток это как бы жидкость, но в отличии от жидкости течёт не по трубам а по проводам.

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

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

Скорее всего, где-то дальше будет про ссылки расписано подробнее.

Ссылки в расте примерно такие же, как в плюсах. После компиляции они превратятся в указатели. Но на уровне языка, в отличии от указателей, они всегда «валидны» — всегда указывают на существующий объект, всегда правильно выровненые, не могут быть нулевыми + расорвские особенности, каждая ссылка имеет какой-то лайфтайм, не превышающий время существования того объекта, на который они указывают.

Есть еще “fat pointers” — это ссылка состоящая из двух указателей или указателя и длины, указывающая на dst.

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

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

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

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

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

фантазировать о работе и достатке

Очевидно, доход и достаток это разные вещи. Кому-то может и 50тыр достаточно для комфортной жизни, а кому-то 500 не хватает. Но разбираться в том сколько вы волучаете и куда тратите мне лично не интересно.

вы же почему-то не захотели оплатить мое время за то что я его потратил на ваш любимый язык.

Это не мой любимый язык. Но ваши ообщения меня разжалобили. Судя по этим сообщениям ваше время стоит недорого. Думаю, 100р будет достойной оплатой. Если устраивает, пишите номер.

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

Там написано как этим reference начинающий в Rust разработчик должен пользоваться. Если интересует во что этот референс превращается после компиляции, то эту информацию наверняка тоже можно найти. На пример в документации на разработку компилятора Rust. Стоит ли такие потроха добавлять в книгу для начинающего разработчика это как минимум спорный вопрос. Кстати, я бы посмотрел на книгу для начинающих по С, где подробно было бы расписано во что превращается указатель после компиляции.

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

Там написано как этим reference начинающий в Rust разработчик должен пользоваться.

Я вообще считаю что люди не имеют права пользоваться чем-либо, если они не понимают как оно на самом деле работает.

Высерами «начинающих Rust разработчиков» (а других и нет) засрано всё вокруг, и по количеству идиотизма и невежества в коде они превосходят даже «энтерпрайзные» поделия на жабе и продукты вебмакак.

Кстати, я бы посмотрел на книгу для начинающих по С, где подробно было бы расписано во что превращается указатель после компиляции.

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

А если ты не знаешь как компьютер устроен, и что там вообще нет никаких «объектов», «reference» и прочих абстракций - то в программировании тебе вообще делать нечего априори, и никакой сраный раст тебе никак не поможет написать хоть что-то полезное.

Stanson ★★★★★
()
Главная задача read_line — принять все, что пользователь вводит в стандартный ввод, и сложить это в строку (не переписывая её содержимое), поэтому мы передаём эту строку в качестве аргумента. Строковый аргумент должен быть изменяемым, чтобы метод мог изменить содержимое строки.

т.е. Если строку менять нельзя, то нужно вернуть адрес новой стоки. Так ?

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

В любой книге по С написано что указатель - это адрес сущности

Ну это же неправда! Начиная с такой простой вещи как NULL, продолжая типами, сравнениями и алиасингом, заканчивая лайфтаймами объектов, на которые они ссылаются.

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

NULL это всего лишь адрес равный 0. Кроме очень редких архитектур.

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

Сравнение указателей - просто сравнение беззнаковых целых, которыми являются адреса.

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

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

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

NULL это всего лишь адрес равный 0.

Ну так и какая сущность по этому адресу?

Сравнение указателей - просто сравнение беззнаковых целых, которыми являются адреса.

Неправда. Вот цитата из стандарта: Two pointers compare equal if and only if both are null pointers, both are pointers to the same object (including a pointer to an object and a subobject at its beginning) or function, both are pointers to one past the last element of the same array object, or one is a pointer to one past the end of one array object and the other is a pointer to the start of a different array object that happens to immediately follow the first array object in the address space.

Как видим, одинаковые адреса не обязательно дают равенство указателей.

Лайфтайм - это всего лишь время валидности адреса.

Не адреса, а указателя. Адрес всегда остаётся адресом, есть по нему объект или нет. Именно поэтому указатель не является адресом.

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

Я вообще считаю что люди не имеют права пользоваться чем-либо, если они не понимают как оно на самом деле работает.

Вы, батенька, слишком суровы. Тётеньки с правами на машину вас не поймут.

А если ты не знаешь как компьютер устроен, и что там вообще нет никаких «объектов», «reference» и прочих абстракций - то в программировании тебе вообще делать нечего априори, и никакой сраный раст тебе никак не поможет написать хоть что-то полезное.

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

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

Ну так и какая сущность по этому адресу?

Какая угодно может быть. Во многих микроконтроллерах там таблица адресов прерываний, например.

В общем и целом, практически везде адрес 0 используется ОС или железом, и для приложений бесполезен, поэтому его можно использовать как «плохой адрес». Иногда таким плохим, негодным, адресом бывает 0xFFFFFFFF или ещё какое число. Так что, если пишется реально кроссплатформенный код для всего, от мелкоконтроллеров на гарвардской архитектуре до традиционных писюков, то стоит воздержаться от if(!addr) или addr = 0. Если ты пишешь для писюка, то это не обязательно.

Неправда. Вот цитата из стандарта:

Пофиг. if( (uintptr_t)addr_end > (uintptr_t)addr_cur) len = (uintptr_t)addr_end - (uintptr_t)addr_cur

Как видим, одинаковые адреса не обязательно дают равенство указателей.

Не видим. Указатель это адрес. Адрес это беззнаковое целое. Если компилятор умничает, то затыкаем его либо кастом в беззнаковое целое, либо соответствующим ключиком если есть. Каст предпочтительнее по очевидным причинам.

Не адреса, а указателя. Адрес всегда остаётся адресом, есть по нему объект или нет. Именно поэтому указатель не является адресом.

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

Указатель - это адрес.

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

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

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

Другие, судя по вашим словам, вас не очень ценят. Так что если вы себя очень цените, то сами себе и заплатите. Если каждую секунду будете себе выплачивать по 100р, то справитесь всего за полтора часа.

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

затыкаем его либо кастом

Ну то есть делаем его не-указателем. Потому что указатель - не адрес, и с указателем такое не проходит.

Указатель это всегда адрес. А лайфтайм это всего лишь указание

Ну так откуда у адреса лайфтайм взялся?

Указатель - это значение адреса плюс тип плюс лайфтайм плюс отсутствие алиасинга с несовместимым типом.

Это чисто на усмотрение программиста.

с лайфтаймом можно обходится весьма вольно.

UB - это не «на усмотрение программиста». Компилятор вправе предполагать, что программа корректно пользуется указателями.

Указатель - это адрес.

Не ведёт себя как адрес - значит не адрес.

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

Я вообще считаю что люди не имеют права пользоваться чем-либо, если они не понимают как оно на самом деле работает.

Ну и как, сможете в деталях рассказать как устроены все ваши бытовые и электронные приборы, софт внутри них, автомобили, самолёты, поезда?

Высерами «начинающих Rust разработчиков»

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

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

Ну то есть делаем его не-указателем. Потому что указатель - не адрес, и с указателем такое не проходит.

Абстракция абстракции головного мозга? адрес в unsigned int остаётся адресом и unsigned int всё так же является указателем если там хранится адрес а не что-то ещё.

Ну так откуда у адреса лайфтайм взялся?

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

UB - это не «на усмотрение программиста».

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

Единственное UB которое только можно высостать из пальца - это например когда в даташите на процессор указано что «on power up this register will have random value». Да и то оно вполне defined.

Не ведёт себя как адрес - значит не адрес.

Адрес для CPU ничем не отличается от обычного числа. И хоть 100500 абстракций навыдумывай, CPU на это совершенно наплевать.

Адрес ведёт себя так, как задумано разработчиком CPU. Всё остальное - невежество и розовые пони.

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

Ну и как, сможете в деталях рассказать как устроены все ваши бытовые и электронные приборы, софт внутри них, автомобили, самолёты, поезда?

Да. А что такого-то.

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

Да зачем, блин, вообще выбирать между высерами? Копрофилия - это психическое заболевание, а не «ориентация».

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

Всё. Совершенно непонятно

Передача по ссылке и по значению. Базовые понятия знакомые любой php макаке.

Область видимости переменных это базовая концепция яваскриптизеров.

Референс в rust это таки ссылка просто отображенная в определённую область видимости (scope) с учётом механизма владения (ownership).

Т.е. умножаем php на js получаем rust. Что тут непонятно C программистам? :)

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

Да. А что такого-то.

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

Да зачем, блин, вообще выбирать между высерами?

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

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

strict aliasing и lifetime не чисто виртуальные концепции которые существуют лишь в распечатке стандарта, компилятору нужно как то «интерпретировать» код для оптимизаций. В его «виртуальной машине» эти правила существуют.

https://godbolt.org/z/nfTvG1xhh

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 4)
Ответ на: комментарий от andalevor

Я забыл уже больше, чем ты будешь когда-нибудь знать.

Но есть вещи, которые мне не до конца непонятны. Например - как Rust Evangelism Strike Force бабло переводит с запада в РФ чтобы вы засирали почти все околопрограммистские форумы своим нахер никому не нужным растом?

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

Гляжу на компилятор C sdcc, например.

Существования альтернативных компиляторов никак не отменяет того что все эти условности типа «указатель это не адрес» реально используются популярными компиляторами.

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

Это тоже никак не виляет на реальность всяких алиасингов из стандарта.

Не интересуюсь мелочевкой. Для Windows есть продолжения LCC в виде Pelles C Compiler, даже со своей IDE, а для UNIX есть PCC. PCC даже использовался в OpenBSD. Думаю они тоже не содержат подобных оптимизаций.

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

Другие, судя по вашим словам, вас не очень ценят.

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

Так что если вы себя очень цените, то сами себе и заплатите. Если каждую секунду будете себе выплачивать по 100р, то справитесь всего за полтора часа.

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

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

unsigned int всё так же является указателем

Опа, спешите видеть, unsigned int это указатель! У вас, однако, о-о-о-очень широкий взгляд на указатели. Намного шире, чем в стандарте языка Си.

Лайфтайм - это чисто умозрителная концепция

Как и указатель (не путать с адресом)

придуманный неосиляторами

Которые написали стандарт языка с указанием всех UB (не путать с implementation-defined behavior)

Адрес для CPU ничем не отличается от обычного числа.

Потому что является числом - номером ячейки в памяти. Указатель же адресом не является.

хоть 100500 абстракций навыдумывай, CPU на это совершенно наплевать.

Конечно, наплевать, ведь CPU оперирует адресами. В отличие от Си, в котором указатели. Для CPU int* и float* не отличаются, а для программы на Си это разные вещи.

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

Намного шире, чем в стандарте языка Си.

Мне совершенно наплевать на стандарт языка Си.

Указатель же адресом не является.

Продолжайте верить в эту херню.

Для CPU int* и float* не отличаются

А должны?

а для программы на Си это разные вещи.

(float*)int_ptr или (int*)float_ptr И любители абстракций со своим мозгоклюйством идут лесом.

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

Я забыл уже больше, чем ты будешь когда-нибудь знать.

Главное таблетки пить не забывайте.

вы засирали почти все околопрограммистские форумы

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

andalevor ★★★
()