LINUX.ORG.RU
Ответ на: комментарий от byko3y

Так это и есть в основном геттеры, которые дальше дергают get_or_try_init, get_or_init, get_unchecked_mut, get_unchecked_mut. etc.

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

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

Инкапсуляция, как правило, значит инкапсуляция в каком-то инструменте абстракции, а абстракции у нас почему-то не бывают бесплатными — и тогда вопрос получается «стоят ли абстракции той цены, которую за себя требуют?».

Ээээ… Какие-то глобальные обобщения. Что именно не бесплатно? Аксессоры? Аксессоры не помеченные inline? В каком смысле не бесплатно? Время выполнения, размер машинного кода, время программиста пишущего библиотеку, время программиста использующего библиотеку?

А там все равно придется руками преобразования делать, потому что «ссылка на неизменяемую ссылку на изменяемое значение» и вот это всё.

«Придётся руками делать преобразования» - это поставить & или * или иногда ничего не ставить? Или что-то другое?

И при чём тут двойные ссылки? Да и нет в расте неизменяемых значений: если владеем переменной всегда можем объявить её mut.

В общем, ни фига не понял.

td/src/lazy.rs — 20 одно-двухстрочников, 6 функций на несколько строчек.

Речь шла о тривиальных аксессорах. Только для них, цитирую, «вообще не должно было существовать никаких вызовов».

Таких там 2 - get_unchecked и get_unchecked_mut.

Честно говоря всё это сильно напоминает скетч «The front fell off».

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

Ты изначально выбрал кресты. Как я писал «а потом уже от него пляшет симпатия».

Ну это ты глубоко копнул. Не исключаю, что если бы основным язык был бы не С++, то я не пришёл бы к расту. Но вот плюсы изначально выбрал именно по «идеологическим» причинам. Точно могу сказать, что мыслей вроде «эти знания проще монетизировать» не было - я тогда вообще мало что в этом понимал.

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

Многие люди, освоившие C++, ни разу не рады этому языку.

А многие другие - рады. Конечно, они могут бурчать, что С++ - ужасный язык, но непременно добавят, что остальные ещё хуже. И да, «с радостью перейдут на лучшую альтернативу», но критерии будут такие, что ничего просто не подойдёт.

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

есть checked_div

Да. Есть. Но что сделает новичок? Просто поделит сумму на длину. И оно будет работать пока не попадётся пустой массив. То есть мы сделали действие чуть сложнее элементарного и уже ждём исключение как в других языках (я говорю не о C++, который молча упадёт).

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

Делегирование содержащимся структурам — это синтаксический сахар, внутри компилятор прописывает чтение вложенной структуры.

Так там нет общей вложенной структуры

Есть. Вложенная структура и сама эта структура отдельностоящая — это почти одно и то же.

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

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

Несут логику get_or_try_init() и get_or_init_pin(), а все остальные методы являются прокладками над ними. Даже set() делает get_or_init(), которое в свою очередь вызывает get_or_try_init().

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

Какие-то глобальные обобщения. Что именно не бесплатно? Аксессоры? Аксессоры не помеченные inline? В каком смысле не бесплатно? Время выполнения, размер машинного кода, время программиста пишущего библиотеку, время программиста использующего библиотеку?

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

А там все равно придется руками преобразования делать, потому что «ссылка на неизменяемую ссылку на изменяемое значение» и вот это всё

«Придётся руками делать преобразования» - это поставить & или * или иногда ничего не ставить? Или что-то другое?

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

std/src/lazy.rs — 20 одно-двухстрочников, 6 функций на несколько строчек.

Речь шла о тривиальных аксессорах. Только для них, цитирую, «вообще не должно было существовать никаких вызовов»

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

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

Вложенная структура и сама эта структура отдельностоящая — это почти одно и то же.

Это «почти» весьма притянуто за уши.

Но я всё-таки не понимаю о чём мы спорим. Ты привёл в пример Go, где можно делегировать вызовы вложенной структуре. В расте тоже можно через Deref. При этом, в данном случае (мы говорим о строках и слайсах) это разные типы. То есть и сахар и Go тут не помог бы.

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

Но что сделает новичок? Просто поделит сумму на длину.

Ну если новичок даже не почитал «букварь» и работает не в команде, то будет учиться на своих ошибках, да.

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

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

Я примерно понимаю, что это за причины, но никак не могу согласиться с тем, что можно было просто потыкать в языки и сказать «вот C++ мне нравится больше тридцати остальных — буду-ка я писать на нем». Языков-то много, шанс, что именно кресты «случайно» окажутся любимыми, очень мал.

Конечно, они могут бурчать, что С++ - ужасный язык, но непременно добавят, что остальные ещё хуже. И да, «с радостью перейдут на лучшую альтернативу», но критерии будут такие, что ничего просто не подойдёт

Ну да, потому что ничего годного в этой нише еще не создали. С другой стороны, последним новым годным языком был алгол 60, ну может быть с натяжкой паскаль, который стал прародителем JVM/CLR, параллельный сборщик мусора дейкстра к ним придумал еще в семидесятых годах, ML тоже в семидесятых возник — пора бы что-то новое и придумать. Только некому.

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

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

Ты привёл в пример Go, где можно делегировать вызовы вложенной структуре. В расте тоже можно через Deref. При этом, в данном случае (мы говорим о строках и слайсах) это разные типы. То есть и сахар и Go тут не помог бы

Структура хранимых данных, то есть, строки, одна и та же. И строка даже, вполне возможно, тусит в той же куче, как для String, так и для str, но из соображений «чистоты» это всё-таки разные вещи, как и итераторы по ним.

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

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

Языков, конечно, много, но о всякой экзотике ещё узнать надо. А дальше просто: услышал где-то, что GC тормозит и жрёт память - выбор стазу сильно сужается. Интерпретируемые языки тем более отпадают. С - «слишком прост», раст - ограничивает. И всё, выбора нет. Поначалу разбираться в плюсовых нюансах даже интересно, а потом, когда потратил на это несколько лет, то уже сложно/жалко отбрасывать имеющийся опыт.

Ну да, потому что ничего годного в этой нише еще не создали.

Кому как. Кто-то вон считает, что D намного лучше и ничем не жертвует.

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

Кажется, все это уже поняли. (:

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

Ну если новичок даже не почитал «букварь» и работает не в команде

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

Ок. В общем я понял, что Rust нормальный язык с исключениями, примерно также как Питон или C#. Практичность победила чистоту.

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

Где же взять читающих «букварь»?

Может повезло, но в первой моей команде (порядка 10 человек) rustbook все читали. Во второй (десятки человек) не спрашивал, но люди были весьма компетентные.

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

Это не так работает, ну или вас бардак, а не команда. Если чувак делает ерунду и никого не слушает, то его увольняют.

В общем я понял, что Rust нормальный язык с исключениями, примерно также как Питон или C#.

Скорее как Go или Haskell.

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.