На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 190 191 [192] 193 194 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    вот amk'у еще на затравку:
    ExpandedWrap disabled
      CL-USER 3 > (defun bar (x)
                    (declare (optimize (speed 3) (safety 0) (debug 0))
                             (type fixnum x))
                    (the fixnum (+ x 1)))
      BAR
       
      CL-USER 4 > (compile 'bar)
      BAR
      NIL
      NIL
       
      CL-USER 5 > (disassemble 'bar)
      200CCC52:
             0:      55               push  ebp
             1:      89E5             move  ebp, esp
             3:      83C004           add   eax, 4
             6:      FD               std  
             7:      C9               leave
             8:      C3               ret  
             9:      90               nop  
      NIL
       
      CL-USER 6 >


    Добавлено
    Цитата amk @
    Это не трансляция в С. Это пример интерпретации в компилируемом языке. Кстати достаточно обычная вещь - так реализованы значительное число компиляторов.

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

    это трансляция в Си

    т.е. паскаль тоже не компилируемый?

    Добавлено
    Цитата D_KEY @
    И снова соглашусь. Вот только если тип неявно-ссылочный, то работа переменных, зависит от типа.

    у переменных нет работы, нет.
      Цитата korvin @
      получается нативный код CL
      Ага, вижу. Точь в точь второй вариант. Чуть усложненный, из-за специфики исходного языка.

      Особенно впечатляет
      Цитата
      static const char top_level_bytecode_0 [1678 ] = {
      35 , 126 , 5 , 53 , 46 , 48 , 46 , 49 , 41 , 0 , 0 , 0 , 1 , 0 , 0 , 5 , 0 , 8 , 0 , 15
      в последней ссылке.
      Цитата korvin @
      это ты хрень какую-то показываешь, а не трансляцию в Си


      Именно такой вариант трансляции я тебе и привел.

      Ты бы сам хоть посмотрел бы ссылку, перед тем как ее постить.
        Цитата D_KEY @
        В случае наличия неявно-ссылочных типов в языке переменная b будет или "ссылаться" на тоже значение типа type(если он нессылочный) или же(на уровне логики) обе переменные будут ссылаться куда-то в одно место, которое уже будет ссылаться на значение типа type(если тип ссылочный). То есть само понятие переменной и механизм работы с ними зависит от типа. С моей же точки зрения, лучше, когда переменные в языке ведут себя независимо от типа. Ты вроде тоже говоришь, что переменная о типе знать не должна... Так ты согласен со мной или нет?

        переменная не "будет ссылаться", она просто символ времени компиляции, при компиляции все переменные удаляются. перед тайпчеком.
          Цитата korvin @
          Цитата D_KEY @
          И снова соглашусь. Вот только если тип неявно-ссылочный, то работа переменных, зависит от типа.

          у переменных нет работы, нет.

          :lool:
          А что у них есть и зачем они нужны?

          Добавлено
          Цитата korvin @
          Цитата D_KEY @
          В случае наличия неявно-ссылочных типов в языке переменная b будет или "ссылаться" на тоже значение типа type(если он нессылочный) или же(на уровне логики) обе переменные будут ссылаться куда-то в одно место, которое уже будет ссылаться на значение типа type(если тип ссылочный). То есть само понятие переменной и механизм работы с ними зависит от типа. С моей же точки зрения, лучше, когда переменные в языке ведут себя независимо от типа. Ты вроде тоже говоришь, что переменная о типе знать не должна... Так ты согласен со мной или нет?

          переменная не "будет ссылаться", она просто символ времени компиляции, при компиляции все переменные удаляются. перед тайпчеком.

          Да причем тут вообще вопросы трансляции и реализации :wall: ?
          Речь о концепции. В языке есть понятие переменной и плевать на то, останется ли она при трансляции(еще ведь вопрос куда ;)).

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

              у них есть символное имя, и для связывания имен с конкретными значениями они и нужны, не более

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

              это нативный код или что?

              Добавлено
              Цитата D_KEY @
              Да причем тут вообще вопросы трансляции и реализации :wall: ?
              Речь о концепции. В языке есть понятие переменной и плевать на то, останется ли она при трансляции(еще ведь вопрос куда ;)).

              Добавлено
              Специально ведь даже написал, зная твою неоправданную тягу лезть в дебри реализации, что "на уровне логики" :)

              так именно что на уровне логики переменная -- просто символ, не более, зачем ей приписывать какие-то сверхспособности -- непонятно, от нее нужно только две вещи: имя типа (если переменная несвязана) и пространство имен (и то это я на вскидку, не думая)
                Цитата korvin @
                Цитата D_KEY @
                А что у них есть и зачем они нужны?

                у них есть символное имя, и для связывания имен с конкретными значениями они и нужны, не более

                Вот и вопрос, почему в случае обычного типа они связываются с одним значением и одним способом, а в случае ссылочного другим способом и с другим значением?

                Добавлено
                Цитата korvin @
                так именно что на уровне логики переменная -- просто символ, не более, зачем ей приписывать какие-то сверхспособности -- непонятно, от нее нужно только две вещи: имя типа (если переменная несвязана) и пространство имен (и то это я на вскидку, не думая)

                Ну допустим. Как это отвечает на мой вопрос о том, почему отличается поведение?
                  Цитата D_KEY @
                  Вот и вопрос, почему в случае обычного типа они связываются с одним значением и одним способом, а в случае ссылочного другим способом и с другим значением?

                  эээ, нет, они связываются одинаковым способом
                    В примере трансляции на С по ссылке, приведенной тобой, таблицы для интерпретатора и кое какие данные для него же. Интерпретатор находится в библиотеке.

                    Цитата korvin @
                    это нативный код или что?

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

                      эээ, нет, они связываются одинаковым способом

                      Опять о реализации думаешь ;) ?
                      ExpandedWrap disabled
                        type y = new type(...)
                        type x = y

                      Если мы меняем объект через y, должен ли меняться объект, доступный через x?
                      На мой взгляд, это должно зависить лишь от правил, принятых в языке для переменных.
                      На твой, как я понимаю, это должно зависить от типа?
                      Так?
                      Сообщение отредактировано: D_KEY -
                        Цитата D_KEY @
                        Если мы меняем объект через y, должен ли меняться объект, доступный через x?
                        На мой взгляд, это должно зависить лишь от правил, принятых в языке для переменных.
                        На твой, как я понимаю, это должно зависить от типа?
                        Так?

                        зависит от типа и только. что если я присвою y
                        1) иммутабельнцю структуру? (хотя это "ссылочная переменная", ибо передается по ссылке)?
                        2) иммутабельную структуру, у которой одно из полей -- мутабельная структура?
                        3) мутабельную структуру, у которой одно из полей -- иммутабельная структура?

                        как тебе твоя "семантика переменных" поможет?
                          Цитата amk @
                          Похоже для тебя будет откровением, но в Delphi не добавляли реализацию классов, поскольку классы в TP уже были (просто ими мало кто пользовался). В классы только добавили атрибуты.

                          Может, для тебя будет откровением, но я программировал на TP5 (без объектов), 6 и 7. Да, объекты были начиная с версии 5.5, и их я привел. Кое-кто назвал их кривыми-косыми, не зная, что они даже в двоичном виде совпадали с объектами С++ :lol: Различия начинались только с множественным наследованием. Собственно, в С++ объекты и отличаются только множественным наследованием (может, еще статическими методами, не помню уже).
                          В Delphi была введена новая абстракция, класс. До этого ничего похожего не было. С тех пор объект объявляется с модификатором class, а object остался только для обратной совместимости. И это совершенно разные вещи.
                          Вот, собственно, я и говорю: Delphi нашло возможность отбросить старую реализацию класса, как неудобную и устаревшую. А С++ насадило примочек, чтобы обойти недостатки этой структуры.
                            Цитата korvin @
                            вот еще один вопрос: почему многие ЯП, компилируемые не напрямую, а через трансляцию в С, юзают именно С, а не С++?
                            Очевидно потому, что:
                            а) возможностей C достаточно;
                            б) задействовать большее количество возможностей C++ сложнее. Генерация С++-исходников в flex до сих пор находится в экспериментальной стадии.

                            Добавлено
                            Цитата Romkin @
                            Delphi нашло возможность отбросить старую реализацию класса, как неудобную и устаревшую.
                            Особенно удобен и модернов модификатор dynamic в классах Delphi.
                            Кстати, каковы критерии удобства и современности?
                            И что там по поводу перечисления признаков, по которым в C++ "Объект - набор предков. Это и выглядит как набор предков, и работает так же, по внешним признакам."
                              Цитата korvin @
                              зависит от типа и только.

                              +1
                              Присваивание, сравнение... Вот какие операторы типу напишу - то так и будет :)
                                Цитата trainer @
                                Кстати, каковы критерии удобства и современности?

                                ООП и полиморфизм на первом месте!
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 190 191 [192] 193 194 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.3160 ]   [ 14 queries used ]   [ Generated: 1.08.26, 02:12 GMT ]