Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/184: Рейтинг темы: голосов - 184, средняя оценка - 4.66
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

Rust vs C++

26.06.2020, 16:10. Показов 47539. Ответов 660
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто-то писал на Rust? Стоит ли начинать учить? Насколько Rust хуже/лучше С++?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.06.2020, 16:10
Ответы с готовыми решениями:

[Rust] Обсуждение возможностей и предстоящей роли языка Rust
Psilon, чем он тебя так привлек? И почему именно "убийца плюсов"? Если напишешь развернутый ответ, обещаю вынести в отдельную тему и...

[Rust] Как привязывать WinAPI-функции к коду на Rust?
Может кто-нить дать код, КАК привязывать вин апишные функции к растовскому коду (на примере MesageBox). ...

Расскажите о своём опыте программирования на Rust
Доброе утро! Расскажите, пожалуйста, о своём опыте программирования на Rust. Можно в сравнении с C# или Delphi. Спасибо.

660
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
21.09.2020, 17:23
Студворк — интернет-сервис помощи студентам
Тогда нужно совершенствовать навыки программирования и приобретать новые умения, а не тратить время на изучение языков.
1
Заблокирован
21.09.2020, 22:04
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
ТУда уже концепты и наследование подвезли?
А ты без ООП дер*ма, как я вижу, жить не можешь)
0
Модератор
 Аватар для Curry
5168 / 3530 / 536
Регистрация: 01.06.2013
Сообщений: 7,681
Записей в блоге: 9
21.09.2020, 23:47
Цитата Сообщение от IamLost Посмотреть сообщение
Что изменится в 2021?
Год начнётся с новогодних каникул, самое время начать изучать новый язык.
1
Эксперт .NET
 Аватар для Usaga
14735 / 9509 / 1364
Регистрация: 21.01.2016
Сообщений: 35,892
22.09.2020, 07:17
Цитата Сообщение от Curry Посмотреть сообщение
Год начнётся с новогодних каникул, самое время начать изучать новый язык.
На новогодних каникулах нужно новогодничать и каникулить, а не С++ изучать)
0
Модератор
 Аватар для Curry
5168 / 3530 / 536
Регистрация: 01.06.2013
Сообщений: 7,681
Записей в блоге: 9
22.09.2020, 08:29
Цитата Сообщение от Usaga Посмотреть сообщение
На новогодних каникулах нужно новогодничать и каникулить
Попеременно, я же так и нарисовал.

Добавлено через 1 час 3 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
ТУда уже концепты ... подвезли?
Концепты прикрутили к плюсами что бы хоть как то дотипизировать template, что бы ошибки при их применении читабельные были. А в rust обобщённые типы и так типизируются трейтами. Сама идея проверять наличие у подставляемого типа конкретных методов, вместо проверки принадлежности его к трейту (или интерфейсу) порочна.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
22.09.2020, 09:39
Цитата Сообщение от Curry Посмотреть сообщение
идея проверять наличие у подставляемого типа конкретных методов, вместо проверки принадлежности его к трейту (или интерфейсу) порочна
Почему?
0
Эксперт .NET
 Аватар для Usaga
14735 / 9509 / 1364
Регистрация: 21.01.2016
Сообщений: 35,892
22.09.2020, 09:55
Мне тоже интересно. На самом деле довольно удобно было бы оперировать типами у которых, скажем, есть свойство ID и не важно в одной они иерархии или нет.
0
Модератор
 Аватар для Curry
5168 / 3530 / 536
Регистрация: 01.06.2013
Сообщений: 7,681
Записей в блоге: 9
22.09.2020, 15:47
Цитата Сообщение от korvin_ Посмотреть сообщение
Почему?
Потому что тип с которым мы собираемся работать должен быть, допустим, итерируемым, или сериализируемым, или обладать возможностью выступать как источник данных, что угодно. А не просто иметь набор функций. Набор функций может совпасть для другого типа где функции с тем же именем будут иметь другой смысл.
Цитата Сообщение от Usaga Посмотреть сообщение
На самом деле довольно удобно было бы оперировать типами у которых, скажем, есть свойство ID и не важно в одной они иерархии или нет.
Архинеправильно мыслите, товарищ!
ID - это просто ID - имя такое, и разные люди могут вложить в него разный смысл. А вам же нужно не просто a ID, а совершенно конкретный the ID, который должен быть описан в классе/интерфейсе/трейте и его то и указывать в качестве ограничения типа.

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

Добавлено через 5 минут
Цитата Сообщение от Curry Посмотреть сообщение
и не важно в одной они иерархии или нет.
Если наследование только от одной сущности, то плохо. Но даже в C# интерфейсы же есть. И если вы хотите пользоваться в обобщённой функции ID-ом, то вы подразумеваете у этого ID-а определённые возможности, которые и следует отразить в трейте/интерфейсе ... И, тогда можно пользоваться типами из разной иерархии, но, всё же поддерживающих такой ID, который вам нужен.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
22.09.2020, 17:29
Цитата Сообщение от Curry Посмотреть сообщение
А в rust обобщённые типы и так типизируются трейтами.
Т.е. у раста и шаблонов то нет оказывается а под видом них дженерики? О чем там вообще тогда может идти речь?

Добавлено через 2 минуты
Цитата Сообщение от Curry Посмотреть сообщение
Потому что тип с которым мы собираемся работать должен быть, допустим, итерируемым, или сериализируемым,
Ну вот как раз таки должен содержать определенный набор методов, а не быть поражденным от чего то.
Т.е итерируемым сериализуемым и т.д. могут быть типы из разных итерархий.
0
Модератор
 Аватар для Curry
5168 / 3530 / 536
Регистрация: 01.06.2013
Сообщений: 7,681
Записей в блоге: 9
22.09.2020, 18:01
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Т.е. у раста и шаблонов то нет оказывается а под видом них дженерики?
У rust нет ключевого слова template. Эти плюсовые template и есть разновидность дженериков.
Или объясните как вы понимаете разницу.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну вот как раз таки должен содержать определенный набор методов, а не быть поражденным от чего то.
Не должен, это плохой дизайн. На плюсах можно иметь класс реализующий нужный нам функционал, а все типы с кем мы будем работать должны быть производными И от этого класса. В более других языках может быть общий трейт.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
22.09.2020, 18:33
Цитата Сообщение от Curry Посмотреть сообщение
У rust нет ключевого слова template. Эти плюсовые template и есть разновидность дженериков.
Или объясните как вы понимаете разницу.
У шаблонов утиная типизация и adhock полиморфизм. Дженерики же не более чем обертка над void*.
Цитата Сообщение от Curry Посмотреть сообщение
На плюсах можно иметь класс реализующий нужный нам функционал, а все типы с кем мы будем работать должны быть производными И от этого класса
Это касается исключительно динамического полиморфизма. Механизм же шаблонов дает статический ad-hoc полиморфизм. А для него нужна как раз утиная типизация.
0
Эксперт .NET
 Аватар для Usaga
14735 / 9509 / 1364
Регистрация: 21.01.2016
Сообщений: 35,892
22.09.2020, 18:33
Цитата Сообщение от Curry Посмотреть сообщение
Архинеправильно мыслите, товарищ!
ID - это просто ID - имя такое, и разные люди могут вложить в него разный смысл. А вам же нужно не просто a ID, а совершенно конкретный the ID, который должен быть описан в классе/интерфейсе/трейте и его то и указывать в качестве ограничения типа.
Так никто разным людям не запретит вкладывать разный смысл в одно и то же свойство одного и того же класса. Один посмотрит на ID как на уникальный идентификатор, а второй запишет туда количество товара на складе. Тут класс\интерфейс\трейт ничего не изменит. А так, утиная типизация во всей красе. У "сущности" должно быть ID. Если есть ID, значит это сущность. Этот подход на ура работает в TypeScript. И это то, чего мне иногда не хватает в C#. А оказывается, что это архинеправильно...
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
22.09.2020, 18:37
Цитата Сообщение от Usaga Посмотреть сообщение
И это то, чего мне иногда не хватает в C#
Я вот вам искренне поражаюсь - и того вам не хватает в шарпе и того, а так за него грудью на амбразуру бросаетесь. А в плюсах это все есть.
0
Эксперт .NET
 Аватар для Usaga
