На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (16) « Первая ... 8 9 [10] 11 12 ...  15 16 все  ( Перейти к последнему сообщению )  
> Rust vs C++ , очередная шляпа
    Цитата Астарот @
    Если тебе шашечки, то да, а если ехать, то тебе не пофиг, кто повезет?
    Мне как раз ехать, а ты мне предлагаешь привязываться к какой-то определенной IDE.
    Цитата korvin @
    Так какого чёрта компилятор должен ругаться на метод foo в Foo? Из-за того, что у него аннотация override? А зачем вы её добавили? Чтобы что? Там и так указано, что Foo <: Bar — это не достаточно информативно? Нужно ещё на все методы override пихать? Чтобы потом убирать? Выглядит как создание пробемы самим себе и героическое её преодоление.
    Ты чего-то не догоняешь. Впрочем тебе уже все разжевали остальные, так что не буду повторяться.
      Цитата applegame @
      Мне как раз ехать, а ты мне предлагаешь привязываться к какой-то определенной IDE.

      Можно подумать в нормальной ситуации ты пользуешься несколькими :-?
        Цитата korvin @
        What?
        Ну вот есть у тебя список аргументов в виде массива строк, и надо вызвать стороннюю программу с этими аргументами. В аргументах ест пробелы и слеши/бэкслеши, функции для эскейпа нет, приходится городить свой кошмар.
        Цитата Wound @
        Нужно было явно имплементить интерфейс. А не просто делать классы с паблик методами.
        Да, видимо это он просто с непривычки ругается.

        Добавлено
        Цитата Астарот @
        Можно подумать в нормальной ситуации ты пользуешься несколькими
        Ты намеренно искажаешь смысл? Пользоваться какой-нибудь одной IDE и пользоваться конкретной одной IDE это, по-твоему, одно и то же?
          Цитата applegame @
          Ну вот есть у тебя список аргументов в виде массива строк, и надо вызвать стороннюю программу с этими аргументами. В аргументах ест пробелы и слеши/бэкслеши, функции для эскейпа нет, приходится городить свой кошмар.

          Так а в чем проблема вызвать, я вообще в упор не понимаю? Что он сделать хочет? Там у него написан треш какой то непонятный.
          Например, из того что я понял, вот всякие разные варианты, и далеко не последние:
          https://rextester.com/FQLFU35600

          ExpandedWrap disabled
                    public static void Main(string[] args)
                    {
                        string[] cmd = new string[] { @"C:\Documents and Settings\MyPath\", "--kill-all-humans", "except fry" };
             
                        var commandLine1 = String.Format("\"{0}\"", String.Join("\"", cmd));
                        var commandLine2 = commandLine1.Replace(@"\", @"\\");
                        var commandLine3 = commandLine2.Replace("\"", "\\\"");
                        var commandLine4 = String.Format("\"{0}\"", String.Join("\"", cmd)).Replace(@"\", @"\\").Replace("\"", "\\\"");
             
                        var commandLine5 = String.Join("", cmd.Select(a => String.Format(" \"{0}\" ", a))).Replace(@"\", @"\\").Trim();
                        var commandLine6 = String.Join("", cmd.Select(a => String.Format(" \"{0}\" ", a))).Replace(@"\", @"\\").Replace("\"", "\\\"").Trim();
             
                        Console.WriteLine(commandLine1);
                        Console.WriteLine(commandLine2);
                        Console.WriteLine(commandLine3);
                        Console.WriteLine(commandLine4);
                        Console.WriteLine(commandLine5);
                        Console.WriteLine(commandLine6);
                    }

          Вывод:
          ExpandedWrap disabled
            "C:\Documents and Settings\MyPath\"--kill-all-humans"except fry"
            "C:\\Documents and Settings\\MyPath\\"--kill-all-humans"except fry"
            \"C:\\Documents and Settings\\MyPath\\\"--kill-all-humans\"except fry\"
            \"C:\\Documents and Settings\\MyPath\\\"--kill-all-humans\"except fry\"
            "C:\\Documents and Settings\\MyPath\\"  "--kill-all-humans"  "except fry"
            \"C:\\Documents and Settings\\MyPath\\\"  \"--kill-all-humans\"  \"except fry\"

          Пусть покажет как он сделал бы такое на С++.

          Есть еще StringBuilder и регекспы, написать свою функцию экранирования - обычно не составляет труда, от слова совсем.
          Плюс ко всему есть встроенные возможности:
          https://docs.microsoft.com/en-us/dotnet/api...etframework-4.8
          https://docs.microsoft.com/ru-ru/dotnet/csh...tokens/verbatim
          Сообщение отредактировано: Wound -
            Цитата OpenGL @

            В Java — достаточно
              Цитата Wound @
              Например, из того что я понял, вот всякие разные варианты, и далеко не последние:
              https://rextester.com/FQLFU35600
              Ну хз, Киля. Может вы там в своем шарпе привыкли к говну вроде
              ExpandedWrap disabled
                String.Join("", cmd.Select(a => String.Format(" \"{0}\" ", a))).Replace(@"\", @"\\").Replace("\"", "\\\"").Trim();

              А мы в своем D как-то привыкли к простому:
              ExpandedWrap disabled
                import std.process;
                ...
                auto cmd = ["program.exe", `C:\Documents and Settings\MyPath\`, "--kill-all-humans", "except fry"];
                ...
                auto pid = spawnProcess(cmd);

              Цитата Wound @
              Пусть покажет как он сделал бы такое на С++.
              Он скорее дешник, чем плюсист. На плюсах еще хуже, ибо плюсы - таки какашка. Впрочем, возможно есть адекватная либка для этого.
              Сообщение отредактировано: applegame -
                Цитата applegame @
                А мы в своем D как-то привыкли к простому:

                твой код выдает:
                ExpandedWrap disabled
                  td.process.ProcessException@std/process.d(380): Executable file not found: C:\Documents and Settings\MyPath\
                  ----------------
                  ??:? @trusted std.process.Pid std.process.spawnProcessImpl(scope const(char[])[], std.stdio.File, std.stdio.File, std.stdio.File, scope const(immutable(char)[][immutable(char)[]]), std.process.Config, const(char)[]) [0x55f41a88ab08]
                  ??:? @trusted std.process.Pid std.process.spawnProcess(scope const(char[])[], std.stdio.File, std.stdio.File, std.stdio.File, const(immutable(char)[][immutable(char)[]]), std.process.Configconst , char[]) [0x55f41a88a7d2]
                  onlineapp.d:7 _Dmain [0x55f41a875067]


                Добавлено
                Если нужно просто запустить программу, то кто ему мешает это сделать?
                ExpandedWrap disabled
                  Process.Start("program.exe", String.Concat(Environment.GetCommandLineArgs()));
                Сообщение отредактировано: Wound -
                  Цитата korvin @
                  Цитата OpenGL @

                  В Java — достаточно

                  Ты мои сообщения видел?
                    Цитата korvin @
                    Это вне программы делается.
                    В Сях/Плюсах можно и из кода.

                    Добавлено
                    Цитата Wound @
                    Пусть покажет как он сделал бы такое на С++.
                    Не осилил сути проблемы.
                      Цитата Wound @
                      твой код выдает:
                      Ну а что он должен тебе выдать? :)
                      Цитата Wound @
                      Если нужно просто запустить программу, то кто ему мешает это сделать?
                      ExpandedWrap disabled
                        Process.Start("program.exe", String.Concat(Environment.GetCommandLineArgs()));

                      Надо запустить программу со своими аргументами. А ты зачем-то предлагаешь брать в качестве аргументов Environment.GetCommandLineArgs().
                      Цитата Qraizer @
                      Не осилил сути проблемы.
                      Суть:
                      Цитата applegame @
                      Ну вот есть у тебя список аргументов в виде массива строк, и надо вызвать стороннюю программу с этими аргументами. В аргументах есть пробелы и слеши/бэкслеши,

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

                        Я если честно тоже. :-?
                          Забейте, короче. Это все же тема Rust vs C++.
                            Цитата applegame @
                            Ну а что он должен тебе выдать?

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

                            Цитата applegame @
                            Надо запустить программу со своими аргументами. А ты зачем-то предлагаешь брать в качестве аргументов Environment.GetCommandLineArgs().

                            Хорошо, что мешает тебе написать:
                            ExpandedWrap disabled
                                          var cmd = "\"C:\\Documents and Settings\\MyPath\\\" --kill-all-humans \"except fry\"";
                                          Process.Start("test.exe", cmd);

                            ?

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

                            А чем оно не тривиальное? ты можешь сделать это разными способами. Но человек выбрал самый убогий из всех, которые только можно придумать. И решил сделать так.
                              Цитата Wound @
                              Хорошо, что мешает тебе написать:
                              Например, то что аргументы пришли откуда-то извне, то есть заранее не известны.
                              Цитата Wound @
                              А чем оно не тривиальное? ты можешь сделать это разными способами. Но человек выбрал самый убогий из всех, которые только можно придумать. И решил сделать так.
                              Ну если ты хочешь некое универсальное экранирование, то не тривиально. Я же уже приводил ссылку на Stack Overflow с целыми простынями рассуждений и попыток найти универсальное решение этой задачи.

                              Добавлено
                              На плюсах тоже не просто. Microsoft тоже статью на эту тему запилили: Everyone quotes command line arguments the wrong way
                              Сообщение отредактировано: applegame -
                                Цитата applegame @
                                Например, то что аргументы пришли откуда-то извне, то есть заранее не известны.

                                Да и флаг им в руки откуда они пришли. Хоть с марса, пиши:
                                ExpandedWrap disabled
                                  var cmd = $"-key \"{param1}\" --kill-all-humans \"{param2}\"";

                                String.Join - объединяет массив в строку с разделителем.
                                String.Format - формирует строку - как тебе захочется

                                Далее есть ArgumentList - который представляет из себя массив строк. Можешь прям в него запихать аргументы командной строки.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (16) « Первая ... 8 9 [10] 11 12 ...  15 16 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0623 ]   [ 15 queries used ]   [ Generated: 18.07.25, 14:06 GMT ]