Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Анонимные методы в будущем Тибуроне   Найти похожие ветки 

 
MBo ©   (2008-08-15 10:44) [0]

Не понимаю, для чего в язык вводится новая конструкция
TSimpleProc = reference to procedure(x: Integer);
http://blogs.codegear.com/andreanolanusse/2008/07/17/tiburon-anonymous-methods/
Разве нельзя в данном случае было обойтись старыми добрыми процедурными типами TSimpleProc = procedure(x: Integer);  ?
Или я не вижу чего-то глубинного?


 
Anatoly Podgoretsky ©   (2008-08-15 10:55) [1]

> MBo  (15.08.2008 10:44:00)  [0]

Популисткая мера.
Последствия могут быть плохими, а по Паркинсону будут.


 
Игорь Шевченко ©   (2008-08-15 10:59) [2]

"Всякий овощ приносит пользу, будучи употреблен надлежащим образом в надлежащее время".

Наверняка найдется такой код, где применение таких конструкций будет вполне оправдано. Другое дело, что народ будет использовать фичу ради фичи, превращая код в нечто абсолютно нечитаемой и несопровождаемое. Зато "типа круто".
Впрочем, с хелперами и с дженериками все с точностью то же самое - идея неплохая, а извраты воспаленного мозга при использовании эту идею дискредитируют.


 
Alex Konshin ©   (2008-08-15 11:07) [3]

Всё уже украдено до нас (c) Операция Ы.

Это было давно в Algol 68.

Вообще-то если они при этом уберут старый синтаксис (TSimpleProc = procedure(x: Integer);), то будет явно более однозначный синксис. Сейчас синтаксис неоднозначный или, по крайней мере, не очевиден. Например,
попробуй понять такое с ходу:

type TSimpleProc = function : Object;
var pp : TSimpleProc;
...
if pp=nil then
...

Вот и пойми, что тут имелось в виду и как же именно записать то, что действительно хочешь (для шибко много знающих замечу, что об операторах @ и Address() я в курсе).

Короче, если они поменяют синтаксис в сторону функционального языка типа Algol 68, то будет намного лучше. Всё-таки теперешний синтаксис Pascal местами просто уродлив и выглядит анахронизмом.


 
Polevi ©   (2008-08-15 11:10) [4]

анонимные методы сами по себе хороши.. замыкания и все такое..
а вот смысл в reference to procedure я тоже чтото не уловил


 
jack128_   (2008-08-15 11:17) [5]


> Или я не вижу чего-то глубинного?


скорее всего компилер так устроен, ему нужно явное указание

Func(10) - это вызов ссылки на анонимную или обычную функцию...


 
Ega23 ©   (2008-08-15 11:19) [6]


> Вот и пойми, что тут имелось в виду и как же именно записать
> то, что действительно хочешь (для шибко много знающих замечу,
>  что об операторах @ и Address() я в курсе).


Да, хороший пример.
Но, насколько я понимаю, в данной ситуации нельзя таким образом именно адрес метода (не результат) проверять. Надо через Assigned. Тогда понятно будет:
if Assigned(pp) then
 if pp=nil then ...


 
Alex Konshin ©   (2008-08-15 11:23) [7]

> Ega23 ©   (15.08.08 11:19) [6]
> > Вот и пойми, что тут имелось в виду и как же именно записать
> > то, что действительно хочешь (для шибко много знающих
> замечу,>  что об операторах @ и Address() я в курсе).Да,
>  хороший пример. Но, насколько я понимаю, в данной ситуации
> нельзя таким образом именно адрес метода (не результат)
> проверять. Надо через Assigned. Тогда понятно будет:

Тогда я тебя попрошу написать пример для ссылки на ссылку на функцию, выдающую объект. Вот на старом Algol 68 это было очевидно. На C/C++ не так очевидно, но можно. А вот на Pascal... без бутылки точно не разберёшь.


 
Рамиль ©   (2008-08-15 11:27) [8]


> Alex Konshin ©   (15.08.08 11:23) [7]

Интуитивно понятный код - это когда интуитивно понятно, это - код. © bash.org.ru


 
jack128_   (2008-08-15 11:34) [9]


> Тогда я тебя попрошу написать пример для ссылки на ссылку
> на функцию, выдающую объект.


@(Pointer(@PP)) ?? :-)  

Только не понятно, как ввод reference to решит эту проблему??


 
Ega23 ©   (2008-08-15 11:35) [10]


> пример для ссылки на ссылку на функцию, выдающую объект.


:) Ты сначала приведи нормальные (не академический) пример, где без этого действительно никак не обойтись: ссылки на ссылку на функцию ,возвращающую чего-то-там.


 
Alex Konshin ©   (2008-08-15 11:41) [11]

> Ega23 ©   (15.08.08 11:35) [10]
> > пример для ссылки на ссылку на функцию, выдающую объект.
> :) Ты сначала приведи нормальные (не академический) пример,
>  где без этого действительно никак не обойтись: ссылки на
> ссылку на функцию ,возвращающую чего-то-там.

