The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз языка программирования Rust 1.30, opennews (ok), 26-Окт-18, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


93. "Релиз языка программирования Rust 1.30"  +/
Сообщение от Аноним (-), 26-Окт-18, 23:03 
> Наконец-то они вынесли это из nighly. Ряд проектов теперь сможет перейти на
> stable rust.

Судя по всему теперь у плюсов появился наконец достойный конкурент. В нечитаемом коде который никто не понимает. Собственно фирменная проблема плюсов - многие програмеры сперва делают себе кучу абстракций а потом на этом наворачивают. Это было бы ничего, если бы не один нюанс: остальные люди могут и не въехать в эти абстракции, понять их неверно, или убить массу времени на это понимание. Поэтому я видал проекты на плюсах сдохшие по причине того что автор забил а остальные вообще не способны понять столь "гени(т)альный" код.

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

Ответить | Правка | К родителю #18 | Наверх | Cообщить модератору

104. "Релиз языка программирования Rust 1.30"  +/
Сообщение от Orduemail (ok), 27-Окт-18, 07:05 
Я не очень понимаю о каком нечитаемом коде в rust'е говорят люди. От тебя я слышу это не в первый раз, но до сих пор мне не приходилось сталкиваться с кодом на rust'е, который не был бы прозрачен. Поэтому я очень приветствую конкретные ссылки на код. Любопытно посмотреть.
Ответить | Правка | Наверх | Cообщить модератору

141. "Релиз языка программирования Rust 1.30"  +/
Сообщение от Илья (??), 29-Окт-18, 08:58 
https://github.com/antoyo/relm/blob/7e1baa6a62b2db5917720a1d...

Простой пример: Не обращаясь к документации найдите объявление структуры Counter.

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

Ответить | Правка | Наверх | Cообщить модератору

142. "Релиз языка программирования Rust 1.30"  +1 +/
Сообщение от Orduemail (ok), 29-Окт-18, 10:32 
"Не обращаясь к документации" -- это искусственное ограничение в случае rust'а, поскольку документация генерируется автоматически, и изучение кода идёт именно через документацию. Если ты выкидываешь этот инструмент, и берёшь взамен IDE, которая тебе не находит нужный сорец, то кто тут ССЗБ?

Но вопрос был в том, где нечитаемый код. Код Counter'а нечитаемый? Где ссылка на него? Код использующий Counter нечитаем? Да не, читаем. Кристалльно прозрачен и понятен.

Растовые макросы читаются глазами как текст на естественном языке, не сложнее. Даже проще, чем lisp'овые макросы. Ну да, из документации ссылка ведёт на файл, а не на конкретную строчку файла, но... и чё?

> макросы это очень плохая практика

Академический буллшит. Макросы сложно писать. Хорошие макросы писать ещё сложнее. Но хороший макрос может сделать твой код гораздо короче и понятнее. Макрос может позволить тебе сделать то, что иначе ты не сделаешь. Статическая проверка SQL синтаксиса, сопутствующих преобразований типов, экранирования/деэкранирования значений? Ты этого никогда не сделаешь без макроса. Без макроса ты закончишь тем, что будешь для составления SQL запросов конкатенировать строчки вручную, а потом с пылающим пердаком закрывать SQL-инъекции на работающем сервере. Или вместо SQL синтаксиса для запросов ты получишь долбаный ООП интерфейс, который позволит написать прототип, а потом, в погоне за производительностью, ты будешь заменять использования этого ООП интерфейса на составление запросов вручную, а потом с пылающим пердаком закрывать SQL-инъекции на работающем сервере.

Если бы макросы были бы безусловно плохой практикой, то макросов бы не было. Вообще ни один язык не поддерживал бы макросов. Но мы видим макросы в C и, между прочим, активное их использование в коде ядра. Мы видим макросы в lisp'е, в rust'е. Мы видим макросы в C++. И знаешь почему? Потому что все блестящие идеи самого блестящего языка имеют ограниченную применимость. И иногда ты сталкиваешься с ситуацией, когда средства языка не позволяют тебе избежать копипастов десяти строк кода в два десятка мест. И вот тогда ты понимаешь, что либо ты скопипастишь эти десять строк, а потом когда что-то изменится, ты будешь править каждый копипаст (ещё бы не забыть куда копипастил), либо ты напишешь макрос, и в случае необходимости изменений будешь менять только макрос.

Rust, по сравнению с C, позволяет гораздо больше вещей делать без макросов. Но, как я сказал выше, любая самая блестящая модель программирования имеет свои границы. Rust'овая не исключение. И слава богу, потому что попытка сделать исключение из этого правила приведёт к такому оверинженерингу, что чертям станет тошно, а в результате всё равно будут возникать edge-cases, в которых этого оверинженеринга будет недостаточно.

> Так же автодополнение внутри макросов не работает

Да и плевать на него. Бесполезная вещь, создающая видимость ускорения написания кода. Но это иллюзия, а не ускорение. Тем более что использование макросов реально упрощает написание кода. Гораздо больше чем все эти ваши автодополнения.

Ответить | Правка | Наверх | Cообщить модератору

145. "Релиз языка программирования Rust 1.30"  +/
Сообщение от Илья (??), 30-Окт-18, 07:54 
> "Не обращаясь к документации" -- это искусственное ограничение в случае rust'а, поскольку
> документация генерируется автоматически, и изучение кода идёт именно через документацию.
> Если ты выкидываешь этот инструмент, и берёшь взамен IDE, которая тебе
> не находит нужный сорец, то кто тут ССЗБ?
> Но вопрос был в том, где нечитаемый код. Код Counter'а нечитаемый? Где
> ссылка на него? Код использующий Counter нечитаем? Да не, читаем. Кристалльно
> прозрачен и понятен.

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

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

> Без макроса ты закончишь тем, что будешь для составления SQL запросов конкатенировать строчки вручную, а потом с пылающим пердаком закрывать SQL-инъекции на работающем сервере.

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

148. "Релиз языка программирования Rust 1.30"  +/
Сообщение от Orduemail (ok), 30-Окт-18, 09:15 
>> "Не обращаясь к документации" -- это искусственное ограничение в случае rust'а, поскольку
>> документация генерируется автоматически, и изучение кода идёт именно через документацию.
>> Если ты выкидываешь этот инструмент, и берёшь взамен IDE, которая тебе
>> не находит нужный сорец, то кто тут ССЗБ?
>> Но вопрос был в том, где нечитаемый код. Код Counter'а нечитаемый? Где
>> ссылка на него? Код использующий Counter нечитаем? Да не, читаем. Кристалльно
>> прозрачен и понятен.
> Ну так как, нашли?

И не искал.

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

Я представляю о чём речь.

> То есть, за место того, чтобы просто кликнуть пару раз в требуемое
> место, чтобы "пощупать" эту структуру, Вам нужно проломиться сквозь слой абстракции
> макроса и предположить (!) что именно он нагенерирует. А затем, основываясь
> на этом предположении писать код.

macroexpand. Используй macroexpand, Luke, если макросы читать не получается.

>> Без макроса ты закончишь тем, что будешь для составления SQL запросов конкатенировать строчки вручную, а потом с пылающим пердаком закрывать SQL-инъекции на работающем сервере.
> Простые вещи легко реализуются на чём угодно. Хоть на макросах, хоть IQueryable.
> Сложные запросы в любом случае будете писать руками

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

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

Ой, не надо мне тут советы давать. Я ходил по граблям макросов в lisp'е, я делал обе ошибки -- писал макросы, когда их не надо писать, и не писал тогда, когда их надо писать. Если речь идёт о крупном проекте, то просто не позволяйте писать макросы рядовым разработчикам. Для них это должно быть запретно. Нужду в макросе должен увидеть умудрённый опытом разработчик, и он же должен написать макрос. Вот и всё.

Ответить | Правка | Наверх | Cообщить модератору

149. "Релиз языка программирования Rust 1.30"  +/
Сообщение от Илья (??), 30-Окт-18, 23:41 
> macroexpand

Где же вы раньше были. пойду читать, что за зверь такой

Ответить | Правка | Наверх | Cообщить модератору

150. "Релиз языка программирования Rust 1.30"  +/
Сообщение от Orduemail (ok), 31-Окт-18, 07:22 
>> macroexpand
> Где же вы раньше были. пойду читать, что за зверь такой

Функция в lisp'е. Она есть в emacs'е и её можно использовать не только с lisp'овым объектом. Хотя, если честно, я не пробовал использовать её с rust-mode, может она там и нереализована? Ну, мне не приходилось сталкиваться в rust'е с реально зубодробительными макросами, типа макросов, реализующих CLOS или типа того. Всё что я видел -- это вроде "давайте сгенерим impl MyCoolTrait для типа, через кодогенерацию, чтобы его не надо было бы писать для каждого типа вручную". Эти вещи легко читаются глазами в сорцах.

Ответить | Правка | Наверх | Cообщить модератору

154. "Релиз языка программирования Rust 1.30"  +/
Сообщение от freecoder (?), 31-Окт-18, 18:23 
Да, это хороший пример, как использование атрибута может запутать, так как частично код генерируется в процедурном макросе. Однако мне потребовалось 5 минут, чтобы на Гитхабе отыскать то место, где создается структура. При этом я в своей жизни только один раз сам писал процедурный макрос и чтение кода особого труда мне не составило.
Ответить | Правка | К родителю #141 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру