На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 219 220 [221] 222 223 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата D_KEY @
    Строго определен порядок вычисления аргументов функции?
    нет операторов/выражений модификации переменных внутри выражения. Inc/Dec - процедуры. Если только через вызов функций с передачей по ссылке.
    Сообщение отредактировано: trainer -
      Цитата Romkin @
      Цитата D_KEY @
      Для тебя может быть странно из-за того, что у вас в Delphi может быть и так и сяк, в зависимости от типа. В питоне все единообразно.

      ну да, ну да...
      ExpandedWrap disabled
        a=2
        b=a
        b=3
        print(a)

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

      Цитата
      Странно когда это не определено.
      Подумай над количеством архитектур, под которые пишут на С/С++. А уж явный порядок вычисления ставит крест на оптимизации, особенно если речь идет о встроенных типах.

      Цитата
      Цитата D_KEY @
      Не понял

      Хм... объявление "class function... virtual; abstract;" понятно?

      Конечно. Абстрактный метод класса(не объекта). Я саму задачу и ее решение не очень понял.

      Добавлено
      Цитата Romkin @
      ExpandedWrap disabled
        a=2
        b=a
        b=3
        print(a)

      Сначала переменная a ссылается на 2, потом b ссылается на тоже значение, что и a, затем b ссылается на значение 3, а по прежнему ссылается на 2.
      Сообщение отредактировано: D_KEY -
        Цитата D_KEY @
        А уж явный порядок вычисления ставит крест на оптимизации, особенно если речь идет о встроенных типах.
        Delphi и оптимизация - понятия не совместимые :D
          Цитата trainer @
          Цитата D_KEY @
          Строго определен порядок вычисления аргументов функции?
          нет операторов/выражений модификации переменных внутри выражения. Inc/Dec - процедуры. Если только через вызов функций с передачей по ссылке.

          Так в С++ даже если вызвать через функции, все-равно будет UB, т.к. неизвестно, что будет вычисляться раньше i или inc(i).
            Цитата D_KEY @
            Так в С++ даже если вызвать через функции, все-равно будет UB
            А я про это ни слова не сказал. В Delphi точного аналога С++-ного выражения f (i, i++); написАть вроде не получится.
            Сообщение отредактировано: trainer -
              Romkin, если ты хочешь заменить в примере на питоне = на +=, то имей в виду, что a += b - истинный синтаксический сахар над a = a + b. Т.е. семантически создается новый объект со значением a+b и ссылка a начинает ссылаться на него.
                Цитата D_KEY @
                А уж явный порядок вычисления ставит крест на оптимизации, особенно если речь идет о встроенных типах.

                То есть, если явно определен порядок вычисления аргументов, то оптимизации быть не может? Ерунда. Оптимизация этим не исчерпывается.

                Цитата D_KEY @
                Конечно. Абстрактный метод класса(не объекта). Я саму задачу и ее решение не очень понял.


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

                Добавлено
                Цитата trainer @
                В Delphi точного аналога С++-ного выражения f (i, i++); написАть вроде не получится.

                Было бы желание...
                ExpandedWrap disabled
                  function Inc(var i: integer): integer;
                  begin
                    i := i + 1;
                    Result := i;
                  end;


                Добавлено
                Цитата D_KEY @
                Сначала переменная a ссылается на 2, потом b ссылается на тоже значение, что и a, затем b ссылается на значение 3, а по прежнему ссылается на 2.

                Логично. Но все равно несколько странно: точка есть - есть эффект, нет - нету... Это с позиций неофита если.
                  Цитата Romkin @
                  Было бы желание...
                  Это не точный аналог f(i,i++). Это аналог
                  ExpandedWrap disabled
                    int Inc(int& arg) {
                       return arg++;
                    }


                  И, кстати:
                  Цитата trainer @
                  Если только через вызов функций с передачей по ссылке.
                  Сообщение отредактировано: trainer -
                    Цитата Romkin @
                    Цитата D_KEY @
                    А уж явный порядок вычисления ставит крест на оптимизации, особенно если речь идет о встроенных типах.

                    То есть, если явно определен порядок вычисления аргументов, то оптимизации быть не может? Ерунда. Оптимизация этим не исчерпывается.

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

                    Цитата
                    Цитата D_KEY @
                    Конечно. Абстрактный метод класса(не объекта). Я саму задачу и ее решение не очень понял.


                    Есть два модуля, с одинаковыми методами, но с разной реализацией. Создан класс, который определяет универсальные сигнатуры, потомки его подключают определенный модуль и реализуют конкретный вызов API.

                    Почему бы не создать интерфейс и две его реализации?

                    Цитата
                    Цитата D_KEY @
                    Сначала переменная a ссылается на 2, потом b ссылается на тоже значение, что и a, затем b ссылается на значение 3, а по прежнему ссылается на 2.

                    Логично. Но все равно несколько странно: точка есть - есть эффект, нет - нету... Это с позиций неофита если.

                    Странно как раз будет, если человек знаком с другими языками, где нет единообразия, или же с С/С++, где все единообразно, но действует семантика значений.
                    Начинающему же все понятно. Тем более, что такое поведение больше согласуется с понятием переменной в математике, где сами значения никогда не меняются.
                      Цитата trainer @
                      Это не точный аналог f(i,i++). Это аналог

                      Я привел примерный аналог i++ вроде бы.
                      То есть f(i, Inc(i)) даст побочный эффект. Но поскольку порядок определен, будет так: сначала первый параметр, потом inc как второй. При начальном i=0 у f первый параметр 0, второй 1 и i=1. Плюс канделябр :whistle: .
                        Лучше вообще избегать таких побочных эффектов в высокоуровневом коде. А на низком уровне системы в любом случае нужно быть внимательным.
                          Цитата D_KEY @
                          Почему бы не создать интерфейс и две его реализации?

                          И они будут оторваны от объекта, который явно зависит от конкретной реализации. А зачем?
                            Цитата Romkin @
                            Цитата D_KEY @
                            Почему бы не создать интерфейс и две его реализации?

                            И они будут оторваны от объекта, который явно зависит от конкретной реализации.

                            Почему явно? Зачем клиенту-то знать об этой зависимости?

                            Цитата
                            А зачем?
                            Почему нет :D ?
                              Цитата D_KEY @
                              Почему явно? Зачем клиенту-то знать об этой зависимости?

                              Какому клиенту? Я говорю о реализации объекта доступа. Клиент ничего не знает, он объект использует, а не методы класса.

                              Добавлено
                              Точнее сказать, класс здесь и выступает в роли такого интерфейса доступа. С каким резоном я должен отрывать реализацию? Как раз лучше, когда все рядом.
                                Romkin, а вот по-моему нелогично вычислять параметры слева направо, когда они передаются в cdecl функцию. Ладно, если в pascal. Так что как тут будет оптимимальней, ещё вопрос.
                                Сообщение отредактировано: Qraizer -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 219 220 [221] 222 223 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.3506 ]   [ 15 queries used ]   [ Generated: 1.08.26, 16:43 GMT ]