The OpenNET Project / Index page

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



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

Оглавление

Выпуск языка программирования Rust 1.51, opennews (??), 26-Мрт-21, (0) [смотреть все]

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


34. "Выпуск языка программирования Rust 1.51"  +1 +/
Сообщение от Урри (ok), 26-Мрт-21, 14:27 
Очередные заплатки к очередным граблям.

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

Вот почему бы расту не сделать было так? Почему бы не изучить ошибки D, например? Нет, они сваяли на коленке какую-то поделочку и теперь с завидной ослиной упорностью обвешивают ее очередными заплатками.

> Стабилизированы макосы "ptr::addr_of!" и "ptr::addr_of_mut!", позволяющие создавать raw-указатели для невыровненных полей.

Не прошло и, сколько, 14 лет для полноценной имплементации такой базовейшей вещи?

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

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

51. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Аноним (51), 26-Мрт-21, 14:52 
Тогда когда язык сам ничего не позволяет приходится пихать в него все возможные API и макросы чтобы хоть что-то на нем писать.
Ответить | Правка | Наверх | Cообщить модератору

53. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от боня (?), 26-Мрт-21, 14:53 
> Какая в этом практическая польза, помнить что макрос а что нет?

да

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

89. "Выпуск языка программирования Rust 1.51"  +1 +/
Сообщение от Аноним (89), 26-Мрт-21, 15:49 
А зачем ?
Ответить | Правка | Наверх | Cообщить модератору

161. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от InuYasha (??), 26-Мрт-21, 19:04 
Чтобы "Life of people who have no F12 (Go to definition) key matters!"
Ответить | Правка | Наверх | Cообщить модератору

249. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от боня (?), 27-Мрт-21, 07:36 
> Чтобы "Life of people who have no F12 (Go to definition) key matters!"

Не нашёл статьи с таким названием. Или зачем вы в кавычках и по английски написали?

Чтобы вам было менее понятно читать ответ - напишу на украинском:

Для налагодження метапрограмирування програміст використовує метабрейкпоінти. (представляєт, що поставiв брейкпоінт)

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

286. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от InuYasha (??), 27-Мрт-21, 22:22 
А программiруете вы, наверное, тоже на украiнском ) Мне даже страшно представить ваш аналог 1С /(o_o)\

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

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

56. "Выпуск языка программирования Rust 1.51"  +5 +/
Сообщение от Аноним (56), 26-Мрт-21, 14:56 
> учтя все его проявившиеся грабли, возможно, действительно станет заменой монструозному с++

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

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

Гугли про гигиеничность макросов. У Rust гигиеничные макросы, в отличие от C или C++. Восклицательный знак не имеет прямого отношения к гигиеничности, но это просто часть здоровой взрослой практики: отделять вызов макроса от вызова функции, потому что семантически это разные вещи, а если выдавать одно за другое, это может приводить к неверной интерпретации кода программистом.

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

66. "Выпуск языка программирования Rust 1.51"  –2 +/
Сообщение от Урри (ok), 26-Мрт-21, 15:17 
> Язык спроектирован так, что может позволять себе удалять устаревшие и плохо спроектированные фичи без потери обратной совместимости.

То-есть я могу свободно собрать и запустить код десятилетней давности? Ню-ню.

> Гугли про гигиеничность макросов. У Rust гигиеничные макросы, в отличие от C или C++. Восклицательный знак не имеет прямого отношения к гигиеничности

Зачем гуглить гигиеничность, если гигиеничность к расту отношения не имеет? В свою очередь предлагаю погуглить то же самое по отношению к древней-предревней scheme. Вот там "!" действительно очень важен в контексте кода.


> но это просто часть здоровой взрослой практики: отделять вызов макроса от вызова функции, потому что семантически это разные вещи

Что-что семантически разные вещи? write и writeln! - семантически разные вещи? Муа-ха-ха-ха-ха-ха-ха!


> а если выдавать одно за другое, это может приводить к неверной интерпретации кода программистом.

Чем write отличается от writeln!, что без восклицательного знака ты как программист неверно проинтерпретируешь код? Ничем.