14735 / 9509 / 1364
Регистрация: 21.01.2016
Сообщений: 35,892
22.09.2020, 18:44
Fulcrum_013, я очень рад, что в плюсах есть что-то, чего нет в шарпе. Но практичности языка это особо не умаляет. В плюсах тоже нет некоторых вещей, которые есть в шарпе (и в некоторых других языках), которые мне очень полезны. И что дальше?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
22.09.2020, 18:58
Цитата Сообщение от Curry Посмотреть сообщение
Не должен, это плохой дизайн.
Пример - шаблон Property поражден от аргумента шаблона (назовем это Store)выполняющего хранение/установку/возврат данных.
при наличии у Store метода Set класс Property должен иметь все мутабельные операторы которые подходят для хранимого типа.
При наличии у Store метода Change эти мутабельные операторы должны работать уже по другому.
При наличии методов Inc и Dec уже совсем по третьему.
при отсутствии же медов установки/чтения но наличии статических констант соответсвующим именем он дожен вызвать указанные в этих константах методы содержащего класса. Для Get и Set при этом должен определить а эти константы вообще адреса методов или адреса полей и для полей в операторах осуществить непосредственно установку/чтение полей.
Т.е. другими словами - осуществить полную подстройку под тот тип который передан в качестве аргумента.
И эта подстройка как раз осуществляется условным включением/выключением через концепты операторов/выбором варианта работы оператора через constexpr if
По другому будет действительно очень плохой дизайн, заставляющий и вариантов BaseStore написать под все сочитания нужных вариантов и помнить от какого Base породить конкретный стор и такую же простыню вариантов Property и точно так же вручную следить чтобы BaseStore совпало с оборачивающим вариантом Property

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
В плюсах тоже нет некоторых вещей, которые есть в шарпе (и в некоторых других языках), которые мне очень полезны
Например? GC? Его выбросили сознательно в виду абсолютной бесполезности.
Свойств? На самом деле их нет в шарпе. В плюсах их нет в стандарте потому что любой фиксированный формат - это куцый обрубок бесконечного множества вариантов их реализации средствами языка, из которых может выбрать разработчик конкретного применения оных свойств.
0
Эксперт .NET
 Аватар для Usaga
14735 / 9509 / 1364
Регистрация: 21.01.2016
Сообщений: 35,892
22.09.2020, 18:59
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Например? GC? Его выбросили сознательно в виду абсолютной бесполезности.
Свойств? На самом деле их нет в шарпе.
А вам не пофигу?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
22.09.2020, 19:01
Цитата Сообщение от Usaga Посмотреть сообщение
А вам не пофигу?
Ну вы же говорите что в плюсах чего то нет что есть в шарпе. Интересно чего же кроме того что абсолютно неюзабельно?
Цитата Сообщение от Usaga Посмотреть сообщение
Но практичности языка это особо не умаляет
Окромя того что напрочь лишает его какой либо годной для ООП автоматики и подстройки кода к другому коду
0
Модератор
 Аватар для Curry
5168 / 3530 / 536
Регистрация: 01.06.2013
Сообщений: 7,681
Записей в блоге: 9
22.09.2020, 19:30
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
У шаблонов утиная типизация
Что, по моему мнению абсолютное зло. Не хотите на js покодить?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Дженерики же не более чем обертка над void*.
А это абсурд.
Цитата Сообщение от Usaga Посмотреть сообщение
Так никто разным людям не запретит вкладывать разный смысл в одно и то же свойство одного и того же класса.
Если люди что то прогают вместе, то кто в лес кто по дрова не получится. Суть в том, что вы договоритесь считать за ID, в рамках оговорённых ограничений пусть что угодно считают, лишь бы не мешало его использовать. То есть и любой реализующий какой то тип поддерживающий ID, и вы, его использующий, должны придерживаться соглашения, которое и выражается в трейте или его аналогах.
А с утиной типизацией можно подсунуть стороннюю либу с теми же именами функций, разрвботчик которой и слыхом про ваши соглашения не слыхивал.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
И эта подстройка как раз осуществляется условным включением/выключением через концепты операторов/выбором варианта работы оператора через constexpr if
По другому будет действительно очень плохой дизайн, заставляющий и вариантов BaseStore написать под все сочитания нужных вариантов
Так у вас и так получается туча вариантов под все constexpr if.
Странно что вы стали ратовать за дизайн прямо противоположный ООП. Введение корневой сущности реализующий требуемые функции (в ООП методы), это и есть описание алгебры над сущностями. А утиная типизация в духе сишных макросов, там тоже можно сочинять выражения с функциями, и какие варианты этих функций потом окажутся видимым в месте применения макроса, такие и использовать. И объектов не надо. Зашибись дизайн.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
22.09.2020, 20:10
Цитата Сообщение от Curry Посмотреть сообщение
Потому что тип с которым мы собираемся работать должен быть, допустим, итерируемым, или сериализируемым, или обладать возможностью выступать как источник данных, что угодно. А не просто иметь набор функций. Набор функций может совпасть для другого типа где функции с тем же именем будут иметь другой смысл.
Но тогда стандартная библиотека должна иметь миллионы разных трейтов на все случаи жизни, и все сторонние библиотеки должны зависеть от неё и реализовывать эти трейты, чтобы «пользователи» этих библиотек могли использовать обобщение так, как считают нужным. Вот простой контрпример:

