>>Для доступа к методам объекта используются методы record (или методы object в Delphi 7 и 2005)
это работает только если твой врайпер заточен под строго определенный класс объектов. Для общего случая — это невозможно реализовать.
у raii на рекордах в дельфи по сравнению с плюсами — есть ряд минусов
1) удобство использования.
у рекорда должно быть некое свойство Value для доступа к методам объекта
2) производительсность.
какой нить интерфейсы/варианты дают оверхед. Правда на уровне общей слабости дельфийского компилятора/RTL — это не так и важно.
3) невозможность реализовать что нить типа unique_ptr (http://en.wikipedia.org/wiki/Smart_pointer#unique_ptr). невозможно в компил тайм запретить присваивать один указатель другому. можно только в ран тайм просигнализировать об этом.
ну и если касается в дельфи7, то там невозможно создать универсальное решение, только затачиваться под конкретный класс.
а так, в целом пользоваться можно.
Вообще, рекламой нужно считать все то, на что явно не подписывался абонент.
Действительно. Уверен, ну например жители Крымска в ЯВНОМ виде не давали разрешения на то, чтоб их о наводнениях информировали, так что сами виноваты.
Дело же не только в количестве строк кода, но и в его понятности. Извините, но я вот например не понимаю, что делает ваша программа
естественно. первых двух абзацев статьи для этого — недостаточно.
Но должен отметить, что я не пишу на Delphi/Object Pascal уже довольно давно. В последнее время я имею дело в основном с Perl, плюс изучаю «для себя» Erlang и Haskell.
в хаскеле для генерации последовательности в подобном стиле нет нужды, он и сам по себе ленивый. в perl вот: en.wikipedia.org/w/index.php?title=Generator_(computer_programming)§ion=6#1987:_Perl ну а саму статью почитай…
Не уверен, что это средство намного удобнее и понятнее итераторов
ну давай, реализуй на итераторах аналог этого:
procedure F( Generator: TGeneratorWithParam<UInt64, UInt64> );
begin
if Random(1) = 0 then if not Generator.Yield(0) then Exit;
if Random(10) = 0 then if not Generator.Yield(0) then Exit;
if Random(20) = 0 then if not Generator.Yield(0) then Exit;
end;
for X in TGenerator<UInt64>.Create( F ) do
begin
WriteLn( X );
end;
Вот пришел тебе ViewModel с Name = null. Ну так тебе все равно придется в контроллере придется проверять, какая роль тебе прислала эту ViewModel, чтоб ненароком не перезаписать в базу null вместо Name. В чем тогда смысл этого примера?
дык сейчас у вас вроде обычный if чуть засахаренный, насколько я вижу.
А PM в использовании ничуть не сложен.
Expr =
| Num of Integer
| Sum of Expr * Expr
| Mult of Expr * Expr
let evalWhen = function
| Num(x) -> x
| Sum(a, b) -> evalWhen(a) + evalWhen(b)
| Mult(Num(0), _) | Mult( _, Num(0)) | -> 0 // типа оптимизация вычислений. в вашем текущем синтаксисе это выльется во всякую совсем мутную писанину.
| Mult(a, b) => evalWhen(a) * evalWhen(b )
Причем мне кажется именно для задач анализа AST такое архиполезно. да и не только AST вообще в любой задаче где нуно хоть сколько нить сложные данные анализировать.
А если метод UseReadLock() вернет структуру, реализующую IDisposable() боксинг будет??? Насколько я понял MSIL — не должен быть, но все таки подверди или опровергни, пожалуйста.
это работает только если твой врайпер заточен под строго определенный класс объектов. Для общего случая — это невозможно реализовать.
1) удобство использования.
у рекорда должно быть некое свойство Value для доступа к методам объекта
2) производительсность.
какой нить интерфейсы/варианты дают оверхед. Правда на уровне общей слабости дельфийского компилятора/RTL — это не так и важно.
3) невозможность реализовать что нить типа unique_ptr (http://en.wikipedia.org/wiki/Smart_pointer#unique_ptr). невозможно в компил тайм запретить присваивать один указатель другому. можно только в ран тайм просигнализировать об этом.
ну и если касается в дельфи7, то там невозможно создать универсальное решение, только затачиваться под конкретный класс.
а так, в целом пользоваться можно.
Действительно. Уверен, ну например жители Крымска в ЯВНОМ виде не давали разрешения на то, чтоб их о наводнениях информировали, так что сами виноваты.
естественно. первых двух абзацев статьи для этого — недостаточно.
Но должен отметить, что я не пишу на Delphi/Object Pascal уже довольно давно. В последнее время я имею дело в основном с Perl, плюс изучаю «для себя» Erlang и Haskell.
в хаскеле для генерации последовательности в подобном стиле нет нужды, он и сам по себе ленивый. в perl вот:
en.wikipedia.org/w/index.php?title=Generator_(computer_programming)§ion=6#1987:_Perl ну а саму статью почитай…
ну давай, реализуй на итераторах аналог этого:
и сравни количество кода.
А PM в использовании ничуть не сложен.
Expr =
| Num of Integer
| Sum of Expr * Expr
| Mult of Expr * Expr
let evalWhen = function
| Num(x) -> x
| Sum(a, b) -> evalWhen(a) + evalWhen(b)
| Mult(Num(0), _) | Mult( _, Num(0)) | -> 0 // типа оптимизация вычислений. в вашем текущем синтаксисе это выльется во всякую совсем мутную писанину.
| Mult(a, b) => evalWhen(a) * evalWhen(b )
Причем мне кажется именно для задач анализа AST такое архиполезно. да и не только AST вообще в любой задаче где нуно хоть сколько нить сложные данные анализировать.
А почему??
не то что бы прям мечтали, просто соотношение градусов на рубль — очень не плохое у трех топоров было.
Баг будет пофиксин в ближайшее время, ТП получит люлей. Сенкс за feedback, и приносим извинения за км… неадекватную реакцию поддержки.
Ну я сам пнул человека, который экспортом занимается, должен поправить.