Элементарно. Это может понадобится, если у тебя есть несколько векторов функций и по ним нужно как-то перемещаться. Вот как раз-таки из-за того, что в Pascal это совершенно нечитаемо, такой код редко встретишь. На C/C++ таких примеров - завались. А на Algol 68 это были вообще задачки для начинающих студентов.


 
Ega23 ©   (2008-08-15 11:47) [12]


> Вот как раз-таки из-за того, что в Pascal это совершенно
> нечитаемо, такой код редко встретишь.


Дело не в том, что это "читаемо - не читаемо". По мне, так весь С как-то не очень читаемый. Дело-то не в этом.
Мне просто архитектурно как-то сложно себе представить, нафига иметь указатель на указатель на что-то. Почему не просто указатель на что-то?


 
Alex Konshin ©   (2008-08-15 11:49) [13]

Вот, кстати, пример вектора функций - VMT. А указатель на него - это указатель на класс. Правда в VMT типы функций разные.


 
Игорь Шевченко ©   (2008-08-15 11:50) [14]


> По мне, так весь С как-то не очень читаемый


Сам ты не очень читаемый :) Нормальный язык, код, грамотно на нем написанный, читается без проблем. А нечитаемо на любом языке можно написать, даже на русском.


 
Alex Konshin ©   (2008-08-15 11:51) [15]

Вот, например, захочется тебе интерпретатор Forth или Lisp реализовать на Pascal, а там сплошные указатели многоэтажные...


 
Alex Konshin ©   (2008-08-15 11:57) [16]

К слову, одно из последних нововведений в Delphi мне не очень нравится именно по той же причине - появление неоднозначностей. Сейчас можно не указывать ^ для разыменования указателей на запись. Вот именно то, что можно и так, и эдак, мне не нравится.


 
Ega23 ©   (2008-08-15 12:01) [17]


> Сам ты не очень читаемый :) Нормальный язык, код, грамотно
> на нем написанный, читается без проблем. А нечитаемо на
> любом языке можно написать, даже на русском.


Это всё субъективно.
Да и редко встретишь грамотно написанный и читабельный код от чистого сишного кодера. Всегда просматривается подспудное желание записать одной строкой то, что можно написать в пять строк...  :)


 
ketmar ©   (2008-08-15 12:02) [18]

>[12] Ega23 © (2008-08-15 11:47:00)
>По мне, так весь С как-то не очень читаемый

дело привычки.

---
Do what thou wilt shall be the whole of the Law.


 
Ega23 ©   (2008-08-15 12:07) [19]


> дело привычки.


Вполне вероятно.


 
DevilDevil ©   (2008-08-15 13:17) [20]

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


 
Alkid ©   (2008-08-15 13:32) [21]


> Да и редко встретишь грамотно написанный и читабельный код
> от чистого сишного кодера. Всегда просматривается подспудное
> желание записать одной строкой то, что можно написать в
> пять строк...  :)

Кстати, это уже не модно :)


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

+1


 
Игорь Шевченко ©   (2008-08-15 14:01) [22]

Ega23 ©   (15.08.08 12:01) [17]


> Да и редко встретишь грамотно написанный и читабельный код
> от чистого сишного кодера. Всегда просматривается подспудное
> желание записать одной строкой то, что можно написать в
> пять строк...  :)


Исходники Unix посмотри - именно "грамотно написанный и читабельный код". Я имею в виду именно, С, без плюсов.


 
ketmar ©   (2008-08-15 14:35) [23]

>[22] Игорь Шевченко © (2008-08-15 14:01:00)
plan9, кстати, тоже.

---
Understanding is not required. Only obedience.


 
oxffff ©   (2008-08-15 15:30) [24]

MBo ©   (15.08.08 10:44)  

Я могу вам помочь!!!

Некий Barry Kelly(входящий в команду разработчиков компилятора), который у себя в комментарий пояснил реализацию ссылки на процедуру.
Фактически reference to procedure(x: Integer) будет являться с интерфейсом с единственным методом с сигнатурой описанной процедуры.

Основная вкусность в том, что происходит захват переменных,
Что это

1. Создается объект кучи(у которого есть интерфейс с методом сигнатурой аномимного метода, который(интерфейс) в дальнейшем и будет являться значением переменной reference to procedure)
2. Его поля фактически будут представлять набор переменных вызова (snapshot окружения).
3. В дальнейшем я думую, такое упрощенное определения объекта замыкания(все работу за нас делает компилятор) приведет к некоему подобию LINQ C#.

Однако есть вопросы которые требуют ответа.
Например захват value типов в С# происходит по значению, а поля managed типов по ссылке.
А поскольку в delphi куча не управляемая, и объекты не имеют интерфейса для подсчета времени своего существования (например из-за проблемы зацикливания), то я думаю поля объектов тоже будут захватываться по значению. Ему(Barry Kelly) задали этот вопрос две недели назад. Но правила захвата он не пояснил.

 