В scheme, на которую я выше кивал, это действительно важно. Потому что в первую очередь язык функциональный и поощряет функциональное программирование где, на секунду, чистота функций очень важна. Потому что чистые функции можно вычислять в любом порядке и любым количеством, а нечистые - нельзя. Поэтому в схеме set! с восклицательным знаком (чтобы не забывали), а let - без.

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

72. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Аноним (56), 26-Мрт-21, 15:22 
> гигиеничность к расту отношения не имеет

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

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

76. "Выпуск языка программирования Rust 1.51"  –3 +/
Сообщение от Урри (ok), 26-Мрт-21, 15:31 
Слив, как говорится, засчитан.

Смею предположить, что из-за этого вот моего вопроса:

>> это просто часть здоровой взрослой практики: отделять вызов макроса от вызова функции, потому что семантически это разные вещи
> write и writeln! - семантически разные вещи?

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

84. "Выпуск языка программирования Rust 1.51"  +3 +/
Сообщение от Аноним (84), 26-Мрт-21, 15:41 
Умнее слиться в споре, где побеждают не аргументами и здравым смыслом, а напором и аппеляцией к одобрению большинства местной аудитории :)

А вопрос я проигнорил, потому что он непонятен. В-первых, неточен. Под write понимается std::io::Write::write или может std::fs::write? В любом случае, если ты имел в виду какую-то фнкцию, то да, это совершенно разные вещи, потому что, макрос и функция - это разные вещи (внезапно).

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

137. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Урри (ok), 26-Мрт-21, 18:14 
Хм, непонятен вопрос "чем write и writeln! семантически разные вещи?".
Ну ок.

> Под write понимается std::io::Write::write или может std::fs::write...?

Совершенно без разницы, потому что _семантически_ эти функции ничем не отличаются.

Разговор шел и идет о том, что в расте была введена (и до сих пор используется) бессмысленная и, по большому счету, вредная сущность "!", как обозначение макросов.

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

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

Так было во времена лиспа, так осталось в современные времена.

В языке С++ реализация правильная. Модификатор constexpr превращает функцию в макрос без каких-либо переделок, потому что это одно и то же (при условии, конечно же, что компилятор с этим может справиться).

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

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

Характерный пример: write - печать, writeln! - печать с переводом строки. Программисту надо знать только одно - что эти функции делают, ему не надо знать как эта функция реализована в библиотеке - макросом, функцией, на ассемблере или через виртуальную машину. Ему надо только знать что эта функция делает и настолько эффективно.

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

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

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

191. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от Аноним (191), 26-Мрт-21, 20:55 
>Разговор шел и идет о том, что в расте была введена (и до сих пор используется) бессмысленная и

#define TRUE FALSE //счастливой отладки

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

274. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от боня (?), 27-Мрт-21, 18:53 
> Потому, что это одна из многих вещей, которая делает раст плохим языком

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

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

317. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Cykooz (ok), 29-Мрт-21, 14:58 
Если для вас макросы и функции это одно и то же, то может расскажете как в том же C++ или C сделать именно функцию, которая вызывалась бы похожим образом:

lisp!(
defun is_whitespace ((b u8)) bool
    (match b
        (0x20 | 0x09 | 0x85 | 0x0a | 0x0b | 0x0c | 0x0d => (true))
        (_ => (false) ))
);

Это пример использования Rust-макроса для lisp-like DSL.

writeln! - это совсем не функция и в принципе не сможет в Rust стать функцией ни какими constexpr. Просто потому, что в Rust функции не могут принимать переменное число аргументов. А макросы могут "эмулировать" передачу переменного числа аргументов. Что собственно и делается в writeln!, и что отличает её от абстрактной функции write.

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

А ещё от функции можно получить ссылку, а от макроса - нельзя.

И с макросами в Rust даже не обязательно использовать именно круглые скобки для передачи "аргументов" - можно фигурные или квадратные (например vec![0; 10] - вот как тут убрать восклицательный знак?).

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

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

318. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от Урри (ok), 29-Мрт-21, 17:42 
Вы не понимаете, что значит "семантически"? А что такое "алгоритмизация" знаете?

То, что вы написали никакого отношения к программированию не имеет. Зато имеет отношение к трансляции - переводу из одного представления (например, на языке rust) в другое (например, на языке asm).

Только вот в чем засада - трансляцией уже более 40 лет занимаются трансляторы(компиляторы), причем очень успешно. Это не работа человека. Это, в данном случае, работа компилятора rust.

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

