Re[11]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 15:54
Оценка: 2 (2)
Здравствуйте, VladD2, Вы писали:

VD> Нифига себе? А если возвратить делегат из фунции, что будет? Стэк-фрэйм ведь разрушится...


Переменные в кучу скопируются:

How do D closures work?

1) The compiler makes a distinction between a nested function that
'escapes' the scope, and one that does not. It uses a very simple, but
conservative, heuristic — did someone take the address of the function?
If yes, it assumes the function escapes.

2) The compiler logs all local variables that are referenced by any
nested function.

3) If any of those variables are referenced by an escaping nested
function, or a nested function that encloses an escaping function, then
upon function entry all the referenced variables are allocated on a
heap-allocated chunk of memory rather than on the stack. Any referenced
parameters are copied into that chunk. That chunk is linked into the
nested context frames rather than the stack frame.

4) Variables not referenced by nested functions are still allocated on
the stack.

Note you can see this at work by running obj2asm on the test code I posted.

It's not an optimal solution because the "does the function escape"
heuristic captures too many functions.



FR>>UB можно получить только если баловатся указателями на стековые переменные.


VD>Вот боюсь, что не таолько. В прочем это тоже не очень приятно. Я бы на их месте сделал как в Шарпе — разрешил бы использовать указатели только в небезопастном контексте.


Угу неплохо бы.
Но и так нормально.
Re[10]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 16:13
Оценка:
Здравствуйте, cl-user, Вы писали:

CU>Извини — мысль не уловил... Какая нафиг разница — на макрах он или нет, если вопрос в его функциональности?


А вопрос как раз не в его фунциональности, а в его влиянии на происходящее при переписывании кода для дямбд. Так как КЛОС == макрос, то и учитывать его не надо, так как КЛОС — это стандартный код на Лиспе.

Понятно?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 22.11.07 22:24
Оценка: -1
Здравствуйте, VladD2, Вы писали:

<skip/>

Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.
Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно

На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[19]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.07 10:27
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.


Откуда дровишки? Я пару месяцев назад разглядывал исходники Дишного фронтэнда. Они были целиком на С++.

__>Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно


Вот этом мне совершенно по фигу.

__>На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии


Скала и Немерле по многим пунктам объодят Ди на годы и это не мешает им бутстрипиться на себе.
Весь смысл бутстрипа в том, что ты компилируешь новую версию компилятора на своей старой версии. Следующую версию уже можно компилировать на новой. Проблемы возникают только если происходят ломающие изменения. Ломающие изменения же — это очень плохо по любому, так как перестают работать многие программы написанные на языке. Причем сам компилятор обычно их переживает, так как ломают те что строют, а значит они заранее меняют в компиляторе то что сломается.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Phobos теперь на dsource
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.11.07 10:45
Оценка: 4 (1)
Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org

Вот здесь: http://www.dsource.org/projects/phobos


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Phobos теперь на dsource
От: _nn_ www.nemerleweb.com
Дата: 26.11.07 21:57
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org


E>Вот здесь: http://www.dsource.org/projects/phobos


А как же Tango?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[20]: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 26.11.07 22:13
Оценка:
Здравствуйте, VladD2, Вы писали:

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


__>>Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.


VD>Откуда дровишки? Я пару месяцев назад разглядывал исходники Дишного фронтэнда. Они были целиком на С++.

Это я перепутал, имел ввиду Phobos.

__>>Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно


VD>Вот этом мне совершенно по фигу.

Кому как, а некоторым иногда нужен нэйтив.

__>>На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии


VD>Скала и Немерле по многим пунктам объодят Ди на годы и это не мешает им бутстрипиться на себе.

VD>Весь смысл бутстрипа в том, что ты компилируешь новую версию компилятора на своей старой версии. Следующую версию уже можно компилировать на новой. Проблемы возникают только если происходят ломающие изменения. Ломающие изменения же — это очень плохо по любому, так как перестают работать многие программы написанные на языке. Причем сам компилятор обычно их переживает, так как ломают те что строют, а значит они заранее меняют в компиляторе то что сломается.