То есть переменных стека не используются и использоваться а потом копироваться, например при захвате входящего параметра)

создается объект с единственным методом.

значения которых фактически копируются в объект кучи.

Хотя если посмотреть внимательно, то замыкание в Delphi присутствовало c самого рождения.
А именно procedure of object явно принимает скрытый параметр.


 
Anatoly Podgoretsky ©   (2008-08-15 15:38) [25]

> Alex Konshin  (15.08.2008 11:57:16)  [16]

Да нет здесь никакой неодназначности, если применять там где положено X.Y и X^.Y в обеих случаях ясно и однозначно, что надо обратиться к члену Y
А вот X и X^ другое дело, но оно никакого отношения к нововведению не имет, хоть в Паскале Вирта, хоть в Д2009 одинаково.


 
McSimm ©   (2008-08-15 15:43) [26]

Интересно, как будет работать, если во втором примере по ссылке функцию MakeAdder объявить с var параметром.


 
McSimm ©   (2008-08-15 15:45) [27]


> oxffff ©   (15.08.08 15:30) [24]

Не увидел этого. Т.е. все равно по значению и последующее изменение параметра не изменяет полученную функцию, так ?


 
oxffff ©   (2008-08-15 15:45) [28]


> oxffff ©   (15.08.08 15:30) [24]


Постраюсь пояснить для чего это надо.
Допустим у нас есть процедура которая принимает 5 параметров.
Один из них другая процедура, которая принимает 10 параметров.
Например нам нужно вызвать первую процедуру и передать параметры(snapshot) для второй процедуры(причем внешняя процедуа не определяет все параметры). Как сделать.
Расширять интрефейс первой процедуры можно. А что если нам нужно передать во вторую процедуру еще процедуры и так далее.
Однако можно постутить проще можно создать для каждой процедуры объект который хранит состояние на момент вызова. И передавать в процедуры его. Делать это вручную накладно. За нас это может сделать компилятор.

Это тоже самое как мы пользуемся procedure of object.
А данном случае ссылка на объект есть замыкание.


 
McSimm ©   (2008-08-15 15:48) [29]


> который хранит состояние на момент вызова.

на момент создания ?


 
MBo ©   (2008-08-15 15:50) [30]

>oxffff
У меня страница блога из  первого поста теперь наконец загрузилась полностью, и, как оказалось, появились комментарии, в которых автор приводит некоторые пояснения того же Barry Kelly насчет того, что ссылка на анон.процедуру - управляемый тип с вытекающими последствиями, что в в общем-то согласуется с Вашим постом
Однако толком я осознать принципы (а главное - полезность) данной системы не могу, вероятно, из-за того, что пока не понимаю closure (замыкание). Видимо, придется разбираться глубже.


 
oxffff ©   (2008-08-15 15:53) [31]


> McSimm ©   (15.08.08 15:45) [27]
>
> > oxffff ©   (15.08.08 15:30) [24]
>
> Не увидел этого. Т.е. все равно по значению и последующее
> изменение параметра не изменяет полученную функцию, так
> ?


То есть ли ты объявляешь функцию с параметром, которая возвращает reference to procedure , и делаешь в ней какие то манипуляции с ним(параметром внутри) .
То произойдет захват поскольку фактически параметр со стека будет скопирован в объект-замыкание и все изменения будут происходить в нем.
Аналогично для локальных переменных. Это общая технология.
Конкретная реализация в Delphi мне не известна. Barry Kelly молчит.
Видимо его прижали за яйца, поскольку и так много сказал.


 
oxffff ©   (2008-08-15 15:57) [32]


> MBo ©   (15.08.08 15:50) [30]


Рекомендую поставить ILDASM и посмотреть реализацию на .NET, отличие в том, что delphi нужно прикрутить подсчет ссылок на объект.
B видимо различных правилах захвата.
Безусловно мы можем определять эти объекты сами.
Но тогда потеряеться выразительность LINQ запроса.
Да и рефакторинг и расширение будет ручное сложное.


 
oxffff ©   (2008-08-15 15:58) [33]


> MBo ©   (15.08.08 15:50) [30]


oxffff ©   (15.08.08 15:45) [28]


 
McSimm ©   (2008-08-15 16:03) [34]


> oxffff ©   (15.08.08 15:53) [31]

Не совсем понял, я имел в виду:

function MakeAdder(var y: Integer): TFuncOfInt;
begin
 MakeAdder :=
   function(x: Integer): Integer
   begin
     Result := x+y;
   end;
end;

var
 adder: TFuncOfInt;
 I: Integer;
begin
 I := 20;
 adder := MakeAdder(I);

 I := 30; // <- это влияет на уже созданное замыкание adder?


 
