Re[5]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 08.05.08 07:32
Оценка:
Здравствуйте, OCTAGRAM, Вы писали:

OCT>Во–первых, молотом .NET являются функциональные языки, а вовсе не

OCT>Delphi/C++/и т. д.

OCT>Противопоставление с C++ и др. — это маркетинговый
OCT>ход. Любой лиспер поинтересовался бы, зачем, когда есть сборка мусора,
OCT>стековая архитектура? Стек ведь нужен, чтоб с него память эффективно
OCT>выделять, простым инкрементом (декрементом на Intel) указателя. В .NET
OCT>такой источник памяти уже есть — это куча, зачем тогда стек оставили?
OCT>Неоправданная недогрузка мощностей. Но лисперов мало, в целом никто и
OCT>ухом не повёл, что стековая архитектура при сборке мусора — это смешно.

stack нужен для value-типов, между прочим.

В Lisp`е нет value-типов, поэтому и надобности в стеке там тоже нет.
Re[3]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 08.05.08 07:37
Оценка: -1
Здравствуйте, OCTAGRAM, Вы писали:


OCT>Называть .NET код управляемым — кощунство по отношению к Лиспу.


Кощунство — сравнивать .NET и Lisp.
Re[3]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 08.05.08 07:42
Оценка:
Здравствуйте, OCTAGRAM, Вы писали:

>> 5) Программисты дельфи. это самое мрачное. был грешок, работал долгое

>> время на поддержке дельфевых прилад. начальнег (мегакрутой спец по
>> дельфи и прикладной области), как то с трепетом мне показал
>> единственный! юнит, который он сделал, оформив его для повторного
>> использования. в юните была одна функция, разбивавшая строку по табам
>> вроде. в коде этой функции раз пять в разных местах было сравнение с
>> явно прописанной константой символа таб. на мое замечание, почему бы это
>> значение не вынести в аргументы и получить более универсальную функцию,
>> этот чел сказал — хм, интересная мысль.

OCT>Ну он был не так уж не прав:

OCT>http://www.wilshipley.com/blog/2005/02/free-programming-tips-are-worth-every.html
OCT>Free Programming Tips are Worth Every Penny

Неплохо описана идея, стоящая за TDD. Другое дело, что неправильно это рассматривать в отрыве от задачи, стоявшей перед разработчиком.
Re[56]: Чем вам всем не угодил Delphi?
От: Mamut Швеция http://dmitriid.com
Дата: 08.05.08 08:08
Оценка:
M>>Может, все же почитаешь про наследование, а?

H>Я не первый день живу и прекрасно в этом разбираюсь. К слову, наследование в вопросе "COM не COM" ни при чем совершенно.



Ниже

M>>INonCOMInterface наследуется от IUnknown. Более того (или, вернее, поэтому), INonCOMInterface может быть приведено к IUnknown. Более того, наследование от IUnknown означает, что для INonCOMInterface автоматически становятся доступны три базовых COM-метода: AddRef, Release и QueryInterface (потому что они реализованы в IUnknown)


H>Интерфейс есть декларация. Интерфейс ничего не реализует. Получение IUnknown от INonCOMInterface не делает последний COM'ом. Рассматривать несколько методов INonCOMInterface в отрыве от всего интерфейса -- идеологически неверно, ибо интерфейс есть единица неделимая. Какими словами это еще объяснять


Объясни следующее:

1. Чем отличаются две следующие строчки:
class MyClass : TObject

class MyClass : IUnknown


В первом случае MyClass наследуется от TObject. Во втором?
Если во втором — это тоже наследование, то:
— если родитель является TObject, является ли наследник TObject?
— если родитель является COM-объектом, является ли наследник COM-объектом?


2. Interface Keyword

Ключевое слово Interface является всего лишь способом получить множественное наследование от абстрактных классов.

When implementing an interface, you must implement QueryInterface, _AddRef and _Release standard interface methods, unless you base your class on one that already has these implemented, such as TInterfacedObject.

При реализации интерфейсы вы обязаны реализовать стандартные методы QueryInterface, _AddRef and _Release, если ваш класс не будет создан на основе класса, который их уже реализует (примером такого класса может служить TInterfacedObject)





dmitriid.comGitHubLinkedIn
delphi com interface
Re[36]: Чем вам всем не угодил Delphi?
От: iyura  
Дата: 08.05.08 08:41
Оценка:
Здравствуйте, _d_m_, Вы писали:

I>>Ну как сказать... а если вместо := да заставят писать assign


___>Если бы у бабушки был х.. она была бы дедушкой.


Типа пошутил?

I>>Вспомни фортрановские LE, GE и как то там LT, кажется.... Как по мне , то гораздо проще <=, >=, <


___>Это ты к чему вообще?


К тому, что синтаксис должен быть, по возможности, немногословным. И одним из недостатков Delphi (сугубо с моей точки зрения) как раз и есть все эти "приколы" типа :=, begin/end, procedure....

Хотя я признаю, что это во многом дело привычки
Re[32]: Чем вам всем не угодил Delphi?
От: iyura  
Дата: 08.05.08 08:52
Оценка:
Здравствуйте, kuj, Вы писали:

I>>Что значит корректо? Для коннекции в одном случае корректно с ролбэком, а в другом с коммитом


kuj>Не путаешь с транзакцией?


Не путаю. Технически транзакция висит на коннекции
Re[32]: Чем вам всем не угодил Delphi?
От: iyura  
Дата: 08.05.08 08:56
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Предполагается, что Dispose технически корректно освобождает ресурсы.


Вот как-то не складывается у меня с этим. Не спорю, скорее по незнанию\отсутствию опыта. Но я бы хотел сазать, что, например в С++ такие вещи идеологически чище. Чего стоят деструкторы в шарпе — читаешь документацию и сразу выпить хочется

Если технически корректных способов несколько (как в случае с транзакциями) — то а)Чтобы узнать, что именно выполняет Dispose, читайте документацию к конкретному классу, либо эксперементируйте б)Всегда освобождайте такой ресурс явно (т.е. в случае транзакции делайте явный commit/rollback).

Ну, собственно, так и делаю
Re[31]: Чем вам всем не угодил Delphi?
От: iyura  
Дата: 08.05.08 09:04
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>В .NET ресурсы, для которых важна детерминированность времени освобождения (файлы, соединения) оборачиваются в объекты, реализующие интерфейс IDisposable (это даже можно считать паттерном). По команде Dispose() объект сразу освобождает ресурс, после чего переходит в состояние Disposed ("я ресурсом уже не владею") и спокойно себе дожидается, пока его соберет GC и освободит все оставшиеся ресурсы (память, в частности).


O! Коннекцией я уже не владею, но на сервере она висит и дожидается когда ее GC грохнет. Кузяво это. Или я неправ?
Re[33]: Чем вам всем не угодил Delphi?
От: iyura  
Дата: 08.05.08 09:09
Оценка:
Здравствуйте, kuj, Вы писали:

kuj>Если ты не понимаешь разницы между памятью и другими ресурсами системы, то это лишь квалифицирует тебя как непрофессионала.


А тебеб не кажется, что для задач не класса 24х7 проблема утечки памяти вообще преувеличена? И уж тем более он менее важна, чем проблема некорректного освобождения других ресурсов. Так что hattab во многом прав. А учитывая, что на шарпе пишут не только профессионалы понимающие разницу межде памятью и файлом последствия неправильного освобождения ресурсов могут быть очень разрушительными
Re[56]: Чем вам всем не угодил Delphi?
От: Mamut Швеция http://dmitriid.com
Дата: 08.05.08 09:15
Оценка:
M>>Может, все же почитаешь про наследование, а?

H>Я не первый день живу и прекрасно в этом разбираюсь. К слову, наследование в вопросе "COM не COM" ни при чем совершенно.



Ниже

M>>INonCOMInterface наследуется от IUnknown. Более того (или, вернее, поэтому), INonCOMInterface может быть приведено к IUnknown. Более того, наследование от IUnknown означает, что для INonCOMInterface автоматически становятся доступны три базовых COM-метода: AddRef, Release и QueryInterface (потому что они реализованы в IUnknown)


H>Интерфейс есть декларация. Интерфейс ничего не реализует. Получение IUnknown от INonCOMInterface не делает последний COM'ом. Рассматривать несколько методов INonCOMInterface в отрыве от всего интерфейса -- идеологически неверно, ибо интерфейс есть единица неделимая. Какими словами это еще объяснять


Объясни следующее:

1. Чем отличаются две следующие строчки:
class MyClass : TObject

class MyClass : IUnknown


В первом случае MyClass наследуется от TObject. Во втором?
Если во втором — это тоже наследование, то:
— если родитель является TObject, является ли наследник TObject?
— если родитель является COM-объектом, является ли наследник COM-объектом?


2. Interface Keyword

Ключевое слово Interface является всего лишь способом получить множественное наследование от абстрактных классов.

When implementing an interface, you must implement QueryInterface, _AddRef and _Release standard interface methods, unless you base your class on one that already has these implemented, such as TInterfacedObject.

При реализации интерфейсы вы обязаны реализовать стандартные методы QueryInterface, _AddRef and _Release, если ваш класс не будет создан на основе класса, который их уже реализует (примером такого класса может служить TInterfacedObject)



... << RSDN@Home 1.2.0 alpha 4 rev. 1084>>


dmitriid.comGitHubLinkedIn
Re[6]: .NET и спагетти стек (а точнее, его отсутствие там)
От: OCTAGRAM Россия http://octagram.name/
Дата: 08.05.08 09:19
Оценка:
gandjustas пишет:
> А вопросы быстродействия и эффективного рахода памяти?
А этим уже должен заниматься оптимизатор.

> Тем более на уровне машинного кода стек есть, зачем пытаться скрыть этот

> факт?
А управление памятью .NET не скрывает? А ведь оно тоже есть на машинном
уровне.

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[8]: многооконный интерфейс без Exposé
От: OCTAGRAM Россия http://octagram.name/
Дата: 08.05.08 09:36
Оценка:
kuj пишет:
> Кстати, в Delphi в свое время сильно раздражал "не целостный" интерфейс,
> где каждое окно само по себе. Но это так — дело вкуса.
Да, без Expose это не удобно

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Закон один для всех
От: OCTAGRAM Россия http://octagram.name/
Дата: 08.05.08 09:45
Оценка:
lifrsdn пишет:
> Здравствуйте, goto, Вы писали:
>
> G>Здравствуйте, Niemand, Вы писали:
>
> N>>4. "Закон один для всех". В делфи часто встречаются исключения.
> Например writeln — чуть ли не единственная функция, куда можно передать
> переменное к-во параметров. А вот простым смертным — низза. Похожая
> ситуация с массивами.
>
> G>Занудствую . writeln — не ф-я, а оператор языка с переменным числом
> операндов (по кр. мере в "чистом" Паскале). Ну и разбирается там все на
> этапе компиляции, а не в ран-тайме.
>
> Продолжим занудствовать. Как с помощью этого оператора языка (очень
> похожего на функцию ) можно единообразно вывести в файл, в память, в
> отладочный вывод, в консоль, в сокет, в что-то только что придуманное? В
> С++ это можно сделать, что дописывая варианты printf, что наследуя
> ostream. Все операции будут единоообразны. Да 1 и та же функция это
> может делать.
Вообще, в Borland оставлены ниточки, чтобы инициализировать "File"
своими методами Read/Write/Flush/Close. Но на практике работают чаще с
TStream, просто используют функции–форматтеры.

WriteLn применительно к Borland — это рудимент. Выкинуть они его не
могут, но и язык не подстраивают, чтобы можно было свою магию
компилятора творить.

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[34]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 08.05.08 09:53
Оценка:
Здравствуйте, iyura, Вы писали:

kuj>>Если ты не понимаешь разницы между памятью и другими ресурсами системы, то это лишь квалифицирует тебя как непрофессионала.


I>А тебеб не кажется, что для задач не класса 24х7 проблема утечки памяти вообще преувеличена? И уж тем более он менее важна, чем проблема некорректного освобождения других ресурсов. Так что hattab во многом прав. А учитывая, что на шарпе пишут не только профессионалы понимающие разницу межде памятью и файлом последствия неправильного освобождения ресурсов могут быть очень разрушительными


Ты расскажи это тем, у кого проект "встает" из-за трудноуловимых утечек на недели, если не месяцы. При чем это не плод моего воображения, а вполне реальный факт из моей практики... Правда, случившийся не со мной лично, а в соседнем отделе, которые занимались разработкой на Delphi (год этак 2001-2002).
Re[2]: varargs в Delphi
От: OCTAGRAM Россия http://octagram.name/
Дата: 08.05.08 09:59
Оценка:
Niemand пишет:
> 4. "Закон один для всех". В делфи часто встречаются исключения. Например
> writeln — чуть ли не единственная функция, куда можно передать
> переменное к-во параметров. А вот простым смертным — низза.
Чисто для полноты:
Можно:
а) функцию с varargs; напрямую объявить нельзя, но можно объявить такой
тип, объявить функцию (без varargs; но с cdecl, и сделать небезопасное
приведение типа. Ну и с помощью других хаков это реализовать уже.
Возможно, получится экспортировать функцию, а потом импортировать её же,
но уже с varargs;. Я пробовал только первый вариант, да и функция там
была на асме.
Будет такая же поддержка varargs, как и в C, без знания кол–ва и типов
аргументов.
б) Можно устроить свою реализацию IDispatch для OLEVariant и чего–то ещё
для просто Variant. Я работал только с OLEVariant. Несложный объект,
печатает все вызовы, с которыми к нему обращаются.
Есть знание кол–ва и типов аргументов, но это всегда будет выглядеть как
вызов метода, а не отдельная процедура. В with использовать OLEVariant и
Variant нельзя. По понятным соображениям.

Но обычно всё же array of const делают.
--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[32]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 08.05.08 10:00
Оценка:
Здравствуйте, iyura, Вы писали:

MC>>В .NET ресурсы, для которых важна детерминированность времени освобождения (файлы, соединения) оборачиваются в объекты, реализующие интерфейс IDisposable (это даже можно считать паттерном). По команде Dispose() объект сразу освобождает ресурс, после чего переходит в состояние Disposed ("я ресурсом уже не владею") и спокойно себе дожидается, пока его соберет GC и освободит все оставшиеся ресурсы (память, в частности).


I>O! Коннекцией я уже не владею, но на сервере она висит и дожидается когда ее GC грохнет. Кузяво это. Или я неправ?


Стандартная практика использования IDbConnection в .NET — in-place. То есть по принципу открываем, выполнеяем CRUD операцию(и), закрываем (возвращаем в пул подключений). Даже если забыть закрыть, объект подключения почти тут же станет кандидатом на сборку, так как выйдет за scope. Аналогично с файлами.

При чем в отличии от Delphi все проще и читабельней благодаря оператору using — отпадает необходимость явно делать try finally.
Re[33]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 08.05.08 10:01
Оценка:
Здравствуйте, kuj, Вы писали:

MC>>>В .NET ресурсы, для которых важна детерминированность времени освобождения (файлы, соединения) оборачиваются в объекты, реализующие интерфейс IDisposable (это даже можно считать паттерном). По команде Dispose() объект сразу освобождает ресурс, после чего переходит в состояние Disposed ("я ресурсом уже не владею") и спокойно себе дожидается, пока его соберет GC и освободит все оставшиеся ресурсы (память, в частности).


I>>O! Коннекцией я уже не владею, но на сервере она висит и дожидается когда ее GC грохнет. Кузяво это. Или я неправ?


kuj>Стандартная практика использования IDbConnection в .NET — in-place. То есть по принципу открываем, выполнеяем CRUD операцию(и), закрываем (возвращаем в пул подключений). Даже если забыть закрыть, объект подключения почти тут же станет кандидатом на сборку, так как выйдет за scope. Аналогично с файлами.


kuj>При чем в отличии от Delphi все проще и читабельней благодаря оператору using — отпадает необходимость явно делать try finally.


Забыл упомянуть, что для доступа к БД фактически повсеместно используются O/RM, которые сами заботятся о подключениях. Единственное, где надо помнить о using — для TransactionScope`ов.
Re[33]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 08.05.08 10:08
Оценка:
Здравствуйте, iyura, Вы писали:

