Следим за D
От: FR  
Дата: 21.04.09 03:58
Оценка: 4 (2)
Так как предыдущая тема, по мнению модераторов слишком разрослась, продолжим здесь.
Вышло новое обновление http://www.digitalmars.com/d/2.0/changelog.html#new2_029 очень много изменений в основном в библиотеках. Больше всего радует станадартный range который давно бы пора ввести и в C++ STL.
Re: Следим за D
От: FR  
Дата: 12.05.09 16:07
Оценка:
Тут http://www.boostcon.com/site-media/var/sphene/sphwiki/attachment/2009/05/08/iterators-must-go.pdf Александреску ругает STL'ные итераторы ну и заодно хвалит D'шные range.

Вообще range довольно мощная штука и по выразительности и по возможностям уже близко к питоновским итераторам — генераторам и местами больше похоже на Хаскель чем на с++

// a[0] = 1, a[1] = 1, and compute a[n+1] = a[n-1] + a[n]
auto fib = recurrence!("a[n-1] + a[n-2]")(1, 1);
// print the first 10 Fibonacci numbers
foreach (e; take(10, fib)) { writeln(e); }
// print the first 10 factorials
foreach (e; take(10, recurrence!("a[n-1] * n")(1))) { writeln(e); }


Во всяком случае STL'ным итераторам и алгоритмам такое комбинирование в стиле
функциональщины (уже почти все аналоги основных ФВП есть) и не снится.
Re[2]: Следим за D
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 12.05.09 17:29
Оценка: +1 -2
Здравствуйте, FR, Вы писали:

FR>Во всяком случае STL'ным итераторам и алгоритмам такое комбинирование в стиле

FR>функциональщины (уже почти все аналоги основных ФВП есть) и не снится.

Да ладно, STL-ю уже скоро двадцать лет исполнится (если мне не изменяет склероз, Степанов начал работать над его идеями еще в конце 80-х, но для Ada). Не было бы никаких range, если бы не было пятнадцати лет широчайшего использования STL-ных итераторов.

FR>
FR>// print the first 10 factorials
FR>foreach (e; take(10, recurrence!("a[n-1] * n")(1))) { writeln(e); }
FR>


Имхо, всю красоту идеи убивает то, что даже в супер-пупер-продвинутом D 2.0 тела лябда-функций приходится записывать в виде строк. Гораздо симпатичнее и логичнее выглядела бы запись:
// print the first 10 factorials
foreach (e; take(10, recurrence!(a[n-1] * n)(1))) { writeln(e); }


Но для этого, вероятно, нужно будет D 3.0 ждать, с синтаксическими макросами.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Следим за D
От: FR  
Дата: 12.05.09 17:47
Оценка: +2
Здравствуйте, eao197, Вы писали:

E>Да ладно, STL-ю уже скоро двадцать лет исполнится (если мне не изменяет склероз, Степанов начал работать над его идеями еще в конце 80-х, но для Ada). Не было бы никаких range, если бы не было пятнадцати лет широчайшего использования STL-ных итераторов.


Степанов конечно молодец, но все-равно почетный велосепедист, если даже не смотреть на лисп и функциональщину, то тот же CLU http://en.wikipedia.org/wiki/CLU_programming_language со своими итераторами, которые гораздо ближе D'шным range был уже в 74.


E>Имхо, всю красоту идеи убивает то, что даже в супер-пупер-продвинутом D 2.0 тела лябда-функций приходится записывать в виде строк. Гораздо симпатичнее и логичнее выглядела бы запись:

E>
E>// print the first 10 factorials
E>foreach (e; take(10, recurrence!(a[n-1] * n)(1))) { writeln(e); }
E>


Угу.

E>Но для этого, вероятно, нужно будет D 3.0 ждать, с синтаксическими макросами.


Re: DMD 2.030: Migrating to shared
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 12.05.09 19:41
Оценка: +3
А вот это уже совсем интересно: Migrate-to-shared. Начиная с версии 2.030 глобальные и статические переменные по умолчанию будут размещаться как TLS переменные (т.е. с использованием thread local storage). Если нужно объявить "общепринятую" разделяемую глобальную переменную, то должен использоваться модификатор shared:
shared int flag;