McSimm ©   (2008-08-15 16:04) [35]

или то же самое про использование глобальных переменных внутри замыканий


 
MBo ©   (2008-08-15 16:06) [36]

>oxffff ©   (15.08.08 15:58) [33]
почитал в wiki, и пока это closure для меня выглядит подобно вложенным функциям в Паскале, имеющим доступ к переменным внешней функции (и более глобальным), а кроме того, как следует из [28] - к личным параметрам данного closure (как поля объекта).


 
oxffff ©   (2008-08-15 16:26) [37]


> McSimm ©   (15.08.08 16:03) [34]


Я говорю, что не знаю правила захвата в реализации Delphi.
Поскольку время жизни var параметра не известно, а код создания и инициализация объекта замыкания расположен внутри MakeAdder, то
1. Либо запрещено захватывать объекты по ссылке.
2. Либо копирование значения и использование копии в качестве переменной внутри аноноимного метода.


> MBo ©   (15.08.08 16:06) [36]


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

А здесь они вычленяются в отдельную сущность которая может жить сама по себе, пока последняяя ссылка не прикажет Retire

Поскольку MakeAdder(var y: Integer): TFuncOfInt;


> MBo ©   (15.08.08 16:06) [36]


 
ketmar ©   (2008-08-15 17:22) [38]

забавно. но не ясно, нафига тащить в язык то, что ему подходит как корове макияж.

---
All Your Base Are Belong to Us


 
DevilDevil   (2008-08-15 18:05) [39]

> ketmar ©   (15.08.08 17:22) [38]
> забавно. но не ясно, нафига тащить в язык то,
> что ему подходит как корове макияж.


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


 
ketmar ©   (2008-08-15 18:15) [40]

>[39] DevilDevil (2008-08-15 18:05:00)
«право высказываться» у меня отъемлемо только модераторами. это доступно?

алсо: я знал и использовал closures & lambda calculus когда ты ещё не то, что кода не писал, а даже игрушки с трудом запускал. если ты не понял, о чём я — промолчи, сойдёшь за умного.

---
Do what thou wilt shall be the whole of the Law.


 
DevilDevil   (2008-08-15 19:15) [41]

Удалено модератором


 
ketmar ©   (2008-08-15 19:35) [42]

Удалено модератором


 
oxffff ©   (2008-08-15 21:18) [43]


> MBo ©   (15.08.08 16:06) [36]


Вот блог Barry Kelly  
http://barrkel.blogspot.com/

его пояснения здесь.

http://www.reddit.com/r/programming/comments/6tp3i/pascal_gets_closures_before_java_why_hasnt_the/


 
McSimm ©   (2008-08-15 21:26) [44]

why hasn"t the world ended?
Название полностью отражает мои впечатления от этой информации. :)
Моя первая мысль была "и это паскаль???".


 
ketmar ©   (2008-08-15 21:30) [45]

>[44] McSimm © (2008-08-15 21:26:00)
нет. это Delphi. а Вирта после смерти собираются использовать ка вечный двигатель.

---
All Your Base Are Belong to Us


 
oxffff ©   (2008-08-15 21:46) [46]


> MBo ©   (15.08.08 10:44)  


Понимание можно приобрести

из http://dn.codegear.com/article/33336 синтаксис вполне заманчив.


> Example with multiple lambda expressions
> Assume that "customers" is a list/collection of customers,
>  here"s a C# 3 statement using 3 lambda expressions:
>
> NameOfOsloCustomersSortedByName = customers.Where(c => c.
> City == "Oslo").OrderBy(c => c.name).Select(c => c.Name)
>
> Notice the similarity to the following SQL query:
>
> select c.Name from customers c where c.City = "Oslo" order
> by c.Name


 
Игорь Шевченко ©   (2008-08-15 22:35) [47]

Куда катится мир - непонятно. Не будет универсального языка со всеми фичами, пример PL/1 это показал очень наглядно, зачем уродовать имеющееся - опять же, непонятно.


 
ketmar ©   (2008-08-15 23:48) [48]

>[47] Игорь Шевченко © (2008-08-15 22:35:00)
к тому же closures и lambdas ну никак не лезут в язык, компилируемый в «нативный» код. это фичи «динамических» языков. зачем их косокриво тащить в Delphi — не ясно. всё равно получится костыль и обрубок.

---
All Your Base Are Belong to Us


 
McSimm ©   (2008-08-16 00:07) [49]


> ketmar ©   (15.08.08 23:48) [48]

Делфи перестал быть паскалем намного раньше. Как мне кажется, со вводом динамических строк. Привыкли.


 
ketmar ©   (2008-08-16 00:16) [50]

>[49] McSimm © (2008-08-16 00:07:00)
ну, скажем, против строк и классов я ничего не имею. это нормально. но то, что сейчас с ним творят…

---
All Your Base Are Belong to Us


 
oxffff ©   (2008-08-16 13:46) [51]