--
Так вот, возвращаясь к тому, что написали вы. Ваш комментарий никакого отношения к понятиям "функция" не имеет. Он имеет отношение к понятию "трансляции языковых единиц rust под условным названием "function" и "macro" в низкоуровневое представление". В лиспе, между прочим, различия между макросами и функциями не вводятся, не так ли?

Рекомендую почитать курс MIT sicp (pdf на русском - https://newstar.rinet.ru/~goga/sicp/sicp.pdf). Осилив книгу вы сможете вполне спокойно писать на более чем 300 (трехстах) из существующих языков программирования (приблизительный список с примерами можно глянуть здесь: http://rosettacode.org/wiki/Hello_world/Text).

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

281. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от боня (?), 27-Мрт-21, 21:15 
> Чем write отличается от writeln!

write это функция, а writeln! это макрос.

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

58. "Выпуск языка программирования Rust 1.51"  +1 +/
Сообщение от Аноним (58), 26-Мрт-21, 15:01 
>  А не подскажете зачем макросы выделять отдельно от функций значком "!"? Какая в этом практическая польза, помнить что макрос а что нет?

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

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

68. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от Урри (ok), 26-Мрт-21, 15:20 
> Потому что макросы принимают аргументами кастомный синтаксис, и творят с ним магию
> кодгена.
> Полезнее сразу видеть, где в коде творится магия (макросы очень мощная штука)

Полезнее названия методов/макросов писать так, чтобы сразу было понятно что они делают, а не где внутрях происходит "магия".

Рекомендую почитать "Совершенный код" Макконела. Очень рекомендую.
https://ru.pdfdrive.com/%D0%A1%D0%BE...

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

95. "Выпуск языка программирования Rust 1.51"  +2 +/
Сообщение от Аноним (95), 26-Мрт-21, 16:04 
Не знаток Rust, но учитывая его работу с памятью, предположу, что макросы и функции просто обязаны прямо отличаться.
Функция определяет новую область видимости, нужно специально следить за владением передаваемых и возвращаемых параметров. Макрос просто подставляет код макроса в текущую область видимости не влияя на владение. Плюс возможности макросов шире чем у функций.
Из приведенного примера с writeln вопрос почему это макрос, видимо в том, что в коде он автоматом преобразуется в два вызова write или один с добавлением к аргументу \n, а не обертки функции перекладывающие значения по стеку туда и обратно.
Ответить | Правка | Наверх | Cообщить модератору

145. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от Урри (ok), 26-Мрт-21, 18:35 
> Функция определяет новую область видимости, нужно специально следить за владением передаваемых
> и возвращаемых параметров. Макрос просто подставляет код макроса в текущую область
> видимости не влияя на владение.
> Из приведенного примера с writeln вопрос почему это макрос, видимо в том,
> что в коде он автоматом преобразуется в два вызова write...

Другими словами "макрос не влияя на владение параметров преобразуется в два вызова влияющих на владение параметров функций". Таким образом прямо противореча задекларированному.

Как видите, вы ошиблись. Это не так.

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

193. "Выпуск языка программирования Rust 1.51"  –1 +/
Сообщение от Аноним (95), 26-Мрт-21, 21:18 
Макрос не влияет, но код к которому он в итоге приводит вполне может.
Не вижу тут противоречия. Сама логика его использования это подразумевает.
Главное что он не маскируется в какую-то самостоятельную функцию, которой на самом деле там и нет вовсе.
Для системного программирования думаю это очень хорошая практика. Тем более в доке видел макросы вида sql!(select * from TABLE1), тут уж явно не функция.
В остальном вопрос сводится к выбору подходящего имени самого макроса.
Так можно назвать макрос readln, а вызывать в нем write. Это запутывает, но к самой системе макросов это отношения не имеет.
Ответить | Правка | Наверх | Cообщить модератору

203. "Выпуск языка программирования Rust 1.51"  –3 +/
Сообщение от Урри (ok), 26-Мрт-21, 22:18 
(facepalm)
Ответить | Правка | Наверх | Cообщить модератору

222. "Выпуск языка программирования Rust 1.51"  +1 +/
Сообщение от Аноним (95), 26-Мрт-21, 23:43 
>(facepalm)

Ну это зря)