Я не буду спорить насчет бутсрапа. Если это приводит к более быстрому развитию я только за.
В любом случае это решение автора языка. Остается надеятся, что вместе с макросами он и доделает бустрап
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Phobos теперь на dsource
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 27.11.07 08:16
Оценка:
Здравствуйте, _nn_, Вы писали:

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


E>>Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org


E>>Вот здесь: http://www.dsource.org/projects/phobos


__>А как же Tango?


А фиг его знает. Насколько я помню, после D Conference команда Tango обсуждала вопросы объединения Tango и Phobos для того, чтобы уйти от ситуации наличия двух "стандарных" библиотек. Но какого-то кардинального решения об отказе от какой из библиотек или об их слиянии достигнуто не было. Так что здесь вообще не понятно, что будет.

Есть еще проект Tangobos -- это реализация Phobos поверх Tango. Специально для тех проектов, который ориентированы на Tango, но вынуждены использовать что-то из Phobos-а.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.11.07 14:59
Оценка:
Здравствуйте, eao197, Вы писали:

E>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


Смешно, ей богу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 28.11.07 15:08
Оценка:
Здравствуйте, VladD2, Вы писали:

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


E>>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


VD>Смешно, ей богу.


Кто бы говорил.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Phobos теперь на dsource
От: FR  
Дата: 28.11.07 17:27
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org


E>Вот здесь: http://www.dsource.org/projects/phobos


Вышел D 2.008 и в основном как раз добавки — измения в фобосе.
Re[9]: Full closures in DMD 2.007
От: FR  
Дата: 28.11.07 17:43
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.


E>Так вот насколько я понял из объяснений Брайта, макросы D предназначаются для аналогичных целей. Мол, подключаешь макрос, пишешь:

E>
E>a = b + c + d;
E>

E>где a, b, c и d матрицы, а макрос это дело разворачивает в один цикл. Т.е. макросы будут служить тем же целям, что и expression templates в C++. Но это я так понял. Как оно будет на самом деле -- со временем увидим.


Мало ли он чего хочет, если они будут достаточно мощны их будут в первую очередь использовать для метапрограммирования, про текстовые миксины тоже говорили что они предназначены для реаализации DSL а не для метапрограммирования и открываем тот же фобос и что видим:

struct A
{
    int a;
    mixin(bitfields!(
        uint, "x",    2,
        int,  "y",    3,
        uint, "z",    2,
        bool, "flag", 1));
}


Re[9]: Full closures in DMD 2.007
От: FR  
Дата: 29.11.07 06:41
Оценка:
Здравствуйте, eao197, Вы писали:

E>В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.


Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают
В общем дело только за удобными библиотеками для метапрограммирования.
Re[2]: D1.0 и D2.0: const revisited :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 06:59
Оценка: 1 (1)
E>Затем, с подачи Андрея Алексендреску, в D начали добавлять поддержку константности, даже большую, чем в C++.

E>В отличии от макросов, константность широко обсуждалась в news-группах digitalmars.D и digitalmars.D.announce. Из этих обсуждений стало понятно, что в рамки ветки 1.0 константность ну никак не ляжет. Поэтому и произошло выделение ветви 2.0. Первая альфа-версия DMD 2.000 с поддержкой константности и была опубликована 18-го июня. Версия 1.0 будет существовать как "стабильная" версия, последующие релизы в которой будут всего лишь баг-фиксами.


E>Что же представляет из себя константность в D 2.0? Подробнее об этом можно прочитать на сайте языка D, вот здесь. Если же говорить в двух словах, то в язык добавлены новые модификаторы:

E>* final,...
E>* invariant,...
E>* const,...

По прошествии некоторого времени, в DMD v.2.008 константность в D была несколько пересмотрена.
Подробности этого дела обсуждаются здесь. В трех предложениях Брайт описал изменения так:

1) no more final for variables
2) no more 'head const' or 'tail const', it's all just 'const'
3) ditto (2) for invariant


Отсутствие final делает ситуацию с константностью несколько проще. Хотя транзитивность invariant и const -- это очень сомнительное решение, имхо.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 07:09
Оценка: +2
Здравствуйте, FR, Вы писали:

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


E>>В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.


FR>Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают


В этом смысле D-шные mixin+ctfe очень похожи на метапрограммирование в Ruby. Хотя в Ruby, имхо, поприятнее.

Но тут есть мета-гуру метапрограммирования, которые вкладывают в этот термин гораздо больший смысл. И с их точки зрения это будет подобием метапрограммирования. Причем, они будут правы. Вещи типа bitfields, который ты привел в примере здесь
Автор: FR
Дата: 28.11.07
, имхо, такая же гадость, как Boost.Lambda в C++ -- вроде и пользоваться можно, но все какое-то страшненькое и убогонькое, и вовсе не лямбда в строгом смысле этого слова.

FR>В общем дело только за удобными библиотеками для метапрограммирования.


Касательно D, я думаю, что дело все-таки за:
— стабильным релизом D 2.0 и мараторием на добавление новых фич в язык в течении 2-3 последующих лет;
— объединением Phobos-а и Tango.

Пока D не будет готов к использованию в production пользы от его метапрограммирования или других интересных фишек ноль целых, ноль десятых.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Full closures in DMD 2.007
От: FR  
Дата: 29.11.07 07:30
Оценка:
Здравствуйте, eao197, Вы писали:


FR>>Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают


E>В этом смысле D-шные mixin+ctfe очень похожи на метапрограммирование в Ruby. Хотя в Ruby, имхо, поприятнее.


E>Но тут есть мета-гуру метапрограммирования, которые вкладывают в этот термин гораздо больший смысл. И с их точки зрения это будет подобием метапрограммирования. Причем, они будут правы. Вещи типа bitfields, который ты привел в примере здесь
Автор: FR
Дата: 28.11.07
, имхо, такая же гадость, как Boost.Lambda в C++ -- вроде и пользоваться можно, но все какое-то страшненькое и убогонькое, и вовсе не лямбда в строгом смысле этого слова.


С тем что страшненькое вполне согласен. С тем что убогое нет. С тем что гадость согласен наполовину
С C++ есть принципиальная разница, там метапрограмирование (здесь согласен с мета-гурами ) основано на побочных эффектах слишком сложных шаблонов, в D же вполне штатная возможность.
К тому же в отличии от C++ не нужно быть гуру чтобы нормально писать метапрограммы.

FR>>В общем дело только за удобными библиотеками для метапрограммирования.


E>Касательно D, я думаю, что дело все-таки за:

E>- стабильным релизом D 2.0 и мараторием на добавление новых фич в язык в течении 2-3 последующих лет;
E>- объединением Phobos-а и Tango.

E>Пока D не будет готов к использованию в production пользы от его метапрограммирования или других интересных фишек ноль целых, ноль десятых.


С этим согласен.
Re[11]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.07 12:21
Оценка:
Здравствуйте, eao197, Вы писали:

E>>>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


VD>>Смешно, ей богу.


E>Кто бы говорил.


Я, а что?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 12:26
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>>>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


VD>>>Смешно, ей богу.


E>>Кто бы говорил.


VD>Я, а что?


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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Full closures in DMD 2.007
От: FR  
Дата: 29.11.07 12:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я, а что?


Я вот вообще не понимаю почему ты придаешь такое значение этому вопросу. В общем то практически для любого языка можно написать такой компилятор.
Re[3]: D1.0 и D2.0: const revisited :)
От: FR  
Дата: 29.11.07 13:21
Оценка:
Здравствуйте, eao197, Вы писали:

E>Отсутствие final делает ситуацию с константностью несколько проще. Хотя транзитивность invariant и const -- это очень сомнительное решение, имхо.


Не понял final для переменных совсем уберут?
Сейчас в 2.008 без проблем проходит final x = 0;

Кстати тот же фобос все еще нужно много доводить, константность ладно, но много функций которые можно было бы сделать compile time, таковыми не являются (особенно раздражает модуль string)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.