Форум: "Прочее";
Текущий архив: 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:2771Nick 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