Т.о. в языке D сделан еще один шаг к тому, чтобы сделать язык максимально multi-thread/multi-core friendly.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Следим за D
От: FR  
Дата: 13.05.09 10:30
Оценка:
Здравствуйте, eao197, Вы писали:

E>Имхо, всю красоту идеи убивает то, что даже в супер-пупер-продвинутом D 2.0 тела лябда-функций приходится записывать в виде строк. Гораздо симпатичнее и логичнее выглядела бы запись:

E>
E>// print the first 10 factorials
E>foreach (e; take(10, recurrence!(a[n-1] * n)(1))) { writeln(e); }
E>


Кстати в шаблонах стали выводится типы для аргументов лямбд, то есть вместо
foreach(e; take(10, recurrence!("a[n - 2] + a[n - 1] ")(1, 1))) {writeln(e);}


Можно написать:
foreach(e; take(10, recurrence!((a, n){return a[n - 2] + a[n - 1];})(1, 1))) {writeln(e);}
Re[2]: DMD 2.030: Migrating to shared
От: 0xDEADBEEF  
Дата: 13.05.09 12:36
Оценка:
Здравствуйте, eao197, Вы писали:

E>Т.о. в языке D сделан еще один шаг к тому, чтобы сделать язык максимально multi-thread/multi-core friendly.

Не знаю как на юнихе, а на винде, статически обьявленные TLS-переменные не работают в .DLL-ях.
Интересно, как Уолтер и компания думают с этим бороться?
__________
16.There is no cause so right that one cannot find a fool following it.
Re[3]: Следим за D
От: z00n  
Дата: 14.05.09 03:25
Оценка: 5 (1)
Здравствуйте, eao197, Вы писали:

E>Да ладно, STL-ю уже скоро двадцать лет исполнится (если мне не изменяет склероз, Степанов начал работать над его идеями еще в конце 80-х, но для Ada). Не было бы никаких range, если бы не было пятнадцати лет широчайшего использования STL-ных итераторов.


Вообщето первый пробраз STL Степанов написал для Scheme(!) в 86-ом:
http://www.stepanovpapers.com/schemenotes/notes.pdf
http://www.stepanovpapers.com/schemenotes/
Re: Следим за D
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 14.05.09 05:41
Оценка: +2 :)
Здравствуйте, FR, Вы писали:

FR>Так как предыдущая тема, по мнению модераторов слишком разрослась, продолжим здесь.

FR>Вышло новое обновление http://www.digitalmars.com/d/2.0/changelog.html#new2_029 очень много изменений в основном в библиотеках. Больше всего радует станадартный range который давно бы пора ввести и в C++ STL.

По большому счету, в вопросе слежения за D, есть только один интересны момент — когда им можно будет пользоваться в коммерческой разработке. Пока же это все дело дальше "поделия для саморазвития" не пошло. А жаль.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[4]: Следим за D
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 14.05.09 05:54
Оценка: -1
Здравствуйте, z00n, Вы писали:

E>>Да ладно, STL-ю уже скоро двадцать лет исполнится (если мне не изменяет склероз, Степанов начал работать над его идеями еще в конце 80-х, но для Ada). Не было бы никаких range, если бы не было пятнадцати лет широчайшего использования STL-ных итераторов.


Z>Вообщето первый пробраз STL Степанов написал для Scheme(!) в 86-ом:

Z>http://www.stepanovpapers.com/schemenotes/notes.pdf
Z>http://www.stepanovpapers.com/schemenotes/

Имхо, не корректно сравнивать подходы к обобщенному программированию в динамических и статически-типизированных языках. Так что то, что было сделано для Scheme и, затем, для Ada -- все-таки две очень большие разницы.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Следим за D
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 16.05.09 12:16
Оценка: 5 (1)
Из довольно радостных для меня новостей, в области развития D, стала поддержка языка любимым редактором — SlickEdit 2009
Re[3]: DMD 2.030: Migrating to shared
От: Tom Россия http://www.RSDN.ru
Дата: 25.05.09 07:21
Оценка:
E>>Т.о. в языке D сделан еще один шаг к тому, чтобы сделать язык максимально multi-thread/multi-core friendly.
DEA>Не знаю как на юнихе, а на винде, статически обьявленные TLS-переменные не работают в .DLL-ях.
Это как? И вообще причём тут DLL и TLS? Можно пояснить?
Народная мудрось
всем все никому ничего(с).
Re[4]: DMD 2.030: Migrating to shared
От: 0xDEADBEEF  
Дата: 29.05.09 16:30
Оценка:
Здравствуйте, Tom, Вы писали:

E>>>Т.о. в языке D сделан еще один шаг к тому, чтобы сделать язык максимально multi-thread/multi-core friendly.

DEA>>Не знаю как на юнихе, а на винде, статически обьявленные TLS-переменные не работают в .DLL-ях.

Tom>Это как?

А вот так. По умолчанию все не-автоматические переменные превращаются... превращаются переменные... в thread-local.
А чтобы глобальная переменная стала действительно глобальной, ей надо будет сказать "shared".

Tom>И вообще причём тут DLL и TLS?

Вот при этом (курим "Rules and Limitations for TLS" в MSDN):

If a DLL declares any nonlocal data or object as __declspec( thread ), it can cause a protection fault if dynamically loaded. After the DLL is loaded with LoadLibrary, it causes system failure whenever the code references the nonlocal __declspec( thread ) data. Because the global variable space for a thread is allocated at run time, the size of this space is based on a calculation of the requirements of the application plus the requirements of all the DLLs that are statically linked. When you use LoadLibrary, there is no way to extend this space to allow for the thread local variables declared with __declspec( thread ). Use the TLS APIs, such as TlsAlloc, in your DLL to allocate TLS if the DLL might be loaded with LoadLibrary.


...как следствие, динамически подгружаемые DLL-и на D писать станет ну оооочень трудно.
__________
16.There is no cause so right that one cannot find a fool following it.
Re[5]: DMD 2.030: Migrating to shared
От: SolVolkov  
Дата: 30.05.09 20:03
Оценка:
Здравствуйте, 0xDEADBEEF, Вы писали:

DEA>Здравствуйте, Tom, Вы писали:


E>>>>Т.о. в языке D сделан еще один шаг к тому, чтобы сделать язык максимально multi-thread/multi-core friendly.

DEA>>>Не знаю как на юнихе, а на винде, статически обьявленные TLS-переменные не работают в .DLL-ях.

Tom>>Это как?

DEA>А вот так. По умолчанию все не-автоматические переменные превращаются... превращаются переменные... в thread-local.
DEA>А чтобы глобальная переменная стала действительно глобальной, ей надо будет сказать "shared".

Tom>>И вообще причём тут DLL и TLS?

DEA>Вот при этом (курим "Rules and Limitations for TLS" в MSDN):
DEA>

DEA>If a DLL declares any nonlocal data or object as __declspec( thread ), it can cause a protection fault if dynamically loaded. After the DLL is loaded with LoadLibrary, it causes system failure whenever the code references the nonlocal __declspec( thread ) data. Because the global variable space for a thread is allocated at run time, the size of this space is based on a calculation of the requirements of the application plus the requirements of all the DLLs that are statically linked. When you use LoadLibrary, there is no way to extend this space to allow for the thread local variables declared with __declspec( thread ). Use the TLS APIs, such as TlsAlloc, in your DLL to allocate TLS if the DLL might be loaded with LoadLibrary.


DEA>...как следствие, динамически подгружаемые DLL-и на D писать станет ну оооочень трудно.


В своё время два дня на это убил
__declspec( thread ) действительно не работает в дллках, загруженных через LoadLibrary (впрочем, в Висте уже работает). Зато обычный АПИ прекрасно справляется (ТлсАллок и пр).
Re[5]: Следим за D
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.05.09 22:03
Оценка:
Здравствуйте, eao197, Вы писали:

Z>>Вообщето первый пробраз STL Степанов написал для Scheme(!) в 86-ом:

Z>>http://www.stepanovpapers.com/schemenotes/notes.pdf
Z>>http://www.stepanovpapers.com/schemenotes/

E>Имхо, не корректно сравнивать подходы к обобщенному программированию в динамических и статически-типизированных языках. Так что то, что было сделано для Scheme и, затем, для Ada -- все-таки две очень большие разницы.


Почитал бы сначала о чем работа. Хотя бы ее название прочел бы — "Notes on Higher Order Programming in Scheme".
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Следим за D
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 01.06.09 04:45
Оценка:
Здравствуйте, VladD2, Вы писали:

Z>>>Вообщето первый пробраз STL Степанов написал для Scheme(!) в 86-ом:

Z>>>http://www.stepanovpapers.com/schemenotes/notes.pdf
Z>>>http://www.stepanovpapers.com/schemenotes/

E>>Имхо, не корректно сравнивать подходы к обобщенному программированию в динамических и статически-типизированных языках. Так что то, что было сделано для Scheme и, затем, для Ada -- все-таки две очень большие разницы.


VD>Почитал бы сначала о чем работа. Хотя бы ее название прочел бы — "Notes on Higher Order Programming in Scheme".


Да где уж мне понять о чем работа. И как один итератор в работе о Scheme вдруг превратился в пару итераторов в работе об Ada. И как отсуствие описания контейнеров в работе о Scheme вдруг стало описанием целой серии родственных контейнеров в Ada. И как структуры-итераторы из Ada вдруг стали объектами-итераторами из C++. И почему "Higher Order Programming" вдруг стало главной идеей C++ STL, без учета тучи обобщенных STL-евских контейнеров (и операций над ними на основе пары итераторов, а не одного итератора из работы о Scheme).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Следим за D
От: Adriano  
Дата: 01.06.09 09:10
Оценка: 5 (1)
Здравствуйте, FR, Вы писали:

FR>Во всяком случае STL'ным итераторам и алгоритмам такое комбинирование в стиле

FR>функциональщины (уже почти все аналоги основных ФВП есть) и не снится.

Boost.RangeEx

и что бы не писать кучу скобочек:
filter1(transformer(filter2(any_adaptor(range))));

имеется оператор '|'
range | any_adaptor
| filter2
| transformer
| filter1;
Удобно.

На последней BoostСon Александреску выступал на эту тему тута. Плюсовики понимают, что концепция итераторов морально устарела и ни что не мешает, где нибудь сбоку, создать Range-based design.
Re[7]: Следим за D
От: z00n  
Дата: 01.06.09 09:17
Оценка:
Здравствуйте, eao197, Вы писали:

E>Да где уж мне понять о чем работа. И как один итератор в работе о Scheme вдруг превратился в пару итераторов в работе об Ada. И как отсуствие описания контейнеров в работе о Scheme вдруг стало описанием целой серии родственных контейнеров в Ada. И как структуры-итераторы из Ada вдруг стали объектами-итераторами из C++. И почему "Higher Order Programming" вдруг стало главной идеей C++ STL, без учета тучи обобщенных STL-евских контейнеров (и операций над ними на основе пары итераторов, а не одного итератора из работы о Scheme).


Как сказал бы Степанов:

I know what I want to say. I can say it in C++, I can say it in Ada, I can say it in Scheme. I adapt myself to the language, but the essence of what I am trying to say is language independent. So far, C++ is the best language I've discovered to say what I want to say.


Re[8]: Следим за D
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 01.06.09 09:34
Оценка:
Здравствуйте, z00n, Вы писали:

Z>

Z>I know what I want to say. I can say it in C++, I can say it in Ada, I can say it in Scheme. I adapt myself to the language, but the essence of what I am trying to say is language independent. So far, C++ is the best language I've discovered to say what I want to say.


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



SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Следим за D
От: z00n  
Дата: 01.06.09 10:34
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, z00n, Вы писали:


Z>>

Z>>I know what I want to say. I can say it in C++, I can say it in Ada, I can say it in Scheme. I adapt myself to the language, but the essence of what I am trying to say is language independent. So far, C++ is the best language I've discovered to say what I want to say.


E>Продолжая в том же духе, можно сказать, что раз Степанов свои работы писал на английском, то истоки его работ нужно искать в то время, когда он занимался изучением английского языка.


Нет, нельзя. Цитата из ответа на вопрос: "What about Generic Programming?" Вы легко найдете контекст.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.