На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 118 119 [120] 121 122 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата korvin @
    ExpandedWrap disabled
      void Foo = fun () {
        void Gee = fun () { int x = 222; WriteLn(x) };
        Gee()
      };
       
      int Bar = fun (int x, y) (stdcall, extern Lib) {
        return x + y
      };

    т.е.
    ExpandedWrap disabled
      expression ::= declaration | instruction
      declaration ::= typename varname ['=' value]
      value ::= ... | function
      function ::= 'fun' formals [directives] body
      formals :: cortege of declaration
      directives :: cortege of directive
      body ::= block of expression
      block of x ::= '{' x [{';' x}*] '}'
      cortege of x ::= '(' x [{',' x}*] ')'

    как-то так

    Добавлено
    Цитата DesweR @
    А где именно не помнишь? И печатается параметр, а self.x.

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

    Цитата DesweR @
    Я снова тебя не понимаю...

    не, это я не понимаю о какой валидности идет речь =)

    Добавлено
    Цитата korvin @
    Цитата DesweR @
    А где именно не помнишь? И печатается параметр, а self.x.

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

    Delphi vs C++ (сообщение #2764023)

    вот, правда там чуть по-другому оказалось, с with косяк, но это тоже неприятно =)
    Сообщение отредактировано: korvin -
      Цитата DesweR @
      Цитата trainer @
      т.е. я могу отдельно без procedure/function написать только stdcall? или только external?

      Естественно нет.

      Тогда зачем там ; ?

      Цитата
      Цитата D_KEY @
      У этих конструкций разная семантика.

      В таком случае, в Delphi это будет синтаксический сахар.

      Нет, можно было бы точно также инициализировать(грубо говоря, вызывать конструктор).
        Цитата KILLER @
        Цитата (Мяут-Настоящий @ Сегодня, 09:40)
        Купил книгу "Идеальная архитектура", ни слова о дельфи =)

        А с чего там быть делфи? Делфи обсуждают только в книжках по делфи. Во всяких паттернах/архитектурах/проектировании о делфи даже не намекнут, т.к. он для этого вообще не предназначен. Ибо перегружен ненужными AfterConstruction/BeforeDestruction/Initialization/Finalization и т.д. Я ни в одной книжке не встречал таких слов, видимо действия которые в них проводят нужны исключительно тем кто пишет на делфи... Думаю если и встретица делфи в какой то книжке по архитектуре, то скорее всего будет в описании как нельзя проектировать приложения...

        inicialization и finalization - очень удобны, на мой взгляд позволяют отделить собственнно основную ф-цию, инициализацию и очищение, а не сваливать все в одну кучу.
        Сообщение отредактировано: Alexander N -
          Цитата Alexander N @
          inicialization и finalization - очень удобны, на мой взгляд позволяют отдклить собственнно основную ф-цию, инициализацию и очищение, а не сваливать все в одну кучу.

          что сделать? Какую еще основную функцию? Я вообще тоговорил про секции Initialization/Finalization модуля а не функции, если чо ;) Заодно постарайся объяснить каким образом они помогают отладить основную функцию?
            Цитата
            Цитата korvin @
            кстати вот здесь точка с запятой убивает просто
            Это еще ничего. А вот такое:
            ExpandedWrap disabled
              function имя(параметры): результат; stdcall; external библиотека;
            Зачем здесь эти ';'? При том что имеем другой вариант:
            ExpandedWrap disabled
              property Enabled: Boolean read GetEnabled write SetEnabled stored IsEnabledStored default True;
            Никаких тебе ';' внутри определения.

            В оригинальном паскале был forward-declaration
            ExpandedWrap disabled
              function fun(integer x): integer; forward;
              /
              ...
               
              function fun(integer x): integer;
              begin
                ...
              end;

            В этом коде forward заменял тело функции (процедуры), после которого в паскале ставится ';'
            это слово получило название "директива", хотя реально директивой вообще-то не является, это описатель.
            Позднее, в связи с необходимостью раздельной компиляции появилась аналогичная "директива" external для родных для компилятора модулей, fortran - для модулей компилированных компилятором фортрана, и т.п.
            Все они состояли из одного слова и не могли использоваться совместно, поэтому вопросов не возникало.
            В Delphi даже определенные в одном модуле функции/процедуры могут использовать разное соглашение о вызовах, поэтому можно написать, например
            ExpandedWrap disabled
              function fun(integer x): integer; stdcall; forward;
              /
              ...
               
              function fun(integer x): integer; stdcall; { Здесь возможно stdcall и не нужен }
              begin
                ...
              end;
            Здесь stdcall описывает соглашение о вызове, а не является частью forward-declaration (аналогично и с external)
            Сообщение отредактировано: amk -
              Цитата Alexander N @
              Цитата KILLER @
              Цитата (Мяут-Настоящий @ Сегодня, 09:40)
              Купил книгу "Идеальная архитектура", ни слова о дельфи =)

              А с чего там быть делфи? Делфи обсуждают только в книжках по делфи. Во всяких паттернах/архитектурах/проектировании о делфи даже не намекнут, т.к. он для этого вообще не предназначен. Ибо перегружен ненужными AfterConstruction/BeforeDestruction/Initialization/Finalization и т.д. Я ни в одной книжке не встречал таких слов, видимо действия которые в них проводят нужны исключительно тем кто пишет на делфи... Думаю если и встретица делфи в какой то книжке по архитектуре, то скорее всего будет в описании как нельзя проектировать приложения...

              inicialization и finalization - очень удобны, на мой взгляд позволяют отдклить собственнно основную ф-цию, инициализацию и очищение, а не сваливать все в одну кучу.

              Для "старого доброго" и чистого структурного программирования - удобно. Для ООП, "функциоальщины" и др. методик - лишний и ненужный. Модульность в полном объеме в ОО-системах обеспечивает класс.
              Сообщение отредактировано: D_KEY -
                Цитата DesweR @
                И C# тоже?

                Ну нельзя забывать, что С# - молодой язык :) Вскользь он таки упоминается
                  Цитата Alexander N @
                  на мой взгляд позволяют отдклить собственнно основную ф-цию, инициализацию и очищение, а не сваливать все в одну кучу.

                  Это делается с помощью объектов-владельцев, без которых попытки создания безопасного в смысле исключений кода приводят к разбросанной по всей программе однотипной лапше.
                    Цитата KILLER @
                    что сделать? Какую еще основную функцию? Я вообще тоговорил про секции Initialization/Finalization модуля а не функции, если чо Заодно постарайся объяснить каким образом они помогают отладить основную функцию?
                    Я отредактировал пост, там опечатка: отделить надо. Благодаря таким секциям у нас отдельно мухи от котлет - инициялизация перменных и осбождение памяти происходит в нужный момент, что отладить тоже позволяет лучше ;)
                    Если бы не было этих секций, в Delphi надо было бы инициализировать и деинициализировать модeль в его теле, что не вяжется с вызовом его ф-ци в нужный момент.
                    Например в модуле описан класс и переменная этого класса. У последней поля надо инициализировать. А одно поле - указатель на динамическую память, которая нужена во время всей работы программы, а потом надо ее освободить. Как ты это реализуешь без initializatioт/fanalization секций? Через одно место если только...
                    Сообщение отредактировано: Alexander N -
                      Цитата amk @
                      В оригинальном паскале был forward-declaration

                      о чём был этот пост, хоть убей не пойму
                        Цитата Alexander N @
                        Благодаря таким секциям у нас отдельно мухи от котлет - инициялизация перменных и осбождение памяти происходит в нужный момент, что отладить тоже позволяет лучше ;)
                        ...
                        Например в модуле описан класс и переменная этого класса. У последней поля надо инициализировать. А одно поле - указатель на динамическую память, которая нужена во время всей работы программы, а потом надо ее освободить.

                        Какая память? Какие экземпляры?
                        У вас принято настолько активно использовать глобальные переменные?

                        Цитата
                        Как ты это реализуешь без initializatioт/fanalization секций?

                        В конструкторе и деструкторе описываемого класса?
                          Цитата D_KEY @
                          Какая память? Какие экземпляры?
                          У вас принято настолько активно использовать глобальные переменные?
                          Причем тут глобальные переменные? Я весь функционал заложил в один класс, который объявлен в модуле и там же есть его экземпляр.
                            Цитата Alexander N @
                            Цитата D_KEY @
                            Какая память? Какие экземпляры?
                            У вас принято настолько активно использовать глобальные переменные?
                            Причем тут глобальные переменные? Я весь функционал заложил в один класс, который объявлен в модуле и там же есть его экземпляр.

                            Этот экземпляр чем-то отличается от "глобальной переменной"?
                            В любом случае, все выделения/освобождения памяти для полей этого объекта будет происходить там, где и должно - в конструкторе и деструкторе соответственно. Этого не достаточно?
                              Цитата D_KEY @
                              В любом случае, все выделения/освобождения памяти для полей этого объекта будет происходить там, где и должно - в конструкторе и деструкторе соответственно. Этого не достаточно?
                              Именно :) А они вызываются в секциях initialization и finalization
                                Цитата D_KEY @
                                Какая память? Какие экземпляры?
                                У вас принято настолько активно использовать глобальные переменные?

                                инициализация локальных данных модуля, например:
                                ExpandedWrap disabled
                                  unit GenericString;
                                   
                                  interface
                                   
                                  function genstr (prefix :string = "#:") :string;
                                   
                                  implementation
                                   
                                  var id :Integer;
                                   
                                  function genstr (prefix :string) :string;
                                  begin
                                    Result := prefix + IntToStr(id);
                                    Inc(id);
                                  end;
                                   
                                  initialization
                                   
                                  id := 0;
                                   
                                  end.


                                в данном случае конечно можно было обойтись
                                ExpandedWrap disabled
                                  var id :Integer = 0;

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

                                Добавлено
                                Цитата D_KEY @
                                В любом случае, все выделения/освобождения памяти для полей этого объекта будет происходить там, где и должно - в конструкторе и деструкторе соответственно. Этого не достаточно?

                                это ООП головного мозга -- заводить новый тип(класс) на каждый чих... =)

                                Добавлено
                                Цитата korvin @
                                это ООП головного мозга -- заводить новый тип(класс) на каждый чих... =)

                                не, если б в С++ были как в Яве/C# только классы и их члены, без возможности объявить "простые" переменные и функции, не относящиеся ни к какому классу, вопросов бы не было. а так получается, что язык вроде и позволяет писать без классов, но никаких гарантий модульности не предоставляет.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 118 119 [120] 121 122 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.2240 ]   [ 14 queries used ]   [ Generated: 30.07.26, 19:03 GMT ]