На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
  
> Rust vs Чистейший Си , и еще си шарп вдогоночку
    Для внеклассного чтения мне и Раста хватает))). За линки - пасип! Буду экспериментировать.

    Это сообщение было перенесено сюда или объединено из темы "Создание и запуск бота для Skype"
      Раст - говно, разработчиков - сжечь.

      Это сообщение было перенесено сюда или объединено из темы "Создание и запуск бота для Skype"
        Цитата JoeUser @
        Для внеклассного чтения мне и Раста хватает))).

        Ну тогда напиши бота на Rust. В чем проблема? :D
        А вообще не очень понимаю, какой смысл учить язык, позиционирующий себя как альтернатива С++? Ведь выгоднее изучить язык, который будет как дополнение, к уже имеющемуся инструменту(не, я бы понял, если бы ты полностью перешел на Rust или там D, выкинув С++ из своего арсенала, за ненадобностью). Но нет же, надо изучить еще один такой же, но с другой парадигмой :D
        В итоге у тебя в арсенале появился еще один молоток(Rust), чуть красивее первого(C++), но в конечном итоге - молоток, вместо поскогубцев :D
        Сейчас на C# обычно не составляет каких либо проблем решить ту или инную задачу связанную с десктоп или веб технологиями, плюс ко всему он кросплатформенный. И дальше будет развиваться в этом направлении(.NET Core).

        Это сообщение было перенесено сюда или объединено из темы "Создание и запуск бота для Skype"
        Сообщение отредактировано: Wound -
          Цитата Wound @
          Ну тогда напиши бота на Rust. В чем проблема? :D

          Проблема в знании :) Пока я только прочел половину книги (там одна база и вершки более сложных тем). На вторую часть книги, где вся правжа ржавчины, пока тупо не хватает времени - это для души. До С++ руки давно не доходили, последние пару месяцев усиленно осваивал и параллельно ваял продукт, используя HTML5+CSS3+PHP7+Bootstrap4+MODX Revo. Попутно чутка касаясь жабаскрипта, вернее JQuery.

          По поводу, почему Раст, зная С++. Просто его подход и основополагающие принципы мне зашли. Поверь мне, я знаю что я для себя решаю. И дело не в какой-то новизне просто-так, стильности & etc. Ведь когда-то я прошел достаточно интересный путь "переходов". Про институтский PL/1 я молчу, это только для аттестата. А вот для заработной платы цепочка была следующая Turbo Pascal ► Clarion for DOS ► Virtual Pascal ► Delphi ► Perl Perl Perl :) Очень его много ► C Builder ► MinGW64+Qt5. И каждый раз я получал какие-то плюшки от изучения нового, и чуйка не разу не подводила, затраты окупались. Пару лет назад заинтересовался D, но повозившись, интерес угас. Ибо это недопиленный в плане инструментария, но самый настоящий заменитель С++. А вот Раст, это скорее всего Супер-Заменитель Си без плюсов. Он не раздувает/не изменяет/да и не реализует в полной мере плюсовую концепцию ОО(Проектирования), но предлагает свои красивые решения. Это манит. Естественно, все вышесказанное - мое ИМХО, спорить не намерен.

          Цитата Gonarh @
          Раст - говно, разработчиков - сжечь.

          жЫвьем, или может сперва живительным ипритом обработаем душевные раны казнимых, мой фюрер?! :lol:

          И да, Wound ... Среди ЯП, которые генерят байткод мне не нравятся все, кто потом этот байткод гоняют в своей виртуальной машине, или с использованием ЖЫЫЫЫРНЮЩЕГО фрэймворка. Еще Никлаус Вирт в далеком прошлом, 1996 годе, писал "Долой ЖЫР!". Кросава сказал, респектую уже десятилетия. И очень жаль непопулярность разновидности байт-кода - "шитый код", который юзает в первую очередь Forth, а возможно и Factor.

          Это сообщение было перенесено сюда или объединено из темы "Создание и запуск бота для Skype"
            Цитата JoeUser @
            А вот Раст, это скорее всего Супер-Заменитель Си без плюсов. Он не раздувает/не изменяет/да и не реализует в полной мере плюсовую концепцию ОО(Проектирования), но предлагает свои красивые решения. Это манит. Естественно, все вышесказанное - мое ИМХО, спорить не намерен.

            ИМХО, Раст вообще никак не заменит С++. Почему? Ну потому что С++ параллельно развивается, на нем туева хуча написанного ПО, библиотек, готовых решений. Под практически все системы, даже перспективные есть компиляторы. И он универсальный, а не заточен на что то конкретное. Он легко и просто скрещивается с другими языками, технология давно отлажена. В общем, не хочу тебя разочаровывать, но Rust вряд ли догонит С++, а уж о замещении речи вообще нет.

            Цитата JoeUser @
            И да, Wound ... Среди ЯП, которые генерят байткод мне не нравятся все, кто потом этот байткод гоняют в своей виртуальной машине, или с использованием ЖЫЫЫЫРНЮЩЕГО фрэймворка.

            Байткод там нужен не для красоты, а для кросплатформенности. Собственно ради этого там и есть байткод. Да и причем тут байткод? Если тебе очень надо, ты можешь писать неуправляемый код, еще и сборщик мусора отключить, только это будет непереносимое решение. Вопрос только зачем?
            Если мне нужна кросплатформенность, мне проще взять и написать на явошарпе 1 раз. И мне вообще плевать где это будет выполнятся в убунту или под макось или под вендою. В твоем случае придется перекомпилировать под каждую систему.

            Добавлено
            Цитата JoeUser @
            Еще Никлаус Вирт в далеком прошлом, 1996 годе, писал "Долой ЖЫР!". Кросава сказал, респектую уже десятилетия. И очень жаль непопулярность разновидности байт-кода - "шитый код", который юзает в первую очередь Forth, а возможно и Factor.

            Как по мне, то QT, который ты так любишь - жирнюючий до беспредела. Еще в эпоху паскаля, когда я брал QT, то меня очень сильно расстраивал размер моих программ на выходе, после чего я его просто бросал.
            Поэтому я не понимаю - почему вот этот ЖЫР ты юзаешь и хвалишь, а вон тот ЖЫР - долой ЖЫР?

            Это сообщение было перенесено сюда или объединено из темы "Создание и запуск бота для Skype"
            Сообщение отредактировано: Wound -
              Цитата Wound @
              Как по мне, то QT, который ты так любишь - жирнюючий до беспредела

              Это первое, что мня печалит до кровавых слез!!! :lol: Пользую - да, люблю ... НЕНАВИЖУ ЗА ЖЫР!!! Уже присматривался с либе Nana, но профинтерес угас. Но заметка осталась! Если что-то обломится и сроками зажмут средне - попробую ее поучить и попользовать.

              Цитата Wound @
              Раст вообще никак не заменит С++. Почему? Ну потому что

              Потому, что он не заточен менять что-то из кода, из наработок, из библиотек и наследия!!! И, повторюсь, если он и будет огрызаться - но только с СИ без плюсов в плане новых разработок!

              Цитата Wound @
              мне проще взять и написать на явошарпе 1 раз.

              А кагже честь программера, или материальный бонус это наше все? А какгже память Великих Отцов программирования ZХ-Speсtrum, отцов Digger'а, где душераздирающая аркада вмещалась в 32...64 КИЛОБАЙТА?!!! :)

              Цитата Wound @
              В твоем случае придется перекомпилировать под каждую систему.

              Так и только так!!! Чтобы вытек ЖЫР бессистемной кросплатформенности. Даешь для каждой платформы апликейшены без ЖЫРА!!! :lol:
              И, как говорит мистер Жириновский ... "напоследочек" ... Qt - СРАНЫЙ ЖЫР!!! Который позволяет срубить лавандос просто быстрее. А потом, за стаканом виски, сидеть и краснеть, чтобы никто не видел ... "я его использовал, не асилил, слабак, #жыстьговно" :lol:

              Сообщения были разделены в тему "Rust vs Чистейший Си"

              Это сообщение было перенесено сюда или объединено из темы "Создание и запуск бота для Skype"
                Цитата JoeUser @
                Это первое, что мня печалит до кровавых слез!!! :lol: Пользую - да, люблю ... НЕНАВИЖУ ЗА ЖЫР!!! Уже присматривался с либе Nana, но профинтерес угас. Но заметка осталась! Если что-то обломится и сроками зажмут средне - попробую ее поучить и попользовать.

                Ну тогда довольно странно, бери тогда чистый С/С++ и бросай этот ЖЫРный QT.

                Цитата JoeUser @
                Потому, что он не заточен менять что-то из кода, из наработок, из библиотек и наследия!!! И, повторюсь, если он и будет огрызаться - но только с СИ без плюсов в плане новых разработок!

                Ну так какой же тогда это супер-мега заменитель С/С++ ? Если бы он таким был, тогда бы С/С++ давно уже в топке были бы. Ан нет, этот Rust очередная реинкарнация С/С++ с блекджеком и шлюхами, и не более. Да еще наследования там нет. Вообще ересь какая то.

                Цитата JoeUser @
                А кагже честь программера, или материальный бонус это наше все? А какгже память Великих Отцов программирования ZХ-Speсtrum, отцов Digger'а, где душераздирающая аркада вмещалась в 32...64 КИЛОБАЙТА?!!! :)

                Чай не в 95 году живем. Сейчас оперативной памяти в компьютерах больше, чем у людей в жестких дисках в 2000 годах было.

                Цитата JoeUser @
                Так и только так!!! Чтобы вытек ЖЫР бессистемной кросплатформенности. Даешь для каждой платформы апликейшены без ЖЫРА!!! :lol:
                И, как говорит мистер Жириновский ... "напоследочек" ... Qt - СРАНЫЙ ЖЫР!!! Который позволяет срубить лавандос просто быстрее. А потом, за стаканом виски, сидеть и краснеть, чтобы никто не видел ... "я его использовал, не асилил, слабак, #жыстьговно" :lol:

                Ну посмотри на тех кто платит, сейчас многие даже на С++ не хотят разработку, хотят сразу под все ОС. И платят за это деньги. И оно работает и даже довольно быстро работает под все системы. Поэтому не вижу смысла в том, чтоб писать 10 лет то, что можно сделать за год. Это при том, что пока будешь писать все эти 10 лет, уже четыре раза выйдет новый стандарт, а твое поделие уже никому и нафиг не упрется.

                Эта тема была разделена из темы "Создание и запуск бота для Skype"
                  Цитата Wound @
                  Ну тогда довольно странно, бери тогда чистый С/С++ и бросай этот ЖЫРный QT.

                  Увы, сейчас модно и самое главное - выгодно по КПД ... говнокодить! :(

                  Цитата Wound @
                  Да еще наследования там нет. Вообще ересь какая то.

                  Во, ты узрел суть! Не к С++ тут апелляция, это же сразу видно. Си без плюсов тут для сравнения кстати.

                  Цитата Wound @
                  Чай не в 95 году живем. Сейчас оперативной памяти в компьютерах больше, чем у людей в жестких дисках в 2000 годах было.

                  "Старая песня о главном" :lol: Это примерно как "давайте расстреляем 100 подозреваемых, виновного точно казним". ОТМАЗА ПО КАЛЕНДАРЮ НЕ КАНАЕТ!!! Ибо гораздо раньше был озвучен прекрасный постулат - Бритва Оккама. Не нужно раздувать ЖЫР кода без необходимости - потомки проклянут!

                  Цитата Wound @
                  Поэтому не вижу смысла в том, чтоб писать 10 лет то, что можно сделать за год.

                  В плане обеспечения достатка - ты на стопицот процентов прав! Хочешь ламборджини - учи сишарп. Только после смыва своей души в унитаз не забудь протереть ободок унитаза и воспользоваться ароматизатором воздуха, про функцию ершика и С++ я молчу.
                    Цитата Gonarh @
                    разработчиков - сжечь

                    Кстати ... я тут посылал запрос в небесную канцелярию, и мне ответили, что методику SFINAE для С++ придумал Говнодемон!
                    Говнее методики не придумать. Говнявое говенное говно. Фу - дышать нечем!

                    У Раста в этом плане - лаконичность, однозначность и отсутствие говнокода.
                      Цитата JoeUser @
                      Увы, сейчас модно и самое главное - выгодно по КПД ... говнокодить!

                      Ну а зачем ты мучаешь себя? Переходи на assembler и делов то. Никакого тебе ЖЫРа нет. Ну и заодно пиши все с нуля, зачем тебе сторонние библиотеки?

                      Цитата JoeUser @
                      Во, ты узрел суть! Не к С++ тут апелляция, это же сразу видно. Си без плюсов тут для сравнения кстати.

                      Си не позиционируется себя как ОО язык, в отличии от Rust. Ну и Rust вряд ли угонится за Си, по памяти и скорости просядет. Смысл их сравнивать? Да и ниша у Rust на сколько я понимаю несколько другая. Он стоит где то между С++ и явошарпами, а не между C++ и assembler. Так что такое сравнение тут не уместно. По сравнению с Си, в том же Rust будет очень много ЖЫРа.

                      Цитата JoeUser @
                      "Старая песня о главном" Это примерно как "давайте расстреляем 100 подозреваемых, виновного точно казним". ОТМАЗА ПО КАЛЕНДАРЮ НЕ КАНАЕТ!!! Ибо гораздо раньше был озвучен прекрасный постулат - Бритва Оккама. Не нужно раздувать ЖЫР кода без необходимости - потомки проклянут!

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

                      Цитата JoeUser @
                      В плане обеспечения достатка - ты на стопицот процентов прав! Хочешь ламборджини - учи сишарп. Только после смыва своей души в унитаз не забудь протереть ободок унитаза и воспользоваться ароматизатором воздуха, про функцию ершика и С++ я молчу.

                      Ничего не понял. У тебя видимо очень предвзятое отношение к тем или иным языкам. Может не осилил просто? :D

                      Добавлено
                      Цитата JoeUser @
                      У Раста в этом плане - лаконичность, однозначность и отсутствие говнокода.

                      Ага, конечно :lol:
                      https://habr.com/ru/post/315152/#41
                      Сообщение отредактировано: Wound -
                        Цитата Wound @
                        Си не позиционируется себя как ОО язык, в отличии от Rust

                        WTF? Откуда вдруг у Раста взялось позиционирование на ООП? :blink: Я не так давно тут про это спрашивал, ответили типа "можно", но таким колоритным кодом, что ну его нафик это ООП. Тут ты заблуждаешься на стопицот процентов, уверяю тебя.

                        Цитата Wound @
                        Ну а зачем ты мучаешь себя? Переходи на assembler и делов то. Никакого тебе ЖЫРа нет. Ну и заодно пиши все с нуля, зачем тебе сторонние библиотеки?

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

                        Цитата Wound @
                        Ну и Rust вряд ли угонится за Си, по памяти и скорости просядет

                        Откуда инфа? Как может Си обогнать если Раст ничего лишнего не делает? Будут работать одинаково. А вот плюсы имеют все возможности просесть по скорости. Возьми ту же идиому виртуальных функций, а тем паче двойную диспетчеризацию.

                        Цитата Wound @
                        Ничего не понял. У тебя видимо очень предвзятое отношение к тем или иным языкам. Может не осилил просто? :D

                        У меня чуйка, и подсказывает она, что можно зарабатывать и без СУПЕР ЖЫРА. Да, не осилил ввиду стойкого отвращения.

                        Цитата Wound @
                        Ага, конечно :lol:

                        Статья неосилятора :lol: Одно то, что он не может осознать понятие "безопасного кода" намекает кагбэ :lol: Дальше этого бред не читал.
                          M

                          Киля, холиварить по теме топика продолжаем тут.
                          За тобой слово, давай наезжай :)
                            Цитата JoeUser @
                            WTF? Откуда вдруг у Раста взялось позиционирование на ООП? Я не так давно тут про это спрашивал, ответили типа "можно", но таким колоритным кодом, что ну его нафик это ООП. Тут ты заблуждаешься на стопицот процентов, уверяю тебя.

                            Цитата
                            Объектно-ориентированное программирование как таковое языком не поддерживается, но язык позволяет реализовать большинство понятий ООП при помощи других абстракций[8].


                            Цитата JoeUser @
                            В этом плане Си без плюсов хорош, и библиотек замечу - на порядки больше плюсанутых. И биндить их в Раст вполне себе можно. Си без плюсов - почет и уважуха!

                            А нахрена мне тогда Rust, если эти библиотеки на Сях? :D

                            Цитата JoeUser @
                            Откуда инфа? Как может Си обогнать если Раст ничего лишнего не делает? Будут работать одинаково. А вот плюсы имеют все возможности просесть по скорости. Возьми ту же идиому виртуальных функций, а тем паче двойную диспетчеризацию.

                            Ну например: https://eax.me/cpp-will-never-die/
                            Цитата

                            Rust действительно безопасный, но, к сожалению, далеко не быстрый. По скорости на момент написания этих строк Rust сравним с Java, Go и Haskell:


                            Цитата JoeUser @
                            У меня чуйка, и подсказывает она, что можно зарабатывать и без СУПЕР ЖЫРА. Да, не осилил ввиду стойкого отвращения.

                            Ну т.е. предвзятое отношение.

                            Цитата JoeUser @
                            Статья неосилятора Одно то, что он не может осознать понятие "безопасного кода" намекает кагбэ Дальше этого бред не читал.

                            А зря не читал.
                              M
                              ДИКЕЙ, почисти ящик приватных сообщений, ибо они более не принимаются.
                              Цитата
                              Цитата
                              Цитата
                              Привет!
                              Цитата
                              Закрыто JoeUser 27-08-2019: Введите причину закрытия темы здесь
                              Не очень понял, зачем ты закрыл тему, хоть какая-то активность началась в разделе...
                              Дарова! Просто я осознал, что был неправ при ее старте. Раст не альтернатива Си с плюсами. Вообще никаким боком. Раст альтернатива - Си без плюсов. Обычному Си. И для этого я открыл новую тему.
                              Да, но там уже немного иная дискуссия пошла. Боюсь, загнется.
                              Просто пойми, для знающих С++ идеология Раста немного иная, вернее - много много иная. Это как сравнивать мягкое с теплым. Это разные плоскости, разные подходы, принципы. Можно сравнить горячее с зеленым? Тут примерно так же. Но вот сравнение с Си без плюсов - тут есть хорошая тема для обсуждения.
                                Цитата Wound @
                                А нахрена мне тогда Rust, если эти библиотеки на Сях?

                                Это просто - Раст обеспечивает "безопасность кода", а Си - нет.

                                Цитата Wound @
                                Ну например: https://eax.me/cpp-will-never-die/

                                Хороший коммент по этому посту "Пост ради поста". Автор статьи - голимый ноунейм с деградацией IQ. Слыш, Киля, аля-улю, просыпайся!!! Включай ЧИСТО свой моск. Мне не нужны статьи левых даунов! Если есть чо предъявить - напиши сам своими словами.

                                Цитата JoeUser @
                                Ну т.е. предвзятое отношение.

                                Моя институтская специальность - системный аналитик. Вторая. Но учился я хорошо, и учеба мне по всей жизни помогает. "Предвзятость" - один из критериев в построении финальной оценки. Эмоции, где без них. Я это учитываю.

                                Цитата Wound @
                                А зря не читал.

                                Недавно посадили БОГА КУЗЮ, зря не ходил покаяться.
                                  Цитата JoeUser @
                                  Это просто - Раст обеспечивает "безопасность кода", а Си - нет.

                                  Ну так какую безопасность мне обеспечит Rust с Си библиотекой? :D

                                  Цитата JoeUser @
                                  Хороший коммент по этому посту "Пост ради поста". Автор статьи - голимый ноунейм с деградацией IQ. Слыш, Киля, аля-улю, просыпайся!!! Включай ЧИСТО свой моск. Мне не нужны статьи левых даунов! Если есть чо предъявить - напиши сам своими словами.

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

                                  Цитата JoeUser @
                                  Недавно посадили БОГА КУЗЮ, зря не ходил покаяться.

                                  Ну ты ведь аргументы не читал, но мнение имеешь. Как с тобой вести дискуссию? Что не так там автор написал?
                                  Сообщение отредактировано: Wound -
                                    Цитата Wound @
                                    А вообще не очень понимаю, какой смысл учить язык, позиционирующий себя как альтернатива С++?

                                    В эту фразу можно совершенно любой язык подставить :D
                                      Цитата OpenGL @
                                      А вообще не очень понимаю, какой смысл учить язык, позиционирующий себя как альтернатива С++?

                                      Ну если ты пишешь на C++, нафига тебе учить его заменитель, если ты не собираешься на нем писать? Rust не дополнит С++. Соответственно тебе нужно либо переходить на этот язык, либо изучить другой, который будет как дополнение к основному например.
                                        Цитата JoeUser @
                                        Дарова! Просто я осознал, что был неправ при ее старте. Раст не альтернатива Си с плюсами. Вообще никаким боком. Раст альтернатива - Си без плюсов. Обычному Си. И для этого я открыл новую тему.

                                        Шта? :lol: Альтернативу сишке искать не нужно потому что си - махровое легаси, которому нет альтернативы только в том случае, если на используемой платформе нет других компиляторов.

                                        Добавлено
                                        Цитата Wound @
                                        Ну если ты пишешь на C++, нафига тебе учить его заменитель, если ты не собираешься на нем писать?

                                        Погоди, ты про топикстартера или про абстрактного человека? Если второе, то причин учить новый язык может быть масса, начиная от "почему бы и нет" и заканчивая "вот подучу язык и уйду в %COMPANYNAME%, где на нём пишут".
                                          Цитата Wound @
                                          Ну так какую безопасность мне обеспечит Rust с Си библиотекой?

                                          Все как обычно, очередную безопасную либу на голом СИ. И потом многое обеспечит Раст.
                                            Цитата OpenGL @
                                            Погоди, ты про топикстартера или про абстрактного человека?

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

                                            Цитата OpenGL @
                                            Если второе, то причин учить новый язык может быть масса, начиная от "почему бы и нет" и заканчивая "вот подучу язык и уйду в %COMPANYNAME%, где на нём пишут".

                                            Я с этим не спорил.
                                              Цитата Wound @
                                              Про топикстартера.

                                              А, ну тогда я пас, сам выясняй причины :)
                                                Явашарп - гавно с ЖЫРОМ! Давай опровергаай.
                                                А я посчитаю мегабайты либ сраного .net, которые стали системными ВНЕЗАПНО))))
                                                Сообщение отредактировано: JoeUser -
                                                  Цитата JoeUser @
                                                  А я посчитаю мегабайты либ сраного .net, которые стали системными ВНЕЗАПНО))))

                                                  Заодно рантаймы других ЯП не забудь посчитать.
                                                    Цитата JoeUser @
                                                    Кстати ... я тут посылал запрос в небесную канцелярию, и мне ответили, что методику SFINAE для С++ придумал Говнодемон!
                                                    Врёт канцелярия.

                                                    Добавлено
                                                    Цитата JoeUser @
                                                    Возьми ту же идиому виртуальных функций, а тем паче двойную диспетчеризацию.
                                                    В C будет то же самое.

                                                    Добавлено
                                                    Цитата JoeUser @
                                                    Просто я осознал, что был неправ при ее старте. Раст не альтернатива Си с плюсами. Вообще никаким боком. Раст альтернатива - Си без плюсов. Обычному Си. И для этого я открыл новую тему
                                                    Ну т.е. ты решил нетематический вопрос, а остальные пусть новую тему "Rust vs C++" создают. Я правильно понял?
                                                    Сообщение отредактировано: Qraizer -
                                                      Цитата Qraizer @
                                                      Ну т.е. ты решил нетематический вопрос, а остальные пусть новую тему "Rust vs C++" создают. Я правильно понял?

                                                      Правильно! Если есть желание бодаться именно с плюсами - вэлком!
                                                      Первый голос в приват мне - и я сразу же открываю тему.

                                                      ЗЫ: Закрытие темы - лишь подтверждение моей излишней и неоправданной самоуверенности. А кто не ошибается? :-?

                                                      Добавлено
                                                      Ну или сам открой, у тебя возможности равные с моими.

                                                      Добавлено
                                                      Цитата Qraizer @
                                                      C будет то же самое.

                                                      Если не выкинуть из головы ОО-парадигму.
                                                        Цитата applegame @
                                                        Ну вот есть у тебя список аргументов в виде массива строк, и надо вызвать стороннюю программу с этими аргументами. В аргументах ест пробелы и слеши/бэкслеши, функции для эскейпа нет, приходится городить свой кошмар.

                                                        Это любители составлять SQL-запросы конкатенацией вместо использования параметризованных запросов такой хернёй страдают?

                                                        Нормальные люди используют API-метод, принимающий имя исполняемого файла и массив аргументов. Например.
                                                          Цитата korvin @
                                                          Это любители составлять SQL-запросы конкатенацией вместо использования параметризованных запросов такой хернёй страдают?
                                                          Наоборот. Это не любители, но их заставляют так делать.
                                                          Цитата korvin @
                                                          Нормальные люди используют API-метод, принимающий имя исполняемого файла и массив аргументов.
                                                          Именно так, например. А теперь покажи пожалуйста пальцем, где по твоей ссылке "API-метод, принимающий имя исполняемого файла и массив аргументов"?
                                                            Цитата applegame @
                                                            А мы в своем D как-то привыкли к простому

                                                            Т.е. не пользоваться документацией и поиском? Окей.

                                                            Цитата D_KEY @
                                                            Потому что в большинстве случаев оно ей является на практике.

                                                            Зависит от практики. И языка.

                                                            Цитата D_KEY @
                                                            Чтобы защититься от ошибок при этом самом рефакторинге, например.

                                                            Вот у тебя есть

                                                            ExpandedWrap disabled
                                                              public interface Foo {
                                                               
                                                                  void bar();
                                                              }
                                                               
                                                              public class Gee implements Foo {
                                                               
                                                                  public void bar() {
                                                               
                                                                  }
                                                              }


                                                            Есть код, использующий Foo и Foo.bar
                                                            И есть код, использующий Gee и Gee.bar, но не Foo.

                                                            Ты решил поменять сигнатуру bar, что среда должна сделать?
                                                            1) поменять сигнатуры и у Foo.bar и у Gee.bar? Тогда вторая половина кода просто сломается и придётся там вручную всё фиксить.
                                                            2) не трогать сигнатуру Gee.bar? Тогда среда собственно ничего не сделает за пределами Foo, поломается первая половина кода и придётся её править вручную.
                                                            3) что-то среднее? Например, поискать, где какой класс и как используется и поменять так, чтобы наименьшее количество кода поломалось? Но такой анализ займёт заметно больше времени, ещё и асимптотическая сложность, наверняка, круче линейной, на больших проектах можно будет повеситься, если рефакторить какой-нибудь очень базовый, широкоиспользуемый интерфейс. Но главное, что такие изменения могут не везде быть семантически корректными и придётся ещё их вылавливать.
                                                            4) что-то умное? Например, менять сигнатуры в тех классах, где есть аннотация @Override и не менять, там где её нет? Поломок всё равно будет не мало, аннотация может отсутствовать неумышленно, по забывчивости, из-за нежелания захламлять код или наоборот присутствовать, добавленная просто на автомате, как самой IDE, так и программистом, чтобы удовлетворить warning'и об отсутствующей аннатоции. Ну и, эти аннотации опциональны только в Java, насколько я знаю, в Kotlin они обязательны.

                                                            Цитата D_KEY @
                                                            Конкретно в Kotlin ведь и виртуальные методы нужно явно указывать через open.

                                                            Ну, это не совсем «виртуальность», т.к. фиг знает, как они там внутри реализованы, но да, методы, открытые для переопределения, должны быть отмечены как open. В Java наоборот — закрытые методы помечаются как final.

                                                            Цитата D_KEY @
                                                            Так же ещё полезно при чтении кода класса - сразу видно, "родная" эта функция у класса или переопределенная.

                                                            IDE это и так отлично показывает на полях, возле номера строки, позволяя ещё и при этом перейти к наследнику/реализации и/или родителю/базовому-методу.

                                                            Добавлено
                                                            Цитата applegame @
                                                            А теперь покажи пожалуйста пальцем, где по твоей ссылке "API-метод, принимающий имя исполняемого файла и массив аргументов"?

                                                            Там целый класс Process. Написать для него статический метод религия не позволяет?
                                                              Цитата korvin @
                                                              Т.е. не пользоваться документацией и поиском? Окей.
                                                              Он искал, не нашел. Точнее нашел только топик на Stack Overflow.
                                                              Цитата korvin @
                                                              Там целый класс Process. Написать для него статический метод религия не позволяет?
                                                              Где в этом классе возможность передать процессу параметры в виде массива, а не единой строкой уже сконкатенированных параметров?
                                                                Цитата applegame @
                                                                Именно так, например. А теперь покажи пожалуйста пальцем, где по твоей ссылке "API-метод, принимающий имя исполняемого файла и массив аргументов"?

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

                                                                MS в своём репертуаре. В Java в этом вопросе всё в порядке.
                                                                  Цитата korvin @
                                                                  Да, пардон, невнимателен был. Есть такое.
                                                                  Киля давал ссылку на эту штуку. Но судя по дисклеймеру в верхней части страницы, последняя версия .NET не поддерживает этот аргумент. И что-то я сомневаюсь, что он умеет правильно эскейпить параметры.
                                                                    Цитата applegame @
                                                                    последняя версия .NET не поддерживает этот аргумент.

                                                                    Э-э, т.е. они сначал добавили её (находил proposal на гитхабе), а потом обратно убрали? Лол.
                                                                      Цитата korvin @
                                                                      аннотация может отсутствовать неумышленно, по забывчивости

                                                                      Поэтому первым делом перевожу эту инспекцию с уровня варнингов на уровень ошибок.
                                                                        Цитата korvin @
                                                                        Ты решил поменять сигнатуру bar, что среда должна сделать?

                                                                        Какая среда? IDE? В идеале - указать на ситуацию и спросить.

                                                                        Цитата
                                                                        IDE это и так отлично показывает на полях, возле номера строки, позволяя ещё и при этом перейти к наследнику/реализации и/или родителю/базовому-методу.

                                                                        Это прекрасно, но мы про язык.
                                                                        Тот же Bitbucket в diff'е pull request'а не покажет.
                                                                          Цитата korvin @
                                                                          Э-э, т.е. они сначал добавили её (находил proposal на гитхабе), а потом обратно убрали? Лол.

                                                                          https://github.com/dotnet/corefx/issues/23592

                                                                          Цитата applegame @
                                                                          Киля давал ссылку на эту штуку. Но судя по дисклеймеру в верхней части страницы, последняя версия .NET не поддерживает этот аргумент. И что-то я сомневаюсь, что он умеет правильно эскейпить параметры.

                                                                          Вся фишка в том, что этот массив на сколько я понял, читая по диагонале - нужен для юниксов. Сейчас развивается .NET CORE, поэтому вводят в .NET Core 3, который уже вроде как вышел или выйдет буквально через пару дней.

                                                                          Под виндой обычно не возникает проблем с запуском програм с командной строкой. Ну разве что у совсем уж ушлых, которые ни гуглить, ни почитать документацию не в состоянии.
                                                                          Я например за время писания на шарпах, 1 раз задал вопрос в интернете, тут на форуме с Razor partial view, и то, потому что специфичная хрень, и я пол инета обыскал пока нашел то что нужно. В остальном у меня вобросов таких, чтоб писать их на стековерфлоу не возникало, особенно про какие нибудь парсеры и подобное, а если и возникали то гуглится это за 2 минуты. Поэтому я не знаю, чего там твой друг не осилил. Твой язык D, на сколько я понял изначально писался с упором на каких нибудь линуксоидов и там эту фичу сделали первым делом. Но в конечном итоге - эта хрень не более, чем библиотечный сахар, который решается средствами языка довольно просто и не принужденно, даже отдельной темы не стоит эта проблема.

                                                                          Это как например доколебаться - как там с форматированием строки в D ?
                                                                          Могу я написать вот так вот?
                                                                          ExpandedWrap disabled
                                                                            string value = $"[{DateTime.Now}] >> Command line: [{ String.Concat(Environment.GetCommandLineArgs())}], Context: {context.GetContextName()}";

                                                                          Нет, не могу? Нужно мудохаться со всякими вот этими "%s %d " и подобное? Фуу, ппц D оцтой, ведь с таким приходится чаще работать, чем с каким нибудь экранированием командной строки.
                                                                            Цитата JoeUser @
                                                                            Если не выкинуть из головы ОО-парадигму.
                                                                            С чего бы? Поинтер ту фанкшн всё равно будет поинтером ту э фанкшн. Подкапотный он чи явный, без разницы.
                                                                              Цитата JoeUser @
                                                                              Как может Си обогнать если Раст ничего лишнего не делает? Будут работать одинаково. А вот плюсы имеют все возможности просесть по скорости. Возьми ту же идиому виртуальных функций, а тем паче двойную диспетчеризацию.

                                                                              :lool:
                                                                                Цитата Wound @
                                                                                Вся фишка в том, что этот массив на сколько я понял, читая по диагонале - нужен для юниксов.
                                                                                А в чем существенная разница между командной строкой юниксов и винды?
                                                                                Цитата Wound @
                                                                                Под виндой обычно не возникает проблем с запуском програм с командной строкой.
                                                                                Видимо был необычный случай.
                                                                                Цитата Wound @
                                                                                Ну разве что у совсем уж ушлых, которые ни гуглить, ни почитать документацию не в состоянии.
                                                                                Я думаю, что подобные проблемы не возникают только у бездарей, которые пишут только примитивные программы и дающих обосранные ссылки на устаревшие фичи. korvin - исключение, он признал свою ошибку, да и не шарпист он.
                                                                                Цитата Wound @
                                                                                Я например за время писания на шарпах, 1 раз задал вопрос в интернете, тут на форуме с Razor partial view, и то, потому что специфичная хрень, и я пол инета обыскал пока нашел то что нужно. В остальном у меня вобросов таких, чтоб писать их на стековерфлоу не возникало, особенно про какие нибудь парсеры и подобное, а если и возникали то гуглится это за 2 минуты. Поэтому я не знаю, чего там твой друг не осилил.
                                                                                Друг-то все осилил, но ему не понравилось, что пришлось тратить время на это.
                                                                                Цитата Wound @
                                                                                Но в конечном итоге - эта хрень не более, чем библиотечный сахар, который решается средствами языка довольно просто и не принужденно, даже отдельной темы не стоит эта проблема.
                                                                                Да, сахар, но решается нелегко и принужденно. Даже в Microsoft целую статью накатали на эту тему.
                                                                                Сообщение отредактировано: applegame -
                                                                                  Цитата Wound @
                                                                                  Это как например доколебаться - как там с форматированием строки в D ?
                                                                                  С форматированием строки в D все отлично.
                                                                                  Цитата Wound @
                                                                                  Могу я написать вот так вот?
                                                                                  Именно так нет, но строковая интерполяция есть в библиотечной реализации, если любишь подобное.
                                                                                  Цитата Wound @
                                                                                  Нужно мудохаться со всякими вот этими "%s %d " и подобное?
                                                                                  Зачем мудохаться? Пиши везде %s, оно само распознает тип:
                                                                                  ExpandedWrap disabled
                                                                                    string value = format("[%s] >> Command line: [%s], Context: %s", DateTime.Now, String.Concat(Environment.GetCommandLineArgs()), context.GetContextName());

                                                                                  Цитата
                                                                                  Фуу, ппц D оцтой, ведь с таким приходится чаще работать, чем с каким нибудь экранированием командной строки.
                                                                                  По мне так вот это
                                                                                  Цитата Wound @
                                                                                  ExpandedWrap disabled
                                                                                    string value = $"[{DateTime.Now}] >> Command line: [{ String.Concat(Environment.GetCommandLineArgs())}], Context: {context.GetContextName()}";

                                                                                  гораздо отстойнее :D

                                                                                  И да, лично я спор с тобой, Киля, на эту тему закрываю. Ибо в плане споров с тобой я солидарен с Астаротом. :lol:
                                                                                  Сообщение отредактировано: applegame -
                                                                                    Цитата applegame @
                                                                                    А в чем существенная разница между командной строкой юниксов и винды?

                                                                                    Я ж выше ссылку дал:
                                                                                    Цитата

                                                                                    On Unix platforms, external executables (binaries) receive their arguments as an array of string literals, which makes for robust, predictable passing of arguments (see Linux system function execvp(), for instance).

                                                                                    Regrettably, in Windows there is no equivalent mechanism: a pseudo shell "command line" must be passed as a single string encoding all arguments, and it is up to the target executable itself to parse that line into individual arguments.

                                                                                    The ProcessStartInfo class currently only supports the Windows approach directly, by exposing a string Arguments property that expects the whole command line.

                                                                                    On Unix platforms, this means that even if you start out with an array of arguments, you must currently artificially assemble its elements into a single pseudo shell command line, only to have CoreFX split that back into an array of individual arguments behind the scenes so as to be able to invoke the platform-native process-creation function, which takes an array of arguments.


                                                                                    Цитата applegame @
                                                                                    Именно так нет, но строковая интерполяция есть в библиотечной реализации, если любишь подобное.

                                                                                    Ну так все, приплыли, как же вы там пишете, без такой важной фичи? :D

                                                                                    Цитата applegame @
                                                                                    Зачем мудохаться? Пиши везде %s, оно само распознает тип:

                                                                                    Это крайне неудобно и влечет за собой ошибки.


                                                                                    Цитата applegame @
                                                                                    По мне так вот это
                                                                                    Цитата Wound @ Вчера, 22:47

                                                                                    string value = $"[{DateTime.Now}] >> Command line: [{ String.Concat(Environment.GetCommandLineArgs())}], Context: {context.GetContextName()}";

                                                                                    гораздо отстойнее

                                                                                    Конечно для тебя это оцтойнее, не будешь же ты признавать что в D оцтойнее :D

                                                                                    Цитата applegame @
                                                                                    И да, лично я спор с тобой, Киля, на эту тему закрываю. Ибо в плане споров с тобой я солидарен с Астаротом.

                                                                                    О опять начались какие то истерики. Ты наверно с Астаротом нормально спорите? :D

                                                                                    Добавлено
                                                                                    Цитата applegame @
                                                                                    Я думаю, что подобные проблемы не возникают только у бездарей, которые пишут только примитивные программы и дающих обосранные ссылки на устаревшие фичи. korvin - исключение, он признал свою ошибку, да и не шарпист он.

                                                                                    Что это за бездарь тебе такие ссылки обосранные то давал? :D

                                                                                    Цитата applegame @
                                                                                    Друг-то все осилил, но ему не понравилось, что пришлось тратить время на это.

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

                                                                                    Добавлено
                                                                                    Цитата applegame @
                                                                                    Друг-то все осилил, но ему не понравилось, что пришлось тратить время на это.

                                                                                    Ну так а он как хотел? Сразу сел за незнакомый язык и начал писать в D/С++ стиле и чтоб все работало, не тратя на это время? Не, так не бывает.

                                                                                    Цитата applegame @
                                                                                    Да, сахар, но решается нелегко и принужденно. Даже в Microsoft целую статью накатали на эту тему.

                                                                                    Майкрософт, особенно что касается в C# по любому поводу и не поводу статьи катает. И всякую хрень в язык порой несут.
                                                                                      Цитата Wound @
                                                                                      Это крайне неудобно и влечет за собой ошибки.

                                                                                      Какие ошибки?
                                                                                        Цитата OpenGL @
                                                                                        Какие ошибки?

                                                                                        Разные ошибки, начиная от ошибки в форматировании и заканчивая тем, что перепутал местами параметры или вовсе не дописал. Так же при рефакторинге может меняться тип переменных, что тоже может повлечь некоторые ошибки в форматировании.
                                                                                          Какие ошибки в форматировании, если везде %s ты пишешь? Это же не сишная строка, в которой ты должен точный тип переменной указывать. Остальное, в принципе, с натяжкой можно назвать источником ошибки, но проблемы тут лично я не вижу - дело вкуса больше.

                                                                                          Добавлено
                                                                                          Кстати, умеет ли D парсить эту строку на этапе компиляции и сразу говорить, что, например, количество %s и переданных параметров друг другу не соответствуют?
                                                                                            Цитата OpenGL @
                                                                                            Какие ошибки в форматировании, если везде %s ты пишешь? Это же не сишная строка, в которой ты должен точный тип переменной указывать. Остальное, в принципе, с натяжкой можно назвать источником ошибки, но проблемы тут лично я не вижу - дело вкуса больше.

                                                                                            ты можешь передать например вместо 6 ожидаемых параметров - 5. Если везде писать %s, то как например выводить числа и дату? Да и зачем мне обо всем этом думать? Ведь очевидно, что писать переменные там где они должны быть - это проще, понятнее и удобнее.
                                                                                            Сравни:
                                                                                            ExpandedWrap disabled
                                                                                              var SomeVar = $"Сегодня, в {SomeTime}, я пошел в {SomeCity} погулять. Там я сел в автобус №{BusNumber} и поехал в парк {ParkName}, где встретил своего друга {FriendName}. Вместе с ним, мы пошли посидеть в кафе {CafeName}, выпили там по кружечке пива {BeerName}....";

                                                                                            И
                                                                                            ExpandedWrap disabled
                                                                                              var SomeVar = format("Сегодня, в %s, я пошел в %s погулять. Там я сел в автобус №%s и поехал в парк %s, где встретил своего друга %s. Вместе с ним, мы пошли посидеть в кафе %s, выпили там по кружечке пива %s....", не запутайся где какая переменная будет стоять, и если вдруг поменяешь их местами в тексте, не забудь и тут поменять);

                                                                                            По мне так первый вариант очевиднее, удобнее, красивее, меньше подвержен ошибкам. Но я сейчас не говорю что без этого жить невозможно, и это ой как плохо. Я привожу просто аналогию. Уже три 3 страницы речь идет, если честно о какой то белибирде, потому что кто то не нашел функцию, принимающую массив аргументов для запуска процесса. И выставляется это - как нечно ппц какое херовое. При том, что написание функции для экранирования как тебе хочется - в языке полным полно. В С++ у тебя возникают проблемы с запуском процесса с командной строкой? У меня не возникало ни разу, хотя задачи такие были. Я даже как то не задумывался об этом. а тут это ставиться в пику языку. Я считаю это абсурд. Давайте тогда обсудим ниличие функции в том или ином языке, ну например вот этой, которая форматирует строку. Одного поля ягоды. Я бы понял, если бы отсуствие этой фишки приводило к тому, что процесс не возмжно было запустить в принципе. Ну тут такое себе, непонятно что. А самое удивительное, что это не друг просто не разобрался, нет. Это язык говно, потому что в D же есть такая функция. С такими притензиями, можно обосрать абсолютно любой язык.
                                                                                            Сообщение отредактировано: Wound -
                                                                                              Т.е. на винде, если пишешь на Чистейших Сях, argc = 2, а в argv всегда два элемента: имя исполняемого файла и строка со всеми аргументами?
                                                                                                Нет, туда всё как надо приходит.
                                                                                                  Цитата OpenGL @
                                                                                                  Кстати, умеет ли D парсить эту строку на этапе компиляции и сразу говорить, что, например, количество %s и переданных параметров друг другу не соответствуют?
                                                                                                  Умеет. Если форматная строка известна на стадии компиляции, то можно вместо
                                                                                                  ExpandedWrap disabled
                                                                                                    format("%s: %s", a, b)

                                                                                                  писать
                                                                                                  ExpandedWrap disabled
                                                                                                    format!("%s: %s")(a, b)

                                                                                                  тогда компилятор будет проверять соответствие количества, а так же соответствие типов, если вместо %s указывать спецификаторы конкретных типов.
                                                                                                  Строковая интерполяция во многих случаях удобная вещь, но у нее есть ограничения, например нельзя указывать параметры форматирования. Например если я хочу вывести целое в 16-ричном виде или выравнивание сделать. Строковая интерполяция также не позволяет использовать форматную строку сформированную в рантайме.
                                                                                                  Дешный формат умеет также форматировать массивы и range. Короче наголову выше своих сишных и плюсовых аналогов.

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

                                                                                                  Таки это две скорее дополняющие друг-друга фичи, чем конкурирующие решения. Я бы предпочел иметь в языке обе возможности.
                                                                                                  Сообщение отредактировано: applegame -
                                                                                                    Шел 2019, народ парсил строки... :scratch: Возьмите перл, ёмана! :D
                                                                                                      Цитата Астарот @
                                                                                                      Шел 2019, народ парсил строки... Возьмите перл, ёмана!
                                                                                                      Мы не парсим строки, мы наоборот - форматируем. :rolleyes:
                                                                                                        Цитата Астарот @
                                                                                                        Возьмите перл, ёмана!
                                                                                                        Не слушайте этого демона!
                                                                                                          Цитата applegame @
                                                                                                          Мы не парсим строки, мы наоборот - форматируем. :rolleyes:

                                                                                                          А все равно ответ будет тот же :D

                                                                                                          Цитата Qraizer @
                                                                                                          Не слушайте этого демона!

                                                                                                          Во, дело говорит! Я сам перл в руки не возьму! :D
                                                                                                            Цитата Астарот @
                                                                                                            Шел 2019

                                                                                                            Цитата Астарот @
                                                                                                            Возьмите перл

                                                                                                            Да ты мастер взаимоисключающих параграфов.
                                                                                                              Цитата applegame @
                                                                                                              Умеет.

                                                                                                              Ну тогда аргументы Кили совсем несостоятельны.
                                                                                                                Цитата korvin @
                                                                                                                Да ты мастер взаимоисключающих параграфов.

                                                                                                                Умеем. Можем. Практикуем.

                                                                                                                Добавлено
                                                                                                                Вообще, если подумать, то задача "взять аргументы командной строки, как-то там их приготовить, и вызвать другую программу - и все это на шарпее" как-то вводит в оторопь. У меня такие задачи плотно ассоциируются исключительно со скриптами. В линухе целый баш для этого придумали, а потом заменили питоном. Нафига тут шарп-то? :-?
                                                                                                                  Очевидно, что это не является самостоятельной задачей. Ты никогда из своих программ другие что ли не вызывал?
                                                                                                                    Цитата OpenGL @
                                                                                                                    Ты никогда из своих программ другие что ли не вызывал?

                                                                                                                    Нет :) Если и надо было, то это всегда укладывалось в парадигму "сделай запрос к сервису" или "положи сообщение в очередь", а что б вот так, на уровне командной строки...
                                                                                                                      Цитата Астарот @
                                                                                                                      Нет Если и надо было, то это всегда укладывалось в парадигму "сделай запрос к сервису" или "положи сообщение в очередь", а что б вот так, на уровне командной строки...
                                                                                                                      Повезло. Я вот к ImageMagick делал вызовы. Не из шарпея. Городить целый сервис ради этого посчитал избыточным, тем более, что в сервисе все равно пришлось бы делать вызов к IM. :)
                                                                                                                      Сообщение отредактировано: applegame -
                                                                                                                        Цитата OpenGL @
                                                                                                                        Ну тогда аргументы Кили совсем несостоятельны.

                                                                                                                        Если бы ты еще понимал что тебе Киля то пишет. Наличие того, что компилятор будет считать за тебя количество аргументов еще не означает, что он будет за тебя проверять в правильном ли ты порядке написал эти аргументы. Я тебе выше даже пример написал.
                                                                                                                          Цитата Wound @
                                                                                                                          Я тебе выше даже пример написал.

                                                                                                                          И что? На практике порядок путается крайне редко, а формат длинной строки как в твоём примере вообще не делается.
                                                                                                                            Цитата OpenGL @
                                                                                                                            И что? На практике порядок путается крайне редко, а формат длинной строки как в твоём примере вообще не делается.

                                                                                                                            Я бы не сказал что редко. Смотря какая строка, смотря сколько раз ты это пишешь, смотря сколько параметров. С чего вдруг не делается? Например формирование какого нибудь XML'я вполне себе может содержать кучу параметров, в которых ты можешь запутаться. А если потом еще и местами поменяешь что то, то вообще голову сломаешь.

                                                                                                                            Но ты, можешь и дальше продолжать показывать на белое и говорить что это черное.
                                                                                                                            Может быть ты скажешь что и считать в обратной польской нотации - это норма, для любого среднестатистического человека, и ничего плохого тут нет, я не знаю. Я может быть какой то особенный человек, но для меня лично писать переменные в то место где они должны быть, вместо каких то странных знаков - довольно удобнее, чем писать странные знаки, в то место, где должны быть переменные, а потом список переменных.
                                                                                                                            В любом случае в шапрпах можно и с помощью функции Format, отформатировать строку, вот так же как тут приводили, плюс есть еще вот такой метод форматирования, который на мой субъективный взгляд в разы лучше, того что предлагаешь ты. Ну а если ты привык писать аргументы списком в конце форматной строки и считать в обратной польской нотации, то флаг тебе, как говорится в руки :D

                                                                                                                            Добавлено
                                                                                                                            Да и к слову, всегда бесили Сишные функции prinft/sprintf и остальные, потому что это источник целого класса ошибок. Как при рефакторинге, так и при написании. Причем не важно - отслеживается там количество параметров или нет. Из за этого я всегда больше отдавал предпочтение потоковому вводу/выводу. Как, думаю, и многие другие. Именно потому, что потоковый ввод/ввывод имитирует как раз то, что я привел выше, а не вот эти ваши format("%d%s%%-s$=%s%d.2354%fa%f", a,bc,c,ds,sd,sd,wr).
                                                                                                                            Сообщение отредактировано: Wound -
                                                                                                                              Цитата Wound @
                                                                                                                              Я бы не сказал что редко.

                                                                                                                              Это теоретические рассуждения, или ты писал на языках, где форматная строка полностью проверяется на этапе компиляции?

                                                                                                                              Цитата Wound @
                                                                                                                              Да и к слову, всегда бесили Сишные функции prinft/sprintf и остальные, меня всегда они бесили, потому что это источник целого класса ошибок.

                                                                                                                              Ну так это правильно - когда нет никаких проверок, и даже не факт, что упадёт в рантайме если что не так форматная строка действительно говно. Но, судя по всему, D-шный от него отстоит от сишного форматирования так же далеко (если не дальше), как и плюсовый.
                                                                                                                                Цитата OpenGL @
                                                                                                                                Это теоретические рассуждения, или ты писал на языках, где форматная строка полностью проверяется на этапе компиляции?

                                                                                                                                Когда доходит до практики, то это превращается в практические рассуждения. Да и вообще, все что мы тут обсуждаем - теоретически рассуждения :D

                                                                                                                                Цитата OpenGL @
                                                                                                                                Ну так это правильно - когда нет никаких проверок, и даже не факт, что упадёт в рантайме если что не так форматная строка действительно говно. Но, судя по всему, D-шный от него отстоит от сишного форматирования так же далеко (если не дальше), как и плюсовый.

                                                                                                                                Ты не понял, что тебе мешает написать в D?
                                                                                                                                ExpandedWrap disabled
                                                                                                                                  string userJson = format("UserObject:{
                                                                                                                                   FirstName: %s,
                                                                                                                                   LastName: %s,
                                                                                                                                   City: %s,
                                                                                                                                   Street: %s,
                                                                                                                                   Phone: %s
                                                                                                                                   }", LastName, FirstName, Street, City, Phone);
                                                                                                                                ??? Он это как то отследит?

                                                                                                                                Добавлено
                                                                                                                                Сравни это с этим:
                                                                                                                                ExpandedWrap disabled
                                                                                                                                  string userJson = $"UserObject:\{
                                                                                                                                   FirstName: {LastName},
                                                                                                                                   LastName: {FirstName},
                                                                                                                                   City: {Street},
                                                                                                                                   Street: {City},
                                                                                                                                   Phone: {Phone}
                                                                                                                                  \}";

                                                                                                                                Неужели разница не очевидна?
                                                                                                                                Сообщение отредактировано: Wound -
                                                                                                                                  Цитата Wound @
                                                                                                                                  Ты не понял, что тебе мешает написать в D?

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

                                                                                                                                    Так я выше писал, это такая же мелочь, как отсутствие, на данный момент(уже в Net core 3.0 эта возможность появится), массива для аргументов командной строки. Ведь не часто приходится запускать процесс с какими то хитрыми параметрами. А когда приходится - можно ведь написать 1 раз нормальное экранирование, и забыть про это, тем более что язык представляет кучу средств для этого.
                                                                                                                                    И наличие какой то функции в D, принимающий список аргументов так же не настолько основополагающее, как тут мне хотели представить. Именно об этом и идет разговор. Перечитай.
                                                                                                                                    Сообщение отредактировано: Wound -
                                                                                                                                      Цитата Wound @
                                                                                                                                      И наличие какой то функции в D, принимающий список аргументов так же не настолько основополагающее, как тут мне хотели представить. Именно об этом и идет разговор. Перечитай.
                                                                                                                                      Где такое ты встретил? Противопоставлять C# и D начал ты. Изначально речь шла просто о недостатках C#. В D тонны своего говна в других местах. Так что утверждать, что D лучше C# в общем смысле было бы глупо.
                                                                                                                                      Сообщение отредактировано: applegame -
                                                                                                                                        Цитата JoeUser @
                                                                                                                                        Просто пойми, для знающих С++ идеология Раста немного иная, вернее - много много иная.

                                                                                                                                        О, что-то сразу не заметил это. Я как раз противоположной т.з. придерживаюсь - плюсовик в расте найдёт немало знакомых из плюсов концепций, таких как наследование в виде ссылки/указателя, в т.ч. умного, на "базовый класс", raii на детерминированно вызывающихся деструкторах, использование move семантики и т.п. Так что надо будет только привыкнуть к BC и научиться проектировать систему с учётом его наличия (что, по небольшому опыту, не слишком сложно), и выкинуть привычку всё писать максимально обобщённо на шаблонах, если таковая имеется.
                                                                                                                                          Цитата applegame @
                                                                                                                                          Где такое ты встретил? Противопоставлять C# и D начал ты. Изначально речь шла просто о недостатках C#. В D тонны своего говна в других местах. Так что утверждать, что D лучше C# в общем смысле было бы глупо.

                                                                                                                                          What? :D
                                                                                                                                          Щас я тебе покажу кто что начал чему противопоставлять и где я такое встретил.
                                                                                                                                          Смотри:
                                                                                                                                          Цитата applegame @
                                                                                                                                          Последнее на что жаловался: https://stackoverflow.com/questions/5510343...ents-in-c-sharp
                                                                                                                                          Такая простая вещь, а делается через адскую жопу.

                                                                                                                                          Потом ты повторил еще и korvin'у:
                                                                                                                                          Цитата applegame @
                                                                                                                                          Ну вот есть у тебя список аргументов в виде массива строк, и надо вызвать стороннюю программу с этими аргументами. В аргументах ест пробелы и слеши/бэкслеши, функции для эскейпа нет, приходится городить свой кошмар.

                                                                                                                                          Дальше я написал тебе разные варианты того, как это можно экранировать, на что ты ответил:
                                                                                                                                          Цитата applegame @
                                                                                                                                          Цитата
                                                                                                                                          Например, из того что я понял, вот всякие разные варианты, и далеко не последние:
                                                                                                                                          https://rextester.com/FQLFU35600

                                                                                                                                          Ну хз, Киля. Может вы там в своем шарпе привыкли к говну вроде

                                                                                                                                          Цитата
                                                                                                                                          String.Join("", cmd.Select(a => String.Format(" \"{0}\" ", a))).Replace(@"\", @"\\").Replace("\"", "\\\"").Trim();


                                                                                                                                          А мы в своем D как-то привыкли к простому:

                                                                                                                                          Т.е. ты привел какую то шнягу, которую твой друг не смог написать как в D вызовом одной функции, после чего противопоставил ему D, явно указывая на то, что вы там привыкли к простому, а не к говну. А теперь значит ты меня обвиняешь в том, что это я начал противопоставлять C# и D. Изначально да речь шла о недостатках C#, ты привел один сомнительный пример с командной строкой и начал раздувать на этом месте какой то непонятный спор. Я тебе привел варианты того как можно экранировать, пока нет функционала с массивом аргументов. Ты короче обосрал эти варианты и написал что вы делаете по простому, с помощью вызова специально предназначенной для этого функции. Ну вот я тоже привел пример, где ты будешь в своем D городить говно, а я буду писать по простому.

                                                                                                                                          Вот так вот и подменяются понятия. И на Килю как обычно все валят.
                                                                                                                                            Цитата Wound @
                                                                                                                                            Вот так вот и подменяются понятия. И на Килю как обычно все валят.
                                                                                                                                            Правда ты упустил свое вот это более раннее:
                                                                                                                                            Цитата Wound @
                                                                                                                                            Пусть покажет как он сделал бы такое на С++.
                                                                                                                                            Так что да, ты первый противопоставил не D и шарп, а плюсы и шарп. А я заменил плюсы на D, потому что на самом деле недовольный друг на плюсах уже не пишет. Моя оплошность.

                                                                                                                                            Добавлено
                                                                                                                                            Цитата Wound @
                                                                                                                                            ты привел один сомнительный пример с командной строкой и начал раздувать на этом месте какой то непонятный спор.
                                                                                                                                            Ну вот если бы ты просто сказал, да есть такое неудобство есть решение. Писать надо вручную но вполне решаемо. На мой взглад, недостаток мелкий и незначительный. Но ты же так не можешь, нужно обязательно провокацию затеять:
                                                                                                                                            Цитата Wound @
                                                                                                                                            Так а в чем проблема вызвать, я вообще в упор не понимаю? Что он сделать хочет? Там у него написан треш какой то непонятный.
                                                                                                                                            На провокацию, я ответил провокацией. А ты как хотел? :)
                                                                                                                                            И да эту ветку спора с тобой я также закрываю.
                                                                                                                                            Сообщение отредактировано: applegame -
                                                                                                                                              Цитата applegame @
                                                                                                                                              Правда ты упустил свое вот это более раннее:

                                                                                                                                              Цитата applegame @
                                                                                                                                              Так что да, ты первый противопоставил не D и шарп, а плюсы и шарп. А я заменил плюсы на D, потому что на самом деле недовольный друг на плюсах уже не пишет. Моя оплошность.

                                                                                                                                              Вообще то, это было не противопоставление, а уточнение. Я просто не понял что он хотел сделать, и попросил реализацию на С++, чтоб понять что нужно сделать. Не более.

                                                                                                                                              Цитата applegame @
                                                                                                                                              Ну вот если бы ты просто сказал, да есть такое неудобство есть решение. Писать надо вручную но вполне решаемо. На мой взглад, недостаток мелкий и незначительный. Но ты же так не можешь, нужно обязательно провокацию затеять:

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


                                                                                                                                              Цитата applegame @
                                                                                                                                              На провокацию, я ответил провокацией. А ты как хотел?
                                                                                                                                              И да эту ветку спора с тобой я также закрываю.

                                                                                                                                              Да закрывай ради бога. Я ее что ли открывал? :D
                                                                                                                                                Цитата OpenGL @
                                                                                                                                                :lool:

                                                                                                                                                Честно говоря не осознал коммента :-?

                                                                                                                                                Ну вот что пишут, может врут:

                                                                                                                                                Rust фокусируется на "абстракциях нулевой стоимости”, т.е. таких методах упрощения программирования, которые не требуют дополнительных затрат во время выполнения. Например, Rust управляет памятью во время компиляции и использует статическую диспетчеризацию для дженериков (по аналогии с шаблонами C++, но более безопасно по отношению к типам).
                                                                                                                                                  JoeUser, нулевая стоимость - это как раз принцип из C++.

                                                                                                                                                  Добавлено
                                                                                                                                                  Цитата JoeUser @
                                                                                                                                                  по аналогии с шаблонами C++, но более безопасно по отношению к типам).

                                                                                                                                                  А вот тут врут.
                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                    JoeUser, нулевая стоимость - это как раз принцип из C++.

                                                                                                                                                    До С++11 этот принцип не совсем выполнялся, если я не ошибаюсь.

                                                                                                                                                    Добавлено
                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                    А вот тут врут.

                                                                                                                                                    Пруф?
                                                                                                                                                      Цитата JoeUser @
                                                                                                                                                      До С++11 этот принцип не совсем выполнялся, если я не ошибаюсь.

                                                                                                                                                      Что ты имеешь в виду?

                                                                                                                                                      Цитата
                                                                                                                                                      Цитата D_KEY @
                                                                                                                                                      А вот тут врут.

                                                                                                                                                      Пруф?

                                                                                                                                                      Не, это ты приведи пруф большей типобезопасности ростовских дженериков по сравнению с шаблонами C++.
                                                                                                                                                        Цитата D_KEY @
                                                                                                                                                        Что ты имеешь в виду?

                                                                                                                                                        Наличие конструкторов только копирования до С++11 требовало определенных костылей, чтобы не было оверхеда. В Расте наоборот - перенос наоборот по-умолчанию, для создания копии сущности нужно писать дополнительно код.

                                                                                                                                                        Цитата D_KEY @
                                                                                                                                                        Не, это ты приведи пруф большей типобезопасности ростовских дженериков по сравнению с шаблонами C++.

                                                                                                                                                        Погоди :) Я привел чужую цитату, ты с ней несогласен - а я тут причем? Мне наоборот хотелось бы по ней ясности и пруфов ибо утверждение не мое.
                                                                                                                                                          ADD: Оставлю тут линк для пользы дела "Модели дженериков и метапрограммирования: Go, Rust, Swift, D и другие" (оригинал тут).
                                                                                                                                                            Цитата D_KEY @
                                                                                                                                                            А вот тут врут.

                                                                                                                                                            Смотря что тут под типобезопасностью понимается. Возможно, тут имеется ввиду, что в плюсах у тебя компилятор съест всё, что подходит под шаблон, неважно, нужный это класс или у него случайно есть методы, которые использует шаблон функции. В расте же у тебя шаблонная функция примет только тот тип, который реализует нужный трейт.
                                                                                                                                                              Цитата OpenGL @
                                                                                                                                                              Возможно, тут имеется ввиду, что в плюсах у тебя компилятор съест всё, что подходит под шаблон, неважно, нужный это класс или у него случайно есть методы, которые использует шаблон функции.

                                                                                                                                                              Так это же фича. Утиность шаблонов. Типобезопасность тут при чем? Если тип не подходит под шаблон, то ничего не скомпилируется, т.е. все безопасно. :-?

                                                                                                                                                              Добавлено
                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                              Наличие конструкторов только копирования до С++11 требовало определенных костылей, чтобы не было оверхеда. В Расте наоборот - перенос наоборот по-умолчанию, для создания копии сущности нужно писать дополнительно код.

                                                                                                                                                              Каких костылей? Ты про CoW? Это не костыль, а паттерн, который используется много где и совершенно не противоречит семантики перемещения. В раст по умолчанию это для переменных так работает, поля структурок он же по значению хранит?
                                                                                                                                                              Сообщение отредактировано: D_KEY -
                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                Так это же фича.

                                                                                                                                                                Я знаю, что это фича. Может быть тот, кто говорил эту фразу про безопасность это считает багом :D

                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                Каких костылей?

                                                                                                                                                                Ну вот, допустим, ты пишешь свой класс строки и хочешь, чтобы в коде наподобие:
                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                  MySuperPuperString str = "Foo" + other_string + "bar" + another_string;

                                                                                                                                                                было как можно меньше созданий временных объектов и лишних копирований. До С++11 эта задача решалась через жопу. Непонятно правда, что это меняет и причём тут противоречие с нулевой стоимостью, но, подозреваю, JoeUser всё-таки об этом :)
                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                  В раст по умолчанию это для переменных так работает, поля структурок он же по значению хранит?

                                                                                                                                                                  Не так! Все зависит от типа, и какой из типажей он имеет - Copy или Drop.

                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                  Утиность шаблонов. Типобезопасность тут при чем?

                                                                                                                                                                  Потому, что "утиность" присутствует в термине "Утиная типизация". Подстановка не того типа - ошибка типизации.
                                                                                                                                                                  И до С++11 обуздать прожорливость SFINAE было непросто, в С++11 пришла радость в виде std::enable_if
                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                    в С++11 пришла радость в виде std::enable_if
                                                                                                                                                                    это не радость, а костыль, и он пришел до C++11 и назывался boost::enable_if
                                                                                                                                                                      Цитата applegame @
                                                                                                                                                                      boost::enable_if

                                                                                                                                                                      Насчет буста ... :wall:

                                                                                                                                                                      - Скажите, что на ваш взгляд хуже: невежество, безграмотность или безразличие?
                                                                                                                                                                      - Не знал, ни знаю, и мне пох!

                                                                                                                                                                      Радость, ирония - просто игра слов.

                                                                                                                                                                      Цитата JoeUser @
                                                                                                                                                                      Не так! Все зависит от типа, и какой из типажей он имеет - Copy или Drop.

                                                                                                                                                                      С типажом Copy
                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                        fn main() {
                                                                                                                                                                          let a:u32 = 1;
                                                                                                                                                                          let b:u32 = a;
                                                                                                                                                                          println!("{}",a);
                                                                                                                                                                        }

                                                                                                                                                                      Все норм, выведет: 1

                                                                                                                                                                      Без типажа Copy
                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                        struct Struct {
                                                                                                                                                                          f: u32    
                                                                                                                                                                        }
                                                                                                                                                                         
                                                                                                                                                                        fn main() {
                                                                                                                                                                          let  a:Struct = Struct{f:1};
                                                                                                                                                                          let _b:Struct = a;
                                                                                                                                                                          println!("{}",a.f);
                                                                                                                                                                        }

                                                                                                                                                                      Получаем ошибку: error[E0382]: use of moved value: `a.f`
                                                                                                                                                                        Цитата JoeUser @
                                                                                                                                                                        С типажом Copy
                                                                                                                                                                        Цитата JoeUser @
                                                                                                                                                                        Без типажа Copy
                                                                                                                                                                        Код выглядит очень похоже. В чём прелесть такой разной реакции?
                                                                                                                                                                          Цитата amk @
                                                                                                                                                                          В чём прелесть такой разной реакции?

                                                                                                                                                                          Тонкий вброс, однако :D
                                                                                                                                                                            Цитата amk @
                                                                                                                                                                            В чём прелесть такой разной реакции?

                                                                                                                                                                            В эффективности. Типаж Copy по умолчанию имеют а-ля POD:
                                                                                                                                                                            • целочисленные типы
                                                                                                                                                                            • логический тип
                                                                                                                                                                            • с плавающей точкой
                                                                                                                                                                            • кортежи, если они содержат исключительно первые три типа
                                                                                                                                                                            Просто их выгодно по затратам/скорости размещать на стеке.
                                                                                                                                                                            А вот все остальное - немного иначе. Управляющие элементы типа размещаются на стеке, а непосредственно сами данные - в куче. И присвоение (а не клонирование) перемещает только управляющие данные. То, что в куче - остается неизменным. По-умолчанию это пресловутая "нулевая стоимость", когда производится только необходимый минимум действий.

                                                                                                                                                                            Да и подход у Раста специфический (если тот звон, который я слышал, правильный - то звон несколько Хаскелевский) - переменная не "имеет значение", а переменная "владеет значением". Это вносит определенный порядок. Хотя, соглашусь, изначальную реализацию POD/неPOD надо помнить. А то как в Америке некогда "вход только для белых".

                                                                                                                                                                            ADD: Хоть и тема о Чистейшем Си, для плюсанутых уточню: термин "типаж" отчасти совсем немножко близок в С++ к его кухне #include <type_traits>
                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                              Управляющие элементы типа размещаются на стеке, а непосредственно сами данные - в куче.

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

                                                                                                                                                                              Добавлено
                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                              По-умолчанию это пресловутая "нулевая стоимость", когда производится только необходимый минимум действий.

                                                                                                                                                                              О, кстати, вот тебе и "нулевая стоимость". Если у тебя объект, для перемещения которого достаточно копировать только часть полей, то в С++ ты просто напишешь соответствующим образом конструктор перемещения, а вот раст честно переместит всё :lol:
                                                                                                                                                                                Цитата OpenGL @
                                                                                                                                                                                Это частный случай. В общем случае это совершенно не обязательно, достаточно чтобы сущность держала какой-либо ресурс. В твоём примере это может быть, например, хендл файла.

                                                                                                                                                                                Мастер, тебе виднее! :lol: Я пока излагаю официальную документацию.
                                                                                                                                                                                Однако, если хэндл файла описывается POD - противоречия нет совсем, ибо хендл "держит" только целое!
                                                                                                                                                                                А вот если сущность держит сложный набор описателей (допустим для обслуживания вектора), тут уж другой колинкор. Данные строго в куче!
                                                                                                                                                                                  Вообще, для того, чтобы понять, зачем было сделано именно так, достаточно понять основную идею - авторы языка хотели, чтобы любая сущность могла перемещаться простым memmove, и чтобы это работало как надо во всех случаях, нужно запрещать использовать старый объект.
                                                                                                                                                                                    Цитата OpenGL @
                                                                                                                                                                                    Если у тебя объект

                                                                                                                                                                                    Мастер, не убивай мне моск! :lol:

                                                                                                                                                                                    Здесь тема о Расте и Чистейшем Си!

                                                                                                                                                                                    Основные аксиомы костыльно-ориентированного программирования помню:
                                                                                                                                                                                    • 1. Костылирование
                                                                                                                                                                                    • 2. Инкостыляция
                                                                                                                                                                                    • 3. Поликостылизм
                                                                                                                                                                                    Где,

                                                                                                                                                                                    1) Костылирование — это создание костылей, позволяющее описать новый костыль на основе уже существующего с частично или полностью заимствующимися ошибками. Костыль, от которого производится наследование, называется базовым, родительским или суперкостылем. Новый костыль — потомком, наследником или производным.
                                                                                                                                                                                    2) Инкостыляция — это свойство костылей, позволяющее объединить фиксы и заплатки, работающие с ними в классе, и скрыть детали реализации от понимания.
                                                                                                                                                                                    3) Поликостылизм — это свойство разработчиков использовать костыли с одинаковым интерфейсом без информации о типе и внутренней структуре костыля.

                                                                                                                                                                                    Если структура, у которой часть полей при перемещении учитывать не нужно - меняй дизайн! В таргете часть полей будут неинициализированы. Меняй сущности обмена, вместо жырной структуры - гоняй срезы массивов. Это будет по фэншую! Ящетаю.
                                                                                                                                                                                      Цитата JoeUser @
                                                                                                                                                                                      Если структура, у которой часть полей при перемещении учитывать не нужно - меняй дизайн

                                                                                                                                                                                      Зачем? Ну вот есть поля, которые используются только когда объект находится в определённом состоянии и инициализируются когда объект в него входит. В конструкторе я их проинициализирую, конечно, и вовсе не факт, что из полей старого объекта.
                                                                                                                                                                                        Цитата OpenGL @
                                                                                                                                                                                        нужно запрещать использовать старый объект

                                                                                                                                                                                        Не не не ... в доках чуть иначе. Переменная владеет значением. Или передавай владение или делай референс. Из референсов только один может быть мутебельным. Если передаешь - старая переменная (не объект, не значение) становится невалидной. А значением (объектом) владеет уже другая переменная.

                                                                                                                                                                                        Добавлено
                                                                                                                                                                                        Цитата OpenGL @
                                                                                                                                                                                        Зачем? Ну вот есть поля, которые используются только когда объект находится в определённом состоянии и инициализируются когда объект в него входит. В конструкторе я их проинициализирую, конечно, и вовсе не факт, что из полей старого объекта.

                                                                                                                                                                                        Твое решение в Расте?
                                                                                                                                                                                          Это мне не противоречит.

                                                                                                                                                                                          Добавлено
                                                                                                                                                                                          Цитата JoeUser @
                                                                                                                                                                                          Твое решение в Расте?

                                                                                                                                                                                          Забью :D Это несущественная мелочь же.
                                                                                                                                                                                            Цитата OpenGL @
                                                                                                                                                                                            Это мне не противоречит.

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

                                                                                                                                                                                            Кстати, запостив статью выше, я обнаружил альтернативу директиве "impl" - типа "dyn". Есть чо по-мелочи рассказать? А если найду? :lol:

                                                                                                                                                                                            Добавлено
                                                                                                                                                                                            Цитата OpenGL @
                                                                                                                                                                                            Забью :D Это несущественная мелочь же.

                                                                                                                                                                                            Так не пойдет! :'(
                                                                                                                                                                                            Давай пример, дай посмотреть - подумать.
                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              Цитата D_KEY @
                                                                                                                                                                                              В раст по умолчанию это для переменных так работает, поля структурок он же по значению хранит?

                                                                                                                                                                                              Не так! Все зависит от типа, и какой из типажей он имеет - Copy или Drop.

                                                                                                                                                                                              От типа чего? Поля или объекта? Покажи пример.

                                                                                                                                                                                              Цитата
                                                                                                                                                                                              И до С++11 обуздать прожорливость SFINAE было непросто, в С++11 пришла радость в виде std::enable_if

                                                                                                                                                                                              enable_if уже очень давно был в boost. Если не хотелось буста, самому тоже можно было накидать.
                                                                                                                                                                                              Сообщение отредактировано: D_KEY -
                                                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                                                От типа чего? Поля или объекта? Покажи пример.

                                                                                                                                                                                                Ну я же уже выше специально приводил два куска кода :-?
                                                                                                                                                                                                И про типы все расписал :-?
                                                                                                                                                                                                Немножко ознакомься с базовыми понятиями Раста и станет все понятно.
                                                                                                                                                                                                Если оооочень коротко - типажи (trasits) отвечают за ПОВЕДЕНИЕ типа, для которого они определены. Для "базовых" и коротких типов, выше я перечислял, поведение Copy определено по-умолчанию. Ну вот ведут они себя так! А для структур определено другое поведение Drop, там нужно вызывать деструктор после передачи. И передаваемая переменная, после передачи своего значения (содержимого) становится невалидной. Ай!!! :wall: Читай выше, я там все написал, дублировать не буду.
                                                                                                                                                                                                Скрытый текст
                                                                                                                                                                                                M
                                                                                                                                                                                                OpenGL, мастер!  :lol:
                                                                                                                                                                                                Приглядывай тут за мной, а то я тут такую могу пургу нанести со своим недообученным багажом по Расту!
                                                                                                                                                                                                Но я стараюсь дискуссировать пока в рамках прочитанного и на левую ногу осознанного.
                                                                                                                                                                                                  Цитата JoeUser @
                                                                                                                                                                                                  Я уже привык, читая доки, разделять понятия.

                                                                                                                                                                                                  Да не в разделении тут дело. Я говорю, как оно на низком уровне работает и как уживается с высоким. Т.е. это просто дополнение.

                                                                                                                                                                                                  Цитата JoeUser @
                                                                                                                                                                                                  Кстати, запостив статью выше, я обнаружил альтернативу директиве "impl" - типа "dyn".

                                                                                                                                                                                                  В смысле? fn foo() -> impl Trait vs fn foo() -> &dyn Trait? Так это разные штуки. dyn был введён потому, что, читая код и видя Box<Foo>, ты не знаешь, чем это Foo является - трейтом или структурой. dyn же явно говорит, что ожидается динамическая диспетчеризация, т.е. это трейт.

                                                                                                                                                                                                  Цитата JoeUser @
                                                                                                                                                                                                  Давай пример, дай посмотреть - подумать.

                                                                                                                                                                                                  Зачем? Я вроде бы всё максимально чётко расписал, т.е. пример будет такой же, но кодом. А придумывать более-менее реальный пример мне лениво :)
                                                                                                                                                                                                    Цитата OpenGL @
                                                                                                                                                                                                    А придумывать более-менее реальный пример мне лениво

                                                                                                                                                                                                    Ни разу тебя ни о чем не просил!!! А вот ту - прошу! :P
                                                                                                                                                                                                    Не подумай ничего такого, мне учится надо срочно, и врага знать фэйс-ту-фэйс!
                                                                                                                                                                                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                                                                                    0 пользователей:


                                                                                                                                                                                                    Рейтинг@Mail.ru
                                                                                                                                                                                                    [ Script execution time: 0,2294 ]   [ 16 queries used ]   [ Generated: 19.04.24, 16:47 GMT ]