Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Вниз

Prism - это Delphi .Net для VS   Найти похожие ветки 

 
oxffff ©   (2008-10-06 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 ©   (2008-10-06 23:02) [1]

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


 
oxffff ©   (2008-10-06 23:02) [2]


> oxffff ©   (06.10.08 22:58)  


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

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


 
axis_of_evil ©   (2008-10-06 23:51) [3]


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

Active Oberon, в котором это было реализовано еще лет 6 назад, продолжает стоять в тени ..


 
Alkid   (2008-10-07 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 ©   (2008-10-07 08:38) [5]


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

это и расстраивает


 
oxffff ©   (2008-10-07 08:42) [6]

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


 
Григорьев Антон ©   (2008-10-07 09:02) [7]


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

А в Модуле-2 это реализовано ещё 30 лет назад, в Аде - 28 лет назад... Кстати, сам Вирт при создании Оберона решил, что многопоточность должна всё-таки поддерживаться библиотеками, а не языком, и не стал переносить в него эти возможности Модулы-2.


 
Alkid   (2008-10-07 16:10) [8]


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

Ой, да ладно. Это всё технологии, а они приходящи.


 
Kerk ©   (2008-10-07 16:11) [9]

А можно пример языковой конструкции для поддержки многопоточности? Почему оно лучше поддержки с помощью библиотек?


 
Григорьев Антон ©   (2008-10-07 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 можно вызывать, не заботясь больше ни о какой синхронизации.


 
axis_of_evil ©   (2008-10-07 22:20) [11]


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


MODULE Buffers;

CONST
 BufLen = 256;
 
TYPE
 (* Buffer- First-in first-out buffer *)

 Buffer* = OBJECT
   VAR
     data: ARRAY BufLen OF INTEGER;
     in, out: LONGINT;
     
   (* Put - insert element into the buffer *)
   
   PROCEDURE Put* (i: INTEGER);
   BEGIN {EXCLUSIVE}
     AWAIT ((in + 1) MOD BufLen # out);  (*AWAIT ~full *)
     data[in] := i;
     in := (in + 1) MOD BufLen
   END Put;
   
   (* Get - get element from the buffer *)
   
   PROCEDURE Get* (VAR i: INTEGER);
   BEGIN {EXCLUSIVE}
     AWAIT (in # out);  (*AWAIT ~empty *)
     i := data[out];
     out := (out + 1) MOD BufLen
   END Get;
   
   PROCEDURE & Init;
   BEGIN
     in := 0; out := 0;
   END Init;
 
 END Buffer;

END Buffers.

http://bluebottle.ethz.ch/languagereport/node8.html


 
oxffff ©   (2008-10-08 09:28) [12]


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


Честно говоря понятия не имею, что в их понимании конструкции поддержки многопоточности. Например в СIL нет инструкции для поддержики атомарного доступа к объекту, однако каждый объект .NET "расширен в реализации Microsoft" для  поддержки индекса в таблице объектов синхронизации и есть соответствующие функции в библиотеки.
Поэтому поддержка осуществляется библиотекой и внутренним расширением состояния объекта от Microsoft.  

Честно говоря примеры выше, меня вообще не впечатлили. В этих примерах вообще нет многозадачности. Это из разряда многозадачности Win 3.11.
Чего можно добиться с помощью CreateFiber/SwitchToFiber.
Думаю, что Хейлберг думает о чем то другом, о чем мне не известно. :)



Ведь по сути нично не мешает нам например использовать анонимный метод в качестве


 
clickmaker ©   (2008-10-08 13:13) [13]

> А можно пример языковой конструкции для поддержки многопоточности?
> Почему оно лучше поддержки с помощью библиотек?

lock { }
только непонятно, причем тут "В С# 4.0 вроде как добавят"


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


> clickmaker ©   (08.10.08 13:13) [13]


Из его Q/A от октября 2008.

What functionality do you hope to add to C# in the future versions?

There are many. I have a huge laundry list, or our team does, of features that people have requested over the years. If I had to name the three big trends that are going on in the industry that we take an interest in and get inspiration from, I would say the first is a move toward more declarative styles of programming, and you can sort of see LINQ as an example of that. All the talk we have about domain-specific languages, that"s one form of declarative programming, and functional programming is another style of declarative programming. I think those are going to be quite important going forward and are certainly areas that we will invest in, in C#.

Dynamic programming is seeing a big resurgence these days, if you look at phenomena like Ruby and Ruby on Rails, these are all of a sudden very popular, and there are certain things you can do with dynamic programming languages that it would be great to also have in more classical languages like C#. So that"s something we"re also looking at.

Lastly, I would say that concurrency is the big thing that you can"t ignore these days because the mechanics of Moore"s law are such that it is no longer feasible to build more powerful processors. We can"t make them faster anymore because we can"t get rid of the heat, and so now all the acreage on the chips is being used to make more processors and all of a sudden it"s almost impossible to get a machine that doesn"t have multiple CPUs.

Right now, you might have two cores, but it"s only a matter of years before you have four or eight or more than that, even in a standard desktop machine. In order for us to take advantage of that, we need much better programming models for concurrency. That"s a tough problem, it"s a problem that doesn"t just face us, but the entire industry and lots of people are thinking about it, and we certainly are amongst those.

....



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

Форум: "Прочее";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
15-1223633607
Kerk
2008-10-10 14:13
2008.12.14
Есть работа


15-1223518108
Slider007
2008-10-09 06:08
2008.12.14
С днем рождения ! 9 октября 2008 четверг


4-1202219059
Olegz77
2008-02-05 16:44
2008.12.14
Получение изображения рабочего стола


2-1225800533
newbie
2008-11-04 15:08
2008.12.14
таймер


15-1223319483
oxffff
2008-10-06 22:58
2008.12.14
Prism - это Delphi .Net для VS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский