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

Вниз

Каковы перспективы Mono?   Найти похожие ветки 

 
iZEN ©   (2007-10-13 22:16) [40]


> Petr V. Abramov ©   (13.10.07 15:40) [27]
>
> > Kostafey ©   (13.10.07 15:33) [25]
> по перейти на java - признать монополию sun :))

Java — OpenSource, причём по GPLv2. На слуху разработчиков прежде всего группа Apache Foundation, 95% проектов которой написаны на Java.


 
tesseract ©   (2007-10-13 22:23) [41]


> Один читает вслух другому. Другой рисует диаграмму. Третий
> по диаграмме пишет библиотеку. Так создаётся Mono 3. :)))


Несколько не так - кому-то понадобилось то-то и то-то, он это сделал и выложил. Mono - это продукт заклятой дружбы novell и sun - ну они друг друга 30 лет не любят, ну что с них взять ? А тут ещё такой подарок от ibm как пиарнутый Linux. Кстати SLED с Solaris  - почти единичный нескрещиваемый случай. На остальных дистрах совместиться можно :-)


 
Petr V. Abramov ©   (2007-10-14 03:36) [42]

> iZEN ©   (13.10.07 22:16) [40]
> Java — OpenSource, причём по GPLv2.
и чего?
mono - тоже open.
a .Net - не open, а при определенных условиях - тоже хорошо. А windows - так совсем не open, и ничего, работает, и покупают даже. А перестанут покупать - так и волнуюсь за mono, которое open. А даже и не open, вопрос приемлемости цены

>  На слуху разработчиков прежде всего группа Apache Foundation
от этого далек, сказать не могу ничего, кроме того, что краем уха слышал, зачем вообще  Apache

но так вот получилось (может, злая судьба) - не видел я приложений для end-user, на которые нельзя без слез взглянуть, какие бы именитые компании их ни выпускали и как бы я ни относился к другим продуктам этих компаний. Может, потому что "java для индусов"((с) кто-то отседа)?


 
Kostafey ©   (2007-10-14 14:59) [43]

> [42] Petr V. Abramov ©   (14.10.07 03:36)
> Может, потому что "java для индусов"((с) кто-то отседа)?

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


 
oxffff ©   (2007-10-14 16:52) [44]


> Я кстати, сейчас занимаюсь реализаций yield на delphi.
> Правда без ASM не обойтись. :)


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

пример использования.

var i:integer;
   s:string;
begin
s:="1111";
s:=s+"111122222";
for i:= 1 to 20 do Yield(i);
showmessage(s);
Yield(30);
for i:= 80 to 300 do Yield(i);
showmessage(s);

Правда у этого  yield есть незначительная особенность надо до-yield-ить до конца, только тогда локальные параметры финализируется.
В .NET проще.
Хотя если codegear сделает это на уровне компилятора, тогда это ограничение можно снять.


 
oxffff ©   (2007-10-14 20:29) [45]


> oxffff ©   (14.10.07 16:52) [44]
>
> > Я кстати, сейчас занимаюсь реализаций yield на delphi.
>
> > Правда без ASM не обойтись. :)
>
>
> Сделал, даже с возможностью использования локальных параметров.
>


Добавил динамическую подстройку EBP при смене расположения локальных параметров после каждого yield


 
atruhin ©   (2007-10-14 20:49) [46]

> [45] oxffff ©   (14.10.07 20:29)

Ну дак показал бы код народу.


 
oxffff ©   (2007-10-14 20:57) [47]


> atruhin ©   (14.10.07 20:49) [46]
> > [45] oxffff ©   (14.10.07 20:29)
>
> Ну дак показал бы код народу.


Я не думаю, что тебе от этого станет легче.
Признаю, что можно оптимизировать.
например заменить movsb на movsd.

function TYieldObject.MoveNext: boolean;
begin
IsYield:=false;
asm
push ebp;
push ecx;
push edx;
push eax;
push ebx;
push edi;
push esi;
push offset @a1
xor edx,edx;
cmp eax.TYieldObject.BESP,edx;
jz @AfterEBPAdjust;
//Правка ebp
mov edx,esp;
sub edx,eax.TYieldObject.BESP;
add [eax.TYieldObject.REBP],edx
@AfterEBPAdjust:
mov eax.TYieldObject.BESP,esp;
//Есть ли локальные параметры
cmp eax.TYieldObject.StackFrameSize,0
jz @JumpIn;
//Восстановить локальные параметры и состояние регистров.
mov ecx,eax.TYieldObject.StackFrameSize;
sub esp,ecx;
mov edi,esp;
lea esi,eax.TYieldObject.StackFrame;
rep movsb;
@JumpIn:
mov ebx,eax.TYieldObject.REBX;
mov ecx,eax.TYieldObject.RECX;
mov edx,eax.TYieldObject.REDX;
mov esi,eax.TYieldObject.RESI;
mov edi,eax.TYieldObject.REDI;
mov ebp,eax.TYieldObject.REBP;
push [eax.TYieldObject.NextItemEntryPoint];
mov eax,eax.TYieldObject.REAX;
ret;
@a1:;
pop esi;
pop edi;
pop ebx;
pop eax;
pop edx;
pop ecx;
pop ebp;
end;
result:=IsYield;
end;

procedure TYieldObject.Yield(i: TYieldItemType);
begin
asm
mov eax.TYieldObject.REBP,ebp;
mov eax.TYieldObject.REAX,eax;
mov eax.TYieldObject.REBX,ebx;
mov eax.TYieldObject.RECX,ecx;
mov eax.TYieldObject.REDX,edx;
mov eax.TYieldObject.RESI,ESI;
mov eax.TYieldObject.REDI,EDI;
pop ecx;
mov eax.TYieldObject.NextItemEntryPoint,ecx;
mov ecx,eax.TYieldObject.BESP;
sub ecx,esp;
mov eax.TYieldObject.StackFrameSize,ecx;
jz @AfterSaveStack;
push edi;
push esi;
lea esi,[esp+8];
lea edi,[eax.TYieldObject.StackFrame];
rep movsb;
pop esi;
pop edi;
mov esp,eax.TYieldObject.BESP;
@AfterSaveStack:
mov eax.TYieldObject.IsYield,1;
end;
Item:=i;
end;


 
oxffff ©   (2007-10-14 21:02) [48]


> atruhin ©   (14.10.07 20:49) [46]
> > [45] oxffff ©   (14.10.07 20:29)
>
> Ну дак показал бы код народу.


Никаких пока комментариев давать не буду.
Но такая конструкция работает.

var i:integer;
   s:string;
begin
s:="1111";
Yield(i);
s:=s+"111122222";
showmessage(s);
Yield(i);

for i:= 1 to 20 do Yield(i);
showmessage(s);
Yield(30);
for i:= 80 to 300 do Yield(i);
showmessage(s);
end;


 
oxffff ©   (2007-10-14 21:03) [49]


> oxffff ©   (14.10.07 21:02) [48]


Естественно локальные переменные нормально финализируются.


 
oxffff ©   (2007-10-14 21:41) [50]


> oxffff ©   (14.10.07 21:03) [49]
>
> > oxffff ©   (14.10.07 21:02) [48]
>
>
> Естественно локальные переменные нормально финализируются.
>


Их число тоже не ограничено(локальных переменных) и также не требует модификации ASM кода.


 
KSergey ©   (2007-10-15 08:47) [51]

> oxffff ©   (13.10.07 19:50) [36]
> Я кстати, сейчас занимаюсь реализаций yield на delphi.

Прошу прощения, а массив динамический вернуть - не то же самое будет по сути?


 
oxffff ©   (2007-10-15 12:13) [52]


> Прошу прощения, а массив динамический вернуть - не то же
> самое будет по сути?


По сути не тоже самое.
Для этого вам нужно почитать про С# yield.

Упрощенный пример. Самое главное посмотри на последовательность вывода сообщения.

  public static IEnumerable Power(int number, int exponent)
   {
      yield return 1;
      Console.Write("We are here ", i);
      yield return 2;
     Console.Write("We are here Again", i);
      yield return 3;
  }

   static void Main()
   {
       // Display powers of 2 up to the exponent 8:
       foreach (int i in Power(2, 8))
       {
           Console.Write("{0} ", i);
       }
   }

На экране будет следующая последовательность
1                         <- Это выводиться из Main
We are here         <- Это выводиться из Power!!!!!!!!
2                         <- Это выводиться из Main
We are here Again <- Это выводиться из Power!!!!!!!!
3                          <- Это выводиться из Main


 
tesseract ©   (2007-10-15 14:30) [53]


> По сути не тоже самое. Для этого вам нужно почитать про
> С# yield.


По сути может и не то. Но вот сильного практического смысла не вижу.


 
KSergey ©   (2007-10-15 16:18) [54]

> oxffff ©   (15.10.07 12:13) [52]
> Упрощенный пример.

Понял, спасибо.
Ну, раз сделали - значит каким-то индусам оно полезно...


 
pasha_golub ©   (2007-10-15 16:24) [55]


> tesseract ©   (15.10.07 14:30) [53]

Поддерживаю


 
oxffff ©   (2007-10-15 17:44) [56]


> KSergey ©   (15.10.07 16:18) [54]
> > oxffff ©   (15.10.07 12:13) [52]
> > Упрощенный пример.
>
> Понял, спасибо.
> Ну, раз сделали - значит каким-то индусам оно полезно...
>


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


 
tesseract ©   (2007-10-15 18:08) [57]


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


Переведи плиз. Я тут понял, что-то с полиморфными функциями, но вот что не совсем доходит.


 
oxffff ©   (2007-10-15 18:21) [58]


> Я тут понял, что-то с полиморфными функциями, но вот что
> не совсем доходит.


Посмотрите oxffff ©   (15.10.07 12:13) [52].
Последовательность вывода на экран даст тебе понимание.

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


 
oxffff ©   (2007-10-15 18:24) [59]


> Если словами то Yield - способ передачи очередного значения
> Enumerator"a во внешнюю функцию, без "выхода из функции
> которая формирует значения".


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


 
jack128 ©   (2007-10-15 19:46) [60]


> По сути может и не то. Но вот сильного практического смысла
> не вижу.

ну а допустим в серверном курсоре в ado - видешь практический смысл??  Так же хрень...


 
jack128 ©   (2007-10-15 19:46) [61]


>   Та же хрень...


 
oxffff ©   (2007-10-15 19:52) [62]


> jack128 ©   (15.10.07 19:46) [61]
>
> >   Та же хрень...


Ну если ты не видешь смысл, это только значит что ты не видешь


 
oxffff ©   (2007-10-15 20:02) [63]

Чтобы особо непонятливые поняли, предлагаю вам
особо не понятливым реализовать пример на обычных средствах.
Только с одним условием.
Все элементы формируются по запросу.
А не сначала формируются, а потом выводятся.
Чисто из любопытства сравним ваш код, и мой код.

procedure TYieldObject.YieldUseProc;
var i,g:integer;
   number,exponent,counter,Res:integer;
begin
for i := 1 to 10 do Yield(i);
Yield(11);
Yield(24);
for i := 1 to 10 do Yield(trunc(sin(i)));
Yield(15);
g:=1;
for i := 1 to 10 do
   begin
   g:=trunc(sin(i));
   Yield(trunc(g*cos(i*2)));
   end;
Yield(g+10);
number:=2;
exponent:=8;
counter:= 1;
Res:=1;
while counter<exponent do
begin
Res:=Res*number;
Yield(Res);
inc(counter);
end;
end;


 
tesseract ©   (2007-10-15 21:43) [64]


> особо не понятливым реализовать пример на обычных средствах.


Все равно не понимаю, чем абстрактные классы и Variant хуже. С учётом того, что перестраивать код проще.



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

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

Наверх




Память: 0.61 MB
Время: 0.019 c
15-1192614681
исследователь
2007-10-17 13:51
2007.11.18
проблема с событием onSubmit


15-1192485282
Tirael
2007-10-16 01:54
2007.11.18
по мотивам соседней ветки...


11-1177086234
vampir_infernal
2007-04-20 20:23
2007.11.18
GRush + D2005


15-1192218426
Дженкинс
2007-10-12 23:47
2007.11.18
У кого-нибудь есть эл. книга


6-1174070078
Gubar
2007-03-16 21:34
2007.11.18
Помогите с авторизацией на сайте