Если копнуть вопрос поглубже.
Единый синтаксис вызова функций и макросов, хотите поговорить об этом?
Является ли это подавленным ощущением ущербности системы функций в языке? Или может это желание насолить компилятору, который своей излишней опекой не хочет инлайнить нашу функцию? А может результат реакции на травму после случайно подсмотренных где-то аннотаций, декораторов и всяких аспектов?
Стоит также рассмотреть и как симптом неприятия естественных функций (builtin) и подсознательное желание переопределить их. Я уже не говорю, о таких щекотливых темах как скрытая любовь к уточкам и вообще к утиной типизации при передаче аргументов.

Как видите не самая радужная клиническая картина...)

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

152. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Аноним (152), 26-Мрт-21, 18:47 

> Полезнее названия методов/макросов писать так, чтобы сразу было понятно что они делают,
> а не где внутрях происходит "магия".

Не вижу ничего взаимоисключающего в этих двух вещах.


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

201. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Ordu (ok), 26-Мрт-21, 22:16 
> Полезнее названия методов/макросов писать так, чтобы сразу было понятно что они делают, а не где внутрях происходит "магия".

Дык их и пишут так. Что-то в слове println! тебе не ясно? Но println! при этом, в compile-time'е разбирает форматную строку, чтобы сгенерить нужную последовательность вызовов для вывода, плюс принимает переменное количество аргументов, что функциям недоступно. Сие есть магия, об этом следует помнить. Скажем, функция может заинлайниться или незаинлайнится, и как правило можно полагаться на то, что компилятор сделает как лучше. println! же нагенерит кода, который будет "заинлайнен" в любом случае, будет ли он занимать пять байт, килобайт или мегабайт.

Макрос всегда ведёт себя странно, не так как функция, потому что если бы можно было сделать его функцией, его бы сделали функцией. И да, как-то так выходит, что специальная подсветка для макросов очень показательна, всякие такие штуки как assert!, panic!, println!, и тп полезно видеть в коде сразу.

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

204. "Выпуск языка программирования Rust 1.51"  –2 +/
Сообщение от Урри (ok), 26-Мрт-21, 22:19 
Я думал джаваскриптеку совсем прибитые своим языком. Но вы мне открываете новые горизонты.
Ответить | Правка | Наверх | Cообщить модератору

209. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Ordu (ok), 26-Мрт-21, 22:42 
> Я думал джаваскриптеку совсем прибитые своим языком. Но вы мне открываете новые
> горизонты.

Завсегда пожалуйста.

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

323. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Аноним (268), 30-Мрт-21, 16:04 
> sicp
> Code complete

Когда стало нормальным тыкать людей в то, что сам не удосужился хотя бы открыть?

Судя по комментариям, Урри-таки хаскелист, увидевший картиночку с xkcd и пописавший пару строчек на lisp. А судя по выводам, то не факт, что даже до хотя бы HelloWorld дошло.

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

74. "Выпуск языка программирования Rust 1.51"  +3 +/
Сообщение от НяшМяш (ok), 26-Мрт-21, 15:28 
> Не прошло и, сколько, 14 лет для полноценной имплементации такой базовейшей вещи?

Базовейшей? Подавляющее большинство экспертов опеннета компилируемые языки и не видели никогда, а уж "указатель к невыровненному полю" я даже и не знаю когда может понадобиться использовать.

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

77. "Выпуск языка программирования Rust 1.51"  –2 +/
Сообщение от Урри (ok), 26-Мрт-21, 15:32 
Подажжи, ведь раст замена с++. А значит раст оперирует с указателями. А указатели всегда могут быть не выравнены.

Получается, раст не замена плюсам. Раст замена, ну я не знаю, джаваскрипту?

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

82. "Выпуск языка программирования Rust 1.51"  +1 +/
Сообщение от НяшМяш (ok), 26-Мрт-21, 15:39 
А кто сказал что этого нельзя было делать раньше? Открываем ту же ссылочку по add_of! и читаем.

> Create a const raw pointer to a place, without creating an intermediate reference.

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

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

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

146. "Выпуск языка программирования Rust 1.51"  –2 +/
Сообщение от Урри (ok), 26-Мрт-21, 18:38 
Фигня какая-то получается.

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

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

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

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

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




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

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