I>>>Что значит корректо? Для коннекции в одном случае корректно с ролбэком, а в другом с коммитом


kuj>>Не путаешь с транзакцией?


I>Не путаю. Технически транзакция висит на коннекции


Тем не менее, не следует ассоциировать закрытие коннэкшн с логикой коммит/роллбэк транзакции. Когда требуется эта логика, то следует явно управлять транзакцией.
Re[10]: Чем вам всем не угодил Delphi?
От: FractalizeR  
Дата: 08.05.08 10:09
Оценка:
Здравствуйте, kuj, Вы писали:
kuj>Здравствуйте, ironwit, Вы писали:
kuj>>>Мне нужно нажать только =, в то время как тебе в Delphi — зажать shift, нажать 6, отжать shift, нажать = и это для, пожалуй, наиболее используемого оператора...
I>>shift+Ж в англ раскладке? :
kuj>Почему я должен помнить какая у меня там активная раскладка, если все что мне нужно, это ввести оператор присваивания?

Ну как дети, ей богу... Почему вообще нужно что-то там помнить, если компьютер и так все должен сам знать?
Re[33]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 08.05.08 10:11
Оценка:
Здравствуйте, iyura, Вы писали:

MC>>Предполагается, что Dispose технически корректно освобождает ресурсы.


I>Вот как-то не складывается у меня с этим. Не спорю, скорее по незнанию\отсутствию опыта. Но я бы хотел сазать, что, например в С++ такие вещи идеологически чище. Чего стоят деструкторы в шарпе — читаешь документацию и сразу выпить хочется


Явное использование деструкторов в управляемой среде в 95% случаев моветон.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.