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)
Ответ на: комментарий от andalevor

Эт какие языки у которых не проблем с памятью и при этом позволяют компиляторам производить такой же шустрый код как у C/C++/Rust?

Из относительно живых паскаль(fpc и delphi) и ада. У них меньше проблем с памятью чем у C/C++, но нет к сожалению safe режима и накосячить с памятью гораздо проще чем в rust.

Из не выстреливших DLang (тут конечно gc мешает, но он там достаточно управляемый, хотя без gc на нем и можно писать но это очень грустно).

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

вот кстати. насчет фич blame питона – у меня есть где-то диск с ABC досовским 1992 года, и примерно 1993-1998 про развитие питоновское, всякие ABC, лого там и т.п. – по моему, стало только хуже и запутанней. не считая того что ABC это несчастные 160-300k максимум.

еще из ностальгического: потянуло вдруг перечитывать книжки с которых начинал программировать с пяти лет вхождение в (1984.5), ну и более менее серьезно с 13 лет(1992.5):

  • Кларенс Джермейн, «Программирование под OS/360» – только потом спустя лет 10-15 узнал что она тётка

плюсы: очень практичное погружение в регистры и лампочки, перфокарты, монитор PL/I и среду JCL, вот это все. минусы: осталось где-то раздобыть живой ос ЕС хотя бы дабы потыкать в отладчике (мечта сбылася в 1988, где-то так)

  • Йенсен, Вирт «Программирование на языке Паскаль» – совсем не рекомендую эту книгу, нужно было начинать с «систематического программирования»,«алго+структ=прог» для модулы-2 либо паскакаля, либо с проекта оберона (в 1986 еще не наткнулся на лилит и церес, жаль – как и на меса или цедар) либо с изначального pint/pcom реализации. вот внезапно, почти любая другая книга того же вирта про реализации паскаля лучше чем эта. ну еще Mesa, Cedar из PARC LABS практически модула-2 с сопрограммами с другим синтаксисом, тоже отлично зашла.

но тогда по паскалям была книжка только эта. там было несколько переизданий, более новое переиздание этой книжки вот это но это уже новодел 1989+, у меня было что-то более кондовое ~1980..3 похожее на оригинал 1974 года – синяя такая книжечка в мягкой обложке.

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

минусы: все остальное. в духе книжек Фаронова, Дьяконова изучают синтаксис и разжевывают синтаксис вместо семантики. у Дьяконова впрочем книжка про форт есть прикольная с алгоритмом рунге-кутта в 6 строчек на linenoise :))

в общем, в духе хаскельнутого – изучают факториалы. книжка оставила впечатление непоянтности как там собственно сделать что-то полезное, собрать, скомпилять, слинковать, запустить (Джейрмейн как раз про это все подробно расказывала на примере PL/I и JCL, да). и почему например write/read/{,ln} – это рантайм с переменным числом параметров. а все остальное – компайлтайм и где там модули и стандартная библиотека в паскале.

в общем, такое изложение про такой ISO паскаль удивило своей непрактичностью, но идея «что-то в этом есть, только нужна нормальная модульность» – осталась.

  • уже потом в 13 лет обнаружилась желто-белая книжка про паскаль Доналда Алкока «Язык Паскаль в иллюстрациях». вот ссылка на old-dos – внезапно, в библиотеке обнаружил много книжек тех времен, по которым тогда учился, и даже сканы журналов того времени.

ОЧЕНЬ доступное и наглядное изложение – переменных как ящички и указатели-стрелочки, базовые структуры данных типа деревья, списки, деки, и прочие хеш-таблицы — с отрисовкой стрелочками что при алгоритмах там с указателями происходит.

нужно быть полным идиотом чтобы с такого наглядного объяснения и ничего не понять.

там кажется был турбо паскаль более модульный для иллюстрации, так что после этого смотивировало поковыряться заново с паскакалем Turbo 5.5 (у которого уже были объекты) и новее, и вообще заново попробовать. тот же Think Pascal и например модулу.

модула TopSpeed зашла даже лучше паскалей. до ады правда, в этот заход не добрался (а обероны еще не вышли).

anonymous
()
Ответ на: комментарий от anonymous
  • еще была какая-то манга по бейсику от издательства МИР годов 1988..1989 с роботами. бейсик там какой-то MSX и вообще суксь, а роботы прикольные, и мангу рисовал автор в клевом стиле.

  • из первых книжек: Б.Керниган, Р.Пайк «Практика программирования на языке С», Мартин Болски «Мова программування Си».

первая как решебник с примерами, которая в отличие от академичного Вирта с Йенсеном мотивировала делать что-то полезное (правда компа не было, и я «тоже был в компьютерном городе» и клеил себе картонные клавы из папье-маше и энциклопедил профессора Фортрана своими энциклонгами, и отлаживался «в голове»),

вторая похожа по формату на русско-болгарский разговорник с примерами параллельных текстов. прочитал обе и понял что программирование как-то более понятное, чем болгарский :)))

  • еще пара книжек Фаронова про фортран 77, кажется.

  • во второй заход в 13 лет: Лео Броуди, «thinking forth», «образ мышления форт» линк и В. П. Дьяконов «Форт системы программирования персональных ЭВМ» линк, Тузов В.А. «языки представления знаний» линк ну и конечно С. Баранов «Язык форт и его реализации» линк и Таунсенд, Фохт линк

  • еще в детстве в 8-13 лет я интересовался структуральнейшей лингивистикой и разбором текста на компьютере. «Язык и компьютер» была такая книжка про анализ оттенка текста, настроения, авторства. очень наглядная.

  • «Язык ЛОГО» для компьютера Правец на болгарском и русском, – там была реализация для то ли Агата, то ли и правда Правец, в общем, Apple ][ который на 6502 и ЛОГО с ключевыми словами на русском языке в духе питоновского ABC: это черепашка :параметры :блоки ... это ВСЕ

  • ABC, опять же. впервые столкнулся в 1993 году с какой-то версией под ДОС.

после этого с человекочитаемостью питона все было только хуже.

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

  • из ассемблеров тогда было штук 5, наверное одним из первых был Z80 (если не считать КР580 и ЮТ-88, Радио-86РК и прочие микроши с полетами на луну по калькулятору из техники молодежи)

  • ассемблер для Z80 помню что изучал по этой книжке: линк

The complete SPECTRUM ROM disassemble Dr Ian Logan & Dr Frank O’Hara

Листинг дизассемблирования ROM Спектрума. 1983

или другой к ней в комплекте, с перечнем опкодов.

  • в каком-то ZX review кажется напечатали монитор и отладчик , а затем ассемблер и дизассемблер в хекскодах.

** дизассемблера на моем спектруме не было, поэтому взял обе книжечки, тетрадочку и тонкие гелевые ручки с разноцветными фломастерами. и за пару дней набил 16k и дизассемблировал вручную, в тетрадочке. в духе sourcer-а с разноцветными гиперссылками. всякие RST 8 и прочие – откомментил по книге Логана и О’Хары.

  • амижный ассемблер под мотороллеры mc68k изучал по какому-то файлу про то как писать дёмки.

  • к 15 лет знал штук 15 разных ассемблеров.

  • до лиспа и пролога во второй заход руки опять не дошли, а жаль.

C++ начал как раз тогда тыкать, лет в 13 году в 1992-1993. но пользы от него вообще не понял. тупо мои программки на паскале и модуле для физического моделирования тогда быстрее и работали и конпелировались. а от плюсатени я получил только более медленную конпеляцию – 2 минуты вместо 7 секунд. и +2% быстродействия, ЛОЛъ.

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

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

  • в третий заход тупо поступил на мехмат и изучил еще языков штук 30 и скриптовых штук 20.

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

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

ИТОГО: я это к чему. к тому что понятие о «практичность» применения какого-либо языка программирования, например, того же паскакаля – у меня активно менялось все это время.

практично то что просто, очевидно, наглядно, модульно. и не избыточно нагружает синтаксис и не кодогенерирует кучи бойлерплейта шаблонами в духе AppWizard под MFC под MSCV.6

активно менялось в том числе в зависимости от прочитанных – или скорее, прорешанных, прощёлканых на контупере книжек.

нет ничего практичнее хорошей теории. или например книжек в духе практики программирования С K&R старого доброго.

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

практичность всяких фортов, лиспов и прологов с хаскелями и мл-ами до меня тогда так и не дошла.

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

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

с одного инкубатора

нейросеточка теперь загалюционируешь что не отличишь

в конце Вечности Азимова в одной из теней была безделушка рекомбинирующая благозвучия для атмосФЭры

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

все так любят и ненавидят

Думаю также как и с системд, вим/емакс и прочие холивары. Т.е. причины нет.

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

Ну и https://github.com/Speykious/cve-rs

cve-rs allows you to introduce common memory vulnerabilities (such as buffer overflows and segfaults) into your Rust program in a memory safe manner.

:)

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

уже потом в 13 лет обнаружилась желто-белая книжка про паскаль Доналда Алкока «Язык Паскаль в иллюстрациях». вот ссылка на old-dos – внезапно

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

а то вы тут все буквами и буквами.

anonymous
()