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

    Это проблемы языков с деструктивным присваиваем. А их "высота" здесь совершенно ни при чём.
      Цитата D_KEY @
      Где?

      В АгдЕ =)

      ExpandedWrap disabled
        data Vec (A : Set) : Nat -> Set where
          []   : Vec A zero
          _::_ : {n : Nat} -> Vec A n -> A -> Vec A (succ n)


      Добавлено
      Цитата MyNameIsIgor @
      Это проблемы языков с деструктивным присваиваем. А их "высота" здесь совершенно ни при чём.

      Деструктивное присваивание можно и под капот спрятать.
        Цитата korvin @
        Деструктивное присваивание можно и под капот спрятать.

        Под какой капот? :wacko:
        Я говорю не о том, во что компиль оптимизирует функциональщину, а о явной, используемой программистом семантике.
          Цитата D_KEY @
          Но ты можешь втуда нагадить, а я - нет :)

          Специально -- могу, случайно -- нет.
            Цитата korvin @
            Специально -- могу, случайно -- нет.

            Ты мне сейчас напоминаешь Килю, который всегда-всегда проверяет входные данные, никогда не ошибается и потому его вполне радуют похапэшные функции, не бросающие исключения, а возвращающие какую-то хрень.
              Цитата MyNameIsIgor @
              Под какой капот? :wacko:
              Я говорю не о том, во что компиль оптимизирует функциональщину, а о явной, используемой программистом семантике.

              Ну вот я и говорю про низкоуровневые язычки, с низкоуровневой императивной семантикой. =)

              Добавлено
              Цитата MyNameIsIgor @
              Ты мне сейчас напоминаешь Килю, который всегда-всегда проверяет входные данные, никогда не ошибается и потому его вполне радуют похапэшные функции, не бросающие исключения, а возвращающие какую-то хрень.

              При чем тут проверка входных данных? Если у объекта мне нужно получить размер списка, я и вызову метод size(), а как там его внутри автор реализовал -- меня мало заботит. Если заботит, я беру другой класс реализации списка.
                Цитата korvin @
                Если у объекта мне нужно получить размер списка, я и вызову метод size(), а как там его внутри автор реализовал -- меня мало заботит.

                Тебе в стихах и песнях рассказали, что const - это не про реализацию, а про контракт. Меня тоже не заботит как он реализован. Мне важно, что вызов size() не изменяет состояние объекта.

                Добавлено
                Цитата korvin @
                Ну вот я и говорю про низкоуровневые язычки, с низкоуровневой императивной семантикой. =)

                Ох, какое трололо :lool:
                Сообщение отредактировано: MyNameIsIgor -
                  Цитата korvin @
                  Пример изменения int можно?

                  ExpandedWrap disabled
                    class Main
                    {
                      static int x;
                      public static void main (String[] args) throws java.lang.Exception
                      {
                          System.out.println(x);
                          x += 100;
                          System.out.println(x);
                      }
                    }

                  Это приводит именно к изменению значения x, как следует из документации и литературы по яве. Я ошибаюсь?

                  Цитата
                  А может мне просто убрать два ключевых слова -- const и mutable и не захламлять код?

                  Лучше вообще не программировать :D

                  Добавлено
                  Цитата korvin @
                  Цитата D_KEY @
                  Где?

                  В АгдЕ =)

                  ExpandedWrap disabled
                    data Vec (A : Set) : Nat -> Set where
                      []   : Vec A zero
                      _::_ : {n : Nat} -> Vec A n -> A -> Vec A (succ n)

                  Вот я и говорю, что непрактично.

                  Добавлено
                  Цитата korvin @
                  Цитата D_KEY @
                  Но ты можешь втуда нагадить, а я - нет :)

                  Специально -- могу, случайно -- нет.

                  Почему? Откуда ты знаешь нагадишь ты или нет, если сигнатура метода об этом ничего не говорит, а о внутренней структуре ты ничего не знаешь?
                    Цитата D_KEY @
                    Цитата korvin @
                    Пример изменения int можно?

                    ExpandedWrap disabled
                      class Main
                      {
                        static int x;
                        public static void main (String[] args) throws java.lang.Exception
                        {
                            System.out.println(x);
                            x += 100;
                            System.out.println(x);
                        }
                      }

                    Это приводит именно к изменению значения x, как следует из документации и литературы по яве. Я ошибаюсь?

                    неет, это изменение биндинга переменной x. Я же уже объяснял. Попробуй написать аналог
                    ExpandedWrap disabled
                      #include <iostream>
                       
                      void change(int &x) {
                          x += 100;
                      }
                       
                      int main() {
                          int x = 0;
                          std::cout << x << std::endl;
                          change(x);
                          std::cout << x << std::endl;
                      }


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

                    Добавлено
                    Цитата D_KEY @
                    Вот я и говорю, что непрактично.

                    Что ж здесь непрактичного? o_O' Кратко, ясно и все контракты соблюдены.

                    Добавлено
                    Цитата D_KEY @
                    Почему? Откуда ты знаешь нагадишь ты или нет, если сигнатура метода об этом ничего не говорит, а о внутренней структуре ты ничего не знаешь?

                    А нафейхоа, простите, мне знать, как там устроен метод size() и что он там внутри изменяет? Если это необходимо для его работы -- ради бога. Мне нужно знать только интерфейс и назначение метода (если из сигнатуры это не ясно), а как он это делает -- его заботы. Единственное, что мне интересно во внутреннем устройстве класса, так это, например, какой он вид списка реализует -- динамические массивы там или связный список. Но это обычно понятно из имени класса или его описании в документации/комментариях.

                    Добавлено
                    Нет, вот скажи мне, есть у тебя какой-то (чужой) класс List, у него size() без спецификатора const, ты просто не станешь использовать этот класс и найдешь/напишешь другой взамен? =)
                      Цитата korvin @
                      А нафейхоа, простите, мне знать, как там устроен метод size() и что он там внутри изменяет?
                      Так если у тебя написано const - это и значит, что не изменяет. А если не написано - надо читать документацию или лезть в реализацию.

                      Получается какое-то общение вида:
                      "- const позволяет не знать о реализации.
                      - Бесполезная вещь. Зачем мне знать о реализации?"
                      Сообщение отредактировано: trainer -
                        Цитата korvin @
                        неет, это изменение биндинга переменной x.

                        В Ява - нет. Или пруф давай. Вот в питоне, например, да, так и есть.

                        Цитата
                        Попробуй написать аналог

                        В яве явных ссылочных типов нет.

                        Цитата
                        Суть лишь в том, что ты не можешь переписать данные в размещении.

                        Могу и именно это я и сделал в своем примере.

                        Цитата
                        Что ж здесь непрактичного? o_O' Кратко, ясно и все контракты соблюдены.

                        Да, но они тут написаны, а кто их будет описывать, да еще в таком виде? А программировать когда?
                        И таким "вектором" совершенно неудобно пользоваться - он ничего не умеет. Ты вот такой вектор покажиhttp://www.cplusplus.com/reference/vector/vector/.

                        Добавлено
                        Цитата korvin @
                        А нафейхоа, простите, мне знать, как там устроен метод size() и что он там внутри изменяет?

                        Иначе ты не сможешь сказать, нагадишь в него или нет. Вот при наличии const - можешь.

                        Цитата
                        Если это необходимо для его работы -- ради бога. Мне нужно знать только интерфейс и назначение метода (если из сигнатуры это не ясно), а как он это делает -- его заботы.

                        Он все это может делать и при наличии const. Но ты видишь, что создатель класса указал тебе, что этот метод не изменит видимого состояния объекта и ты можешь спокойно его вызывать.

                        Цитата
                        Нет, вот скажи мне, есть у тебя какой-то (чужой) класс List, у него size() без спецификатора const, ты просто не станешь использовать этот класс и найдешь/напишешь другой взамен? =)

                        Если в С++, то не стану его использовать. Если в других языках, то придется верить - выбора нет.
                        Сообщение отредактировано: D_KEY -
                          Цитата korvin @
                          Нет, вот скажи мне, есть у тебя какой-то (чужой) класс List, у него size() без спецификатора const, ты просто не станешь использовать этот класс и найдешь/напишешь другой взамен?

                          Эммм... Да!

                          Добавлено
                          Цитата korvin @
                          А нафейхоа, простите, мне знать, как там устроен метод size() и что он там внутри изменяет?

                          А const тебе и не говорит о том, что size() ничего не изменяет. Он говорит о том, что после вызова size() логическое состояние объекта не изменится.
                            Цитата trainer @
                            Получается какое-то общение вида:
                            "- const позволяет не знать о реализации.
                            - Бесполезная вещь. Зачем мне знать о реализации?"

                            :good:
                              Цитата korvin @
                              вот скажи мне, есть у тебя какой-то (чужой) класс List, у него size() без спецификатора const, ты просто не станешь использовать этот класс и найдешь/напишешь другой взамен?
                              Если он такой - то лучше его не использовать. Мало ли что у него там еще оригинально сделано.
                                Кстати, возвращаясь к теме, почему вы говорите, что в делфи по вызову функции не видно, что передается, ведь там все также как и в плюсах:
                                C++
                                Delphi
                                =)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 444 445 [446] 447 448 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5709 ]   [ 14 queries used ]   [ Generated: 29.07.26, 09:15 GMT ]