А что такое с ним творят?

Вот еще свежие новости.

Multicast events using generics
http://blogs.codegear.com/abauer/2008/08/15/38865


 
Тимохов   (2008-08-17 01:30) [52]

Если позволите пару^7 слов.

Сложно все как-то становиться... Видимо, Дельфи - это для фанатов. Изучать это все сложно будет.

Может я выступлю несколько супротив духа кодгира, но все же... А может это вообще офтопик. Но я уверен, что частично выражу мнение сообщенства разработчиков (ну тем, кто деньги этим зарабатывает, а не учится).

Вот я опытный разработчик. И как любой профессионал я хочу иметь область знания, в которой я мастер. Зачастую самой прибыльной областью знания является прикладная наука - т.е. то, что мы пытаемся запрограммировать в своей программе. Я в свое время сделал осознанный выбор в сторону прикладной науки: учет и финансы.

НО бывает так, что для связи прикладной науки с разработкой нужно быть в курсе низлежащей технологии. В данном случае - это среда разработки Дельфи. И вот все больше и больше времени нужно для того, чтобы быть в курсе Дельфи: что, где, почем. Текущий доработки языка точно не дадут ясности в вопросе...

Мой случай, конечно, частный, но я думаю, что быть в курсе нового неизвестного тебе языка всем будет сложно. Вырастет из этого что-то монстроподобное, вот увидите. И будут свои спецы в Дельфи, особенные, и дорогие есно... :)

Но, я как фанат Дельфи все же буду изучать. Лично мне интересно. Но дает ли это реальную ценность для разработчика? Если честно, не знаю: ИМХО (как профессионала) все должно быть просто и внятно.

-----

PS. Скажу честно, что лично Тибурона еще не видел - некуда ставить беты: нет свободной машины, а виртуалки стали виснуть у меня. Т.е. у меня нет пока возможности оценить качество Хелпа. Поэтому все мои суждения по блогам Кодгировских ребят.


 
Германн ©   (2008-08-17 01:36) [53]


> Тимохов   (17.08.08 01:30) [52]

+1
Не взирая на все очепятки.


 
turbouser ©   (2008-08-17 01:44) [54]


> будут свои спецы в Дельфи, особенные, и дорогие есно...
> :)

Ога :) Я за неделю 40 штук срубил недавно :)))


 
Тимохов   (2008-08-17 01:58) [55]


> Германн ©   (17.08.08 01:36) [53]
> > Тимохов   (17.08.08 01:30) [52]+1Не взирая на все очепятки.


Это видимо акт общественного признания?


> turbouser ©   (17.08.08 01:44) [54]
> > будут свои спецы в Дельфи, особенные, и дорогие есно..
> . > :)Ога :) Я за неделю 40 штук срубил недавно :)))


Учи анонимные методы, женерики и миграцию в уникод - ты заработаешь намного больше. Ты думаешь я шучу? Нет. Тебе просто нужно качественно продать свои знания. ИМХО.


 
turbouser ©   (2008-08-17 02:02) [56]


> Тимохов   (17.08.08 01:58) [55]


> Учи

Тык вот счас на вольных хлебах:)  шарпы с васиками учить не хотца. предлагают... ну на... Хотя скорее всего придется :(


 
VirEx ©   (2008-08-17 07:01) [57]

Удалено модератором


 
DevilDevil ©   (2008-08-17 10:06) [58]

если хочешь зарабатывать деньги учи C#. Можно С++, в нём тоже хорошо ребята зарабатывают. Если Delphi... то Oracle!!!

это слегка утрированно, но только слегка.

Теперь о сложности Delphi. Сложнее ли Delphi по сравнению с С++ ? Врядли. Кто-то говорит "VCL огромна"... а кто-нибудь пробовал изучать Qt? Ну или хотя бы MFC. Там тоже немало!

Для того чтобы программировать на языке/в среде, совсем не обязательно знать его весь. Скажу больше, никто не знает Delphi полностью. Что там новые возможности... мы и самых старых не знаем! Знаешь, ты, к примеру, что такое object-ы ? А знаешь, что они поддерживают конструкторы, деструкторы и виртуальные методы ? Лично я, к примеру, про "виртуальность" узнал буквально на днях, хотя Delphi изучаю 8.5 лет.

>Сложно все как-то становиться... Видимо,
>Дельфи - это для фанатов. Изучать это все сложно будет.


повторюсь: если нет необходимости юзать - не юзай; можно даже не изучать.

Моё имхо, что Delphi как язык давно пора развивать, благо есть куда расти. Всем нововведениям я рад. Ещё бы классы на стеке, автоконструкторы/автодеструкторы, макросы, <boolean>?<value1>:<value2> и возможность мегасуперпупер оптимизированной компиляции на пару суток.


 
Узурап Мамуматкулович   (2008-08-17 13:28) [59]


> DevilDevil ©   (17.08.08 10:06) [58]


поржал, спасибо
а про Qt просто шедевр


 
DevilDevil ©   (2008-08-17 13:30) [60]

> Узурап Мамуматкулович   (17.08.08 13:28) [59]

очень похоже на кетмара...


 
Узурап Мамуматкулович   (2008-08-17 14:06) [61]

но я не он.
но в отношении тебя с ним солидарен.


 
Игорь Шевченко ©   (2008-08-17 14:14) [62]

DevilDevil ©   (17.08.08 10:06) [58]


> Моё имхо, что Delphi как язык давно пора развивать, благо
> есть куда расти. Всем нововведениям я рад. Ещё бы классы
> на стеке, автоконструкторы/автодеструкторы, макросы, <boolean>?
> <value1>:<value2>


То есть, у тебя появится больше тем для вопросов на форумах ?
"Спасибо, поржал" (с)


 
Узурап Мамуматкулович   (2008-08-17 14:38) [63]

и Фленов новую книгу напишет


 
@!!ex ©   (2008-08-17 15:12) [64]

> [58] DevilDevil ©   (17.08.08 10:06)

С общим смыслом соглашусь... Но боже... как это преподнесено....


> [52] Тимохов   (17.08.08 01:30)

Мне вот интересно, что есть "фанат" Delphi???
Это типа тот, кому плевать, что для данной задачи язык не подходит, но его все равно использует? ТОгда это не фанат, а идиот... Или я не правильно понял смысла слова "фанат"?


 
DevilDevil ©   (2008-08-17 15:45) [65]

> Узурап Мамуматкулович   (17.08.08 14:06) [61]
> Игорь Шевченко ©   (17.08.08 14:14) [62]
> @!!ex ©   (17.08.08 15:12) [64]


господа, а в чём, собственно, дело? Что за дешёвые реплики в мой адрес, я не понял?


 
Anatoly Podgoretsky ©   (2008-08-17 15:57) [66]

> DevilDevil  (17.08.2008 15:45:05)  [65]

На дорогие денег нет.


 
DevilDevil ©   (2008-08-17 16:07) [67]

что здесь может насмешить:

1) что VCL огромна, но Qt не меньше  ?
2) что всю Delphi не знает никто ?
3) что язык Delphi Language значительно слабее того же Си++ и ему надо развиваться ?

Что из произнесённого заставило нескольких людей "поржать" ? Что из произнесённого побудило на подколки ? Недогоняю.


 
DevilDevil ©   (2008-08-17 16:13) [68]

может, что DevilDevil про "виртуальность" object-ов недавно узнал ?

Честно говоря, я опасался за душевное здоровье пары пацанов и одного старичка ketmar-а. Сейчас душевное состояние некоторых меня уже пугает. Мысли о личном психологическом расстройстве тоже возникали... но отмелись достаточно быстро.


 
Узурап Мамуматкулович   (2008-08-17 16:18) [69]


> Честно говоря, я опасался за душевное здоровье пары пацанов
> и одного старичка ketmar-а. Сейчас душевное состояние некоторых
> меня уже пугает. Мысли о личном психологическом расстройстве
> тоже возникали... но отмелись достаточно быстро.


:-D
продолжай


 
DevilDevil ©   (2008-08-17 16:23) [70]

Удалено модератором
Примечание: Правила читаем и уважаем


 
jack128_   (2008-08-17 21:17) [71]


> 2) что всю Delphi не знает никто ?

к смысле как язык??  Не суди по себе ;-)   Кста пример с object"ами не актуален. Они оставлены для совместимости с паскале и борланд/котжир говорили, что их поддержку могут прикрыть в любой новой версии дельфи..

ЗЫ Пример с вирт методами у обжекта можешь накатать? А то даже интересно стало.


 
oxffff ©   (2008-08-17 21:20) [72]


> jack128_   (17.08.08 21:17) [71]


Не скромно. :)


 
jack128_   (2008-08-17 21:56) [73]


> Не скромно. :)

Скромность украшает лишь тех, кому больше нечем гордиться ;-)  
PS с виртуальными методами разобрался..


 
DevilDevil   (2008-08-17 22:00) [74]

> jack128_   (17.08.08 21:17) [71]
> к смысле как язык??  Не суди по себе ;-)


язык? нет конечно. Delphi Language не намного сложнее Object Pascal-я. По поводу "не суди по себе" вы, ребят, подзаколебали уже.

"Весь Delphi" - это язык, среда и VCL&RTL.

>Кста пример с object"ами не актуален.
неактуален с появлением TurboDelphi (или раньше?), когда в структурах появились методы и операторы. А в популярных Delphi 6-7 object - единственное средство сделать "структуру с методами".

> ЗЫ Пример с вирт методами у обжекта можешь накатать? А то
> даже интересно стало.

http://vtit.kuzstu.ru/books/shelf/162/doc/p2.html


 
Джо ©   (2008-08-17 22:25) [75]


> ЗЫ Пример с вирт методами у обжекта можешь накатать? А то
> даже интересно стало.

А чего бы им не быть-то? О_о


 
Узурап Мамуматкулович   (2008-08-17 23:02) [76]


> По поводу "не суди по себе" вы, ребят, подзаколебали уже.


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

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


 
jack128_   (2008-08-17 23:30) [77]


>
> А чего бы им не быть-то? О_о

просто я не смог сначало накатать примерчик.. оказалось, что переопределение вирт. метода в object"ах описывается словом virtual - как в C++, а не дельфийским override..


 
Игорь Шевченко ©   (2008-08-17 23:38) [78]

"Полезно взглянуть на два языка программирования - PL/1 и C. Язык PL/1 был
разработан корпорацией IBM в 60-ые годы, так как поддерживать одновременно FORTRAN и COBOL и слушать при этом ворчание ученых о том, что Algol лучше, чем FORTRAN и COBOL, вместе взятые, было невыносимо. Поэтому был создан комитет для создания нового языка, удовлетворяющего запросам всех программистов: PL/1.
Этот язык обладал некоторыми чертами языка FORTRAN, некоторыми особенностями языка COBOL и некоторыми свойствами языка Algol. Проект потерпел неудачу, потому что ему недоставало единой концепции. Проект представлял собой лишь набор свойств, конфликтующих друг с другом, к тому же язык PL/1 был слишком громоздким и неуклюжим, чтобы программы на нем можно было эффективно компилировать.

Теперь взглянем на язык С. Он был спроектирован всего одним человеком
(Деннисом Ритчи) для единственной цели (системного программирования). Успех его был колоссален, и это не в последнюю очередь объяснялось тем, что Ритчи знал, чего хотел и чего не хотел. В результате спустя десятилетия после своего появления этот язык все еще широко распространен. Наличе четкого представления о своих целях является решающим."

(с) Эндрю Таненбаум


 
Узурап Мамуматкулович   (2008-08-17 23:43) [79]


> Игорь Шевченко ©   (17.08.08 23:38) [78]


очень к месту
tnx


 
DevilDevil   (2008-08-18 01:08) [80]

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


и чем это высказывание кардинально отличается от моего??

Моя реплика про "VCL огромна" обусловлена рядом высказываний С++ -программистами, с коими я общаюсь достаточно часто. "VCL - огромная библиотека с уймой непонятно зачем написанного кода, хотя решить можно парой API-функций. Да и зачем учить сотни VCL-компонентов, когда суть всёравно сводится к знанию и владению WinAPI; и на том же MFC, в отличие от VCL, код получается быстрым и компактным". Почти каждый первый заядлый C++ -шник придерживается похожего мнения, вопрос "огромности VCL" место имеет. Холиварить на тем C++ vs Delphi и обсуждать заядлых Сипипистов, надеюсь, не будем.

А то что знаешь куте... что я могу сказать, молодец; хорошо так же, что разъяснил всем основополагающие особенности Qt и оценил юзабилити тамошнего "дезигнера" )) Низкий поклон

> развивать язык надо, но сначала надо доделать "недоделки".
>  юникод ждем-ждем, а хрен его.


хех, это смотря что считать недоделками. Я вот считаю, классы на стеке с автоконструкторами/автодеструкторами недоделками, а что до юникода - то лучше бы его вообще не было (но это лично моё мнение).

и среда нестабильная. потому мы до сих пор на семерке и сидим.
говорят, Turbo - очень стабильная среда (если отключить пару .Net-приблуд); в более новых версиях баг убрали.


 
Узурап Мамуматкулович   (2008-08-18 01:29) [81]


> DevilDevil   (18.08.08 01:08) [80]


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


 
DevilDevil   (2008-08-18 02:21) [82]

Удалено модератором


 
Loginov Dmitry ©   (2008-08-18 07:47) [83]

> говорят, Turbo - очень стабильная среда


а некоторые не говорят, а просто на нем работают. Стабильностью там и близко не пахло.


 
Loginov Dmitry ©   (2008-08-18 07:55) [84]

> VCL - огромная библиотека с уймой непонятно зачем написанного
> кода, хотя решить можно парой API-функций


конечно хорошо все вподряд обсерать, не представляя себе предмета разговора. Приходилось и с такими общаться. Пару раз видели на витрите, и уже складывается свое мнение, и начинают во всю спорить. Насчет пары API-функций конечно мимо (а кто их запрещает?), но само явление наблюдается.


 
Anatoly Podgoretsky ©   (2008-08-18 08:35) [85]

> DevilDevil  (18.08.2008 2:21:22)  [82]

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


 
Игорь Шевченко ©   (2008-08-18 09:47) [86]

Loginov Dmitry ©   (18.08.08 07:47) [83]


> > говорят, Turbo - очень стабильная среда
>
>
> а некоторые не говорят, а просто на нем работают. Стабильностью
> там и близко не пахло.