В Java SWT есть много виджетов, которые имеют метод getText, но они не реализуют какой-нибудь интерфейс HasText { getText() }, что делать в таком случае? Допустим, реализовали бы, какой-то свой, а в Swing — свой. Формально — разные интерфейсы, фактически — один. Как их вместе использовать? Писать свои обёртки/имплементации трейтов на каждый класс? Так себе занятие. А если ещё и для корректной имплементации нужен доступ к приватным полям?

Цитата Сообщение от Curry Посмотреть сообщение
Набор функций может совпасть для другого типа где функции с тем же именем будут иметь другой смысл.
А могут иметь тот же смысл. Как тогда поступать? Предложишь авторам всех библиотек, которые ты используешь в своём проекте, имплементировать твои интерфейсы/трейты? Или сам будешь писать кучу обёрток/псевдоимплементаций?

Добавлено через 48 секунд
Цитата Сообщение от Curry Посмотреть сообщение
Эти плюсовые template и есть разновидность дженериков.
Нет. Совсем нет.

Добавлено через 10 минут
Цитата Сообщение от Curry Посмотреть сообщение
Кроме того, если механизм работы с обобщёным типом поменяют, допустим, для выполнения такого же действия понадобиться ещё функция, то придётся и в концепты вносить изменения, лишняя зависимость.
А если трейт/интерфейс поменяют, то его имплементациям не придётся менять свой код? Точно так же придётся, в чём разница?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
22.09.2020, 20:19
Цитата Сообщение от Curry Посмотреть сообщение
Так у вас и так получается туча вариантов под все constexpr if.
Странно что вы стали ратовать за дизайн прямо противоположный ООП. Введение корневой сущности реализующий требуемые функции (в ООП методы), это и есть описание алгебры над сущностями. А утиная типизация в духе сишных макросов, там тоже можно сочинять выражения с функциями, и какие варианты этих функций потом окажутся видимым в месте применения макроса, такие и использовать. И объектов не надо. Зашибись дизайн.
Вот в том то и суть что все в одном подстраивающемся шаблоне.
Пораждая его от разных баз передаваемых в аргументе имеем разное поведение, которое определяется как раз тем что есть непосредственно в сторе который может быть поражден от разных баз.
В результате нам не нужно вручную выбирать от какого базового стора порадить и какому варианту финальной проперти это скормить.
Есть один проперти который натягивается на любое поведение - т.е. сочетание геттеров сеттеров, не зависимо от того каким способом он обеспечивает доступ к непосредственно хранилищу, для которого выбирается базовый стор, набор которых в общем то ограничен и от того какие на него геттеры-сеттеры натянут в общем то тоже. Т.е. суть как раз в том что поражденный тип может подстроится под интерфейс предка, а не требовать от предка соблюдения какого то интерфейса.

Добавлено через 6 минут
т.е. иерархия получается базовое хранилище(которое занимается исключительно обеспечением доступа к значению) - кастомизируемое поведение (определяет как осуществялть ту или иную операцию чтения/записи) - натянутые по верху операторы.
Суть ее как раз в том чтобы не переписывать для типа каждого свойства которое по сути является полем содержащего класса, всю простыню операторов, а сделать только несколько функций которые дают именно логику установки и чтения значения, а вся простыня подходящих как к обертываемуму типу значения так и указанному набору геттеров/сеттеров шаблон сгенерировал автоматически, и при этом этот сгенерированный набор был бы известен в компайлтайме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2020, 20:19

[Rust] Time
Подскажите как узнать время в Rust. //Rust extern crate time; fn main() { let now = time::get_time(); ...

Rust+assembler
Как связать язык rust и ассемблер не используя ассемблерные вставки(неудобно использовать их в RUSTе)?

Frontend Для RUST
Нужна помощь! Есть класс Participant, в этом классе есть функция new. impl Participant { /// Create a new `Participant`. ...

Просадки FPS в Rust
Всем привет нужна помощь! У меня ноут HP, установлен процессор i5-8300H 2,3 ггц, 6 ядерный 8 поточный, так же установлена видеокарта Nvidia...

Rust ошибка E0623
при компиляции появляется ошибка E0623 в документации этот номер пропущен. в чём может быть проблема? ошибка: error: lifetime...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
600
Ответ Создать тему
Новые блоги и статьи
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru