Конференция "Прочее" » Prism - это Delphi .Net для VS
 
  • oxffff © (06.10.08 22:58) [0]
    Кто еще не читал новости?

    http://blog.marcocantu.com/blog/nick_announces_delphi_prism.html
    http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:2771

    Nick also mentioned that the language would be superior to C# in some areas (for that, we have to wait and see)...



    Хм.
    Oxygene, Nemerle, теперь Prism все утверждают что круче C#.
  • keymaster © (06.10.08 23:02) [1]
    Надо будет посмотреть, когда оно появится...
  • oxffff © (06.10.08 23:02) [2]

    > oxffff ©   (06.10.08 22:58)  


    Под .Net не программирую вовсе.
    Так интересуюсь больше устройством самой CLR и IL.

    В С# 4.0 вроде как добавят поддержку многопоточности в язык.
  • axis_of_evil © (06.10.08 23:51) [3]

    > В С# 4.0 вроде как добавят поддержку многопоточности в язык.

    Active Oberon, в котором это было реализовано еще лет 6 назад, продолжает стоять в тени ..
  • Alkid (07.10.08 08:35) [4]

    > oxffff ©   (06.10.08 23:02) [2]

    Скоро в C# появится ключевое слово "сварить-кофе-программисту-во-время-сборки-проекта" :)


    > axis_of_evil ©   (06.10.08 23:51) [3]

    Active Oberon не был никогда в мэйнстриме, так что что бы в него не добавили, он будет стоять в тени.
  • axis_of_evil © (07.10.08 08:38) [5]

    Alkid   (07.10.08 08:35) [4]
    > Active Oberon не был никогда в мэйнстриме, так что что бы
    > в него не добавили, он будет стоять в тени.

    это и расстраивает
  • oxffff © (07.10.08 08:42) [6]
    Думаю, что всегда будут создаваться и существовать языки больше академической направленности.
    Из которых позже(возможно даже значительно) будут дергаться идеи в коммерческие языки.
  • Григорьев Антон © (07.10.08 09:02) [7]

    > axis_of_evil ©   (06.10.08 23:51) [3]
    > Active Oberon, в котором это было реализовано еще лет 6
    > назад, продолжает стоять в тени ..

    А в Модуле-2 это реализовано ещё 30 лет назад, в Аде - 28 лет назад... Кстати, сам Вирт при создании Оберона решил, что многопоточность должна всё-таки поддерживаться библиотеками, а не языком, и не стал переносить в него эти возможности Модулы-2.
  • Alkid (07.10.08 16:10) [8]

    > axis_of_evil ©   (07.10.08 08:38) [5]
    > это и расстраивает

    Ой, да ладно. Это всё технологии, а они приходящи.
  • Kerk © (07.10.08 16:11) [9]
    А можно пример языковой конструкции для поддержки многопоточности? Почему оно лучше поддержки с помощью библиотек?
  • Григорьев Антон © (07.10.08 19:47) [10]

    > Kerk ©   (07.10.08 16:11) [9]

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

    Монитор - это разновидность класса, область видимости полей которого ограничена методами самого монитора, извне к ним обратиться напрямую невозможно. А для методов монитора автоматически генерируется код синхронизации доступа, причём программист может управлять этим с помощью очередей. Вот, например, код монитора для хранения данных в кольцевом буфере на языке Concurrent Pascal (язык разработал Brinch Hansen в 1975 г., пример взят из книги Роберта Себесты "Основные концепции языков программирования", 5-е издание)

    type DataBuf = monitor
     const BufSize = 100;
     var Buf: array [1..BufSize] of Integer;
         NextIn, NextOut: 1..BufSize;
         Filled: 0..BufSize;
         Sender_q, Receiver_q: queue;

     procedure entry Deposit(Item: Integer);
     begin
       if Filled = FufSize then
         Delay(Sender_q);
       Buf[NextIn] := Item;
       NextIn := (NextIn mod BufSize) + 1;
       Filled := Filled + 1;
       Continue(Receivr_q)
     end;

     procedure entry Fetch(var Item: Integer);
     begin
       if Filled = 0 then
         Delay(Receiver_q);
       Item := Buf[NextOut];
       NextOut := (NextOut mod BufSize) + 1;
       Filled := Filled - 1;
       Continue(Sender_q)
     end;

    begin
     Filled := 0;
     NextIn := 1;
     NextOut := 1;
    end;



    Последние begin..end - это код инициализации (конструктор) монитора.

    Здесь используется тип queue - стандартный тип Concurrent Pascal. Он организует очередь нитей. С очередью связаны две операции - Delay и Continue. Delay приостанавливает данную нить, помещая её в очередь. Continue извлекает нить из заданной очереди и продолжает её выполнение. Рассмотрим, например, как работает процедура монитора Fetch. Она проверяет, есть ли что-то в буфере, и если нет, приостанавливает текущую нить и помещает её в очередб Receiver_q. А процедура Deposit, помещающая данные в буфер, заканчивается вызовом Continue для этой очереди, т.е. если там стоят нити, ожидающие данных, первая из них будет продолжена после Deposit. Аналогично очередь Sender_q позволяет приостанавливать нить, кладующую данные, если буфер заполнен, и продолжать после того, как в нём освободится место. Из всех нитей методы Deposit и Fetch можно вызывать, не заботясь больше ни о какой синхронизации.
 
Конференция "Прочее" » Prism - это Delphi .Net для VS
Есть новые Нет новых   [134444   +21][b:0][p:0.001]