Я конечно извиняюсь, а ты руки выпрямлять не пробовал ?


 
jack128_   (2008-08-18 09:50) [87]


> Я конечно извиняюсь, а ты руки выпрямлять не пробовал ?

Игорь, когда среда выдает cpp"шные assert"ы - тут не пользователю нуно руки выпрямлять, а разработчикам среды/компилера..


 
Игорь Шевченко ©   (2008-08-18 10:03) [88]

jack128_   (18.08.08 09:50) [87]

Я совсем случайно полтора года на турбе...среда не выдает assert-ов...
Проекты большие, сторонние компоненты и эксперты установлены, assert-ов нету.
Я наверное что-то делаю не так.


 
Mystic ©   (2008-08-18 11:21) [89]


> почитал в wiki, и пока это closure для меня выглядит подобно
> вложенным функциям в Паскале, имеющим доступ к переменным
> внешней функции (и более глобальным), а кроме того, как
> следует из [28] - к личным параметрам данного closure (как
> поля объекта).


Не совсем так. Если, например, у нас есть нечто вроде


function Test(ArgValue: Integer): Pointer;
var
 Value: Integer;

function Add(X: Integer): Integer;
begin
 Result := X + Value;
end;

begin
 Value := ArgValue;
 Result := @Add;
end;


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

В случае closure все решается: переменная Value выделяется в динамической памяти,соответственно возвращаемое значение функции Test будет функция, которая добавляет к аргументу значение ArgValue. Другой вызов функции Test приведет к тому, что будет выделена в динамической памяти новая переменная Value, на которую будет ссылаться новый экземпляр функции Add. Получается нечто вроде такого:


function Test(ArgValue: Integer): Pointer;
type
 TAddFrame = record
   Value: Integer;
 end;

var
 Frame: ^TAddFrame;

function Add(Frame: TFunctionFrame; X: Integer): Integer;
begin
 Result := X + Frame.Value;
end;

begin
 New(Frame);
 Frame.Value := ArgValue;
 Result := CreateCaller(Frame, @Add);
end;


Здесь CreateCaller создает новую функцию, которая будет вызывать функцию Add с первым параметром Frame и значением аргумента X. Путано вышло...


 
DevilDevil ©   (2008-08-18 11:37) [90]

> Anatoly Podgoretsky ©   (18.08.08 08:35) [85]
> но знал бы как нас беспокоит твое здоровье.


не надо опасаться за моё здоровье - с ним всё хорошо.


 
Loginov Dmitry ©   (2008-08-18 11:42) [91]


> Я конечно извиняюсь, а ты руки выпрямлять не пробовал ?


Задолбал Игорь уже, чесное слово! Сколько хоть за это сейчас денег платят?


 
Игорь Шевченко ©   (2008-08-18 11:45) [92]

Loginov Dmitry ©   (18.08.08 11:42) [91]


>  Сколько хоть за это сейчас денег платят?


За выпрямление - честно, не знаю.


 
Loginov Dmitry ©   (2008-08-18 11:45) [93]


> Игорь, когда среда выдает cpp"шные assert"ы - тут не пользователю
> нуно руки выпрямлять, а разработчикам среды/компилера..


Было такое пару раз на Delphi 2007 :) Много что было. А как нарастил оперативку до 1 ГБ - почти все глюки исчезли.


 
oxffff ©   (2008-08-20 10:06) [94]

Итак ждем появление 25 августа.

http://www.delphi.org/2008/08/release-date-for-delphi-2009-announced/


 
oxffff ©   (2008-08-20 11:01) [95]

Delphi 2009 and C++Builder 2009 will be available on Aug. 25 with North American pricing beginning at $399 per license for Professional editions, $1,299 for Enterprise editions and $2,299 for Architect editions.


 
oxffff ©   (2008-08-21 07:58) [96]

http://barrkel.blogspot.com/2008/08/tiburon-fun-with-generics-and-anonymous.html


 
oxffff ©   (2008-08-21 07:58) [97]

http://barrkel.blogspot.com/2008/08/tiburon-fun-with-generics-and-anonymous.html



Страницы: 1 2 3 вся ветка

Текущий архив: 2008.10.12;
Скачать: CL | DM;

Наверх




Память: 0.76 MB
Время: 0.019 c
15-1219198234
Slider007
2008-08-20 06:10
2008.10.12
С днем рождения ! 20 августа 2008 среда


15-1219351890
TUser
2008-08-22 00:51
2008.10.12
Ширли-мырли


2-1220425933
Сергей
2008-09-03 11:12
2008.10.12
Как отключить выбор пункта по первым буквам в ComboBox?


15-1219573831
evger
2008-08-24 14:30
2008.10.12
помогите реализовать delphовую логику на C++


2-1218980426
demon
2008-08-17 17:40
2008.10.12
Помогите разобраться с простейшей программой на API