Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 118 119 [120] 121 122 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1786
,
|
|
|
|
Цитата korvin @ ![]() ![]() void Foo = fun () { void Gee = fun () { int x = 222; WriteLn(x) }; Gee() }; int Bar = fun (int x, y) (stdcall, extern Lib) { return x + y }; т.е. ![]() ![]() 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}*] ')' как-то так Добавлено не помню, попробую поискать. (по ключевому слову "перекрывает" должно найтись, если сам решишь поискать) не, это я не понимаю о какой валидности идет речь =) Добавлено Цитата korvin @ не помню, попробую поискать. (по ключевому слову "перекрывает" должно найтись, если сам решишь поискать) Delphi vs C++ (сообщение #2764023) вот, правда там чуть по-другому оказалось, с with косяк, но это тоже неприятно =) |
|
Сообщ.
#1787
,
|
|
|
|
Цитата DesweR @ Цитата trainer @ т.е. я могу отдельно без procedure/function написать только stdcall? или только external? Естественно нет. Тогда зачем там ; ? Цитата В таком случае, в Delphi это будет синтаксический сахар. Нет, можно было бы точно также инициализировать(грубо говоря, вызывать конструктор). |
|
Сообщ.
#1788
,
|
|
|
|
Цитата KILLER @ Цитата (Мяут-Настоящий @ Сегодня, 09:40) Купил книгу "Идеальная архитектура", ни слова о дельфи =) А с чего там быть делфи? Делфи обсуждают только в книжках по делфи. Во всяких паттернах/архитектурах/проектировании о делфи даже не намекнут, т.к. он для этого вообще не предназначен. Ибо перегружен ненужными AfterConstruction/BeforeDestruction/Initialization/Finalization и т.д. Я ни в одной книжке не встречал таких слов, видимо действия которые в них проводят нужны исключительно тем кто пишет на делфи... Думаю если и встретица делфи в какой то книжке по архитектуре, то скорее всего будет в описании как нельзя проектировать приложения... inicialization и finalization - очень удобны, на мой взгляд позволяют отделить собственнно основную ф-цию, инициализацию и очищение, а не сваливать все в одну кучу. |
|
Сообщ.
#1789
,
|
|
|
|
Цитата Alexander N @ inicialization и finalization - очень удобны, на мой взгляд позволяют отдклить собственнно основную ф-цию, инициализацию и очищение, а не сваливать все в одну кучу. что сделать? Какую еще основную функцию? Я вообще тоговорил про секции Initialization/Finalization модуля а не функции, если чо Заодно постарайся объяснить каким образом они помогают отладить основную функцию? |
|
Сообщ.
#1790
,
|
|
|
|
Цитата Это еще ничего. А вот такое: ![]() ![]() function имя(параметры): результат; stdcall; external библиотека; ![]() ![]() property Enabled: Boolean read GetEnabled write SetEnabled stored IsEnabledStored default True; В оригинальном паскале был forward-declaration ![]() ![]() function fun(integer x): integer; forward; / ... function fun(integer x): integer; begin ... end; В этом коде forward заменял тело функции (процедуры), после которого в паскале ставится ';' это слово получило название "директива", хотя реально директивой вообще-то не является, это описатель. Позднее, в связи с необходимостью раздельной компиляции появилась аналогичная "директива" external для родных для компилятора модулей, fortran - для модулей компилированных компилятором фортрана, и т.п. Все они состояли из одного слова и не могли использоваться совместно, поэтому вопросов не возникало. В Delphi даже определенные в одном модуле функции/процедуры могут использовать разное соглашение о вызовах, поэтому можно написать, например ![]() ![]() function fun(integer x): integer; stdcall; forward; / ... function fun(integer x): integer; stdcall; { Здесь возможно stdcall и не нужен } begin ... end; |
|
Сообщ.
#1791
,
|
|
|
|
Цитата Alexander N @ Цитата KILLER @ Цитата (Мяут-Настоящий @ Сегодня, 09:40) Купил книгу "Идеальная архитектура", ни слова о дельфи =) А с чего там быть делфи? Делфи обсуждают только в книжках по делфи. Во всяких паттернах/архитектурах/проектировании о делфи даже не намекнут, т.к. он для этого вообще не предназначен. Ибо перегружен ненужными AfterConstruction/BeforeDestruction/Initialization/Finalization и т.д. Я ни в одной книжке не встречал таких слов, видимо действия которые в них проводят нужны исключительно тем кто пишет на делфи... Думаю если и встретица делфи в какой то книжке по архитектуре, то скорее всего будет в описании как нельзя проектировать приложения... inicialization и finalization - очень удобны, на мой взгляд позволяют отдклить собственнно основную ф-цию, инициализацию и очищение, а не сваливать все в одну кучу. Для "старого доброго" и чистого структурного программирования - удобно. Для ООП, "функциоальщины" и др. методик - лишний и ненужный. Модульность в полном объеме в ОО-системах обеспечивает класс. |
|
Сообщ.
#1792
,
|
|
|
|
|
Сообщ.
#1793
,
|
|
|
|
Цитата Alexander N @ на мой взгляд позволяют отдклить собственнно основную ф-цию, инициализацию и очищение, а не сваливать все в одну кучу. Это делается с помощью объектов-владельцев, без которых попытки создания безопасного в смысле исключений кода приводят к разбросанной по всей программе однотипной лапше. |
|
Сообщ.
#1794
,
|
|
|
|
Цитата KILLER @ Я отредактировал пост, там опечатка: отделить надо. Благодаря таким секциям у нас отдельно мухи от котлет - инициялизация перменных и осбождение памяти происходит в нужный момент, что отладить тоже позволяет лучше что сделать? Какую еще основную функцию? Я вообще тоговорил про секции Initialization/Finalization модуля а не функции, если чо Заодно постарайся объяснить каким образом они помогают отладить основную функцию? Если бы не было этих секций, в Delphi надо было бы инициализировать и деинициализировать модeль в его теле, что не вяжется с вызовом его ф-ци в нужный момент. Например в модуле описан класс и переменная этого класса. У последней поля надо инициализировать. А одно поле - указатель на динамическую память, которая нужена во время всей работы программы, а потом надо ее освободить. Как ты это реализуешь без initializatioт/fanalization секций? Через одно место если только... |
|
Сообщ.
#1795
,
|
|
|
|
Цитата amk @ В оригинальном паскале был forward-declaration о чём был этот пост, хоть убей не пойму |
|
Сообщ.
#1796
,
|
|
|
|
Цитата Alexander N @ Благодаря таким секциям у нас отдельно мухи от котлет - инициялизация перменных и осбождение памяти происходит в нужный момент, что отладить тоже позволяет лучше ... Например в модуле описан класс и переменная этого класса. У последней поля надо инициализировать. А одно поле - указатель на динамическую память, которая нужена во время всей работы программы, а потом надо ее освободить. Какая память? Какие экземпляры? У вас принято настолько активно использовать глобальные переменные? Цитата Как ты это реализуешь без initializatioт/fanalization секций? В конструкторе и деструкторе описываемого класса? |
|
Сообщ.
#1797
,
|
|
|
|
Цитата D_KEY @ Причем тут глобальные переменные? Я весь функционал заложил в один класс, который объявлен в модуле и там же есть его экземпляр. Какая память? Какие экземпляры? У вас принято настолько активно использовать глобальные переменные? |
|
Сообщ.
#1798
,
|
|
|
|
Цитата Alexander N @ Цитата D_KEY @ Причем тут глобальные переменные? Я весь функционал заложил в один класс, который объявлен в модуле и там же есть его экземпляр.Какая память? Какие экземпляры? У вас принято настолько активно использовать глобальные переменные? Этот экземпляр чем-то отличается от "глобальной переменной"? В любом случае, все выделения/освобождения памяти для полей этого объекта будет происходить там, где и должно - в конструкторе и деструкторе соответственно. Этого не достаточно? |
|
Сообщ.
#1799
,
|
|
|
|
Цитата D_KEY @ Именно В любом случае, все выделения/освобождения памяти для полей этого объекта будет происходить там, где и должно - в конструкторе и деструкторе соответственно. Этого не достаточно? А они вызываются в секциях initialization и finalization |
|
Сообщ.
#1800
,
|
|
|
|
Цитата D_KEY @ Какая память? Какие экземпляры? У вас принято настолько активно использовать глобальные переменные? инициализация локальных данных модуля, например: ![]() ![]() 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. в данном случае конечно можно было обойтись ![]() ![]() var id :Integer = 0; и не писать секцию инициализации, она позволяет структурировать код и обходится без ООП, когда оно не нужно. Добавлено Цитата D_KEY @ В любом случае, все выделения/освобождения памяти для полей этого объекта будет происходить там, где и должно - в конструкторе и деструкторе соответственно. Этого не достаточно? это ООП головного мозга -- заводить новый тип(класс) на каждый чих... =) Добавлено Цитата korvin @ это ООП головного мозга -- заводить новый тип(класс) на каждый чих... =) не, если б в С++ были как в Яве/C# только классы и их члены, без возможности объявить "простые" переменные и функции, не относящиеся ни к какому классу, вопросов бы не было. а так получается, что язык вроде и позволяет писать без классов, но никаких гарантий модульности не предоставляет. |