Здравствуйте, 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>Вот боюсь, что не таолько. В прочем это тоже не очень приятно. Я бы на их месте сделал как в Шарпе — разрешил бы использовать указатели только в небезопастном контексте.
Здравствуйте, cl-user, Вы писали:
CU>Извини — мысль не уловил... Какая нафиг разница — на макрах он или нет, если вопрос в его функциональности?
А вопрос как раз не в его фунциональности, а в его влиянии на происходящее при переписывании кода для дямбд. Так как КЛОС == макрос, то и учитывать его не надо, так как КЛОС — это стандартный код на Лиспе.
Понятно?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.
Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно
На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии
Здравствуйте, _nn_, Вы писали:
__>Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.
Откуда дровишки? Я пару месяцев назад разглядывал исходники Дишного фронтэнда. Они были целиком на С++.
__>Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно
Вот этом мне совершенно по фигу.
__>На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии
Скала и Немерле по многим пунктам объодят Ди на годы и это не мешает им бутстрипиться на себе.
Весь смысл бутстрипа в том, что ты компилируешь новую версию компилятора на своей старой версии. Следующую версию уже можно компилировать на новой. Проблемы возникают только если происходят ломающие изменения. Ломающие изменения же — это очень плохо по любому, так как перестают работать многие программы написанные на языке. Причем сам компилятор обычно их переживает, так как ломают те что строют, а значит они заранее меняют в компиляторе то что сломается.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org
Здравствуйте, eao197, Вы писали:
E>Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org
E>Вот здесь: http://www.dsource.org/projects/phobos
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, _nn_, Вы писали:
__>>Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.
VD>Откуда дровишки? Я пару месяцев назад разглядывал исходники Дишного фронтэнда. Они были целиком на С++.
Это я перепутал, имел ввиду Phobos.
__>>Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно
VD>Вот этом мне совершенно по фигу.
Кому как, а некоторым иногда нужен нэйтив.
__>>На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии
VD>Скала и Немерле по многим пунктам объодят Ди на годы и это не мешает им бутстрипиться на себе. VD>Весь смысл бутстрипа в том, что ты компилируешь новую версию компилятора на своей старой версии. Следующую версию уже можно компилировать на новой. Проблемы возникают только если происходят ломающие изменения. Ломающие изменения же — это очень плохо по любому, так как перестают работать многие программы написанные на языке. Причем сам компилятор обычно их переживает, так как ломают те что строют, а значит они заранее меняют в компиляторе то что сломается.
Я не буду спорить насчет бутсрапа. Если это приводит к более быстрому развитию я только за.
В любом случае это решение автора языка. Остается надеятся, что вместе с макросами он и доделает бустрап
Здравствуйте, _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++.
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, eao197, Вы писали:
E>>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.
VD>Смешно, ей богу.
Кто бы говорил.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org
E>Вот здесь: http://www.dsource.org/projects/phobos
Вышел D 2.008 и в основном как раз добавки — измения в фобосе.
Здравствуйте, 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));
}
Здравствуйте, eao197, Вы писали:
E>В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.
Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают
В общем дело только за удобными библиотеками для метапрограммирования.
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++.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, eao197, Вы писали:
E>>В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.
FR>Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают
В этом смысле D-шные mixin+ctfe очень похожи на метапрограммирование в Ruby. Хотя в Ruby, имхо, поприятнее.
Но тут есть мета-гуру метапрограммирования, которые вкладывают в этот термин гораздо больший смысл. И с их точки зрения это будет подобием метапрограммирования. Причем, они будут правы. Вещи типа bitfields, который ты привел в примере здесь
, имхо, такая же гадость, как Boost.Lambda в C++ -- вроде и пользоваться можно, но все какое-то страшненькое и убогонькое, и вовсе не лямбда в строгом смысле этого слова.
FR>В общем дело только за удобными библиотеками для метапрограммирования.
Касательно D, я думаю, что дело все-таки за:
— стабильным релизом D 2.0 и мараторием на добавление новых фич в язык в течении 2-3 последующих лет;
— объединением Phobos-а и Tango.
Пока D не будет готов к использованию в production пользы от его метапрограммирования или других интересных фишек ноль целых, ноль десятых.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
FR>>Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают
E>В этом смысле D-шные mixin+ctfe очень похожи на метапрограммирование в Ruby. Хотя в Ruby, имхо, поприятнее.
E>Но тут есть мета-гуру метапрограммирования, которые вкладывают в этот термин гораздо больший смысл. И с их точки зрения это будет подобием метапрограммирования. Причем, они будут правы. Вещи типа bitfields, который ты привел в примере здесь
, имхо, такая же гадость, как Boost.Lambda в C++ -- вроде и пользоваться можно, но все какое-то страшненькое и убогонькое, и вовсе не лямбда в строгом смысле этого слова.
С тем что страшненькое вполне согласен. С тем что убогое нет. С тем что гадость согласен наполовину
С C++ есть принципиальная разница, там метапрограмирование (здесь согласен с мета-гурами ) основано на побочных эффектах слишком сложных шаблонов, в D же вполне штатная возможность.
К тому же в отличии от C++ не нужно быть гуру чтобы нормально писать метапрограммы.
FR>>В общем дело только за удобными библиотеками для метапрограммирования.
E>Касательно D, я думаю, что дело все-таки за: E>- стабильным релизом D 2.0 и мараторием на добавление новых фич в язык в течении 2-3 последующих лет; E>- объединением Phobos-а и Tango.
E>Пока D не будет готов к использованию в production пользы от его метапрограммирования или других интересных фишек ноль целых, ноль десятых.
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
E>>>>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.
VD>>>Смешно, ей богу.
E>>Кто бы говорил.
VD>Я, а что?
Можно ли списочек разработанных тобой компиляторов универсальных языков программирования? Именно разработанных, с нуля.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Отсутствие final делает ситуацию с константностью несколько проще. Хотя транзитивность invariant и const -- это очень сомнительное решение, имхо.
Не понял final для переменных совсем уберут?
Сейчас в 2.008 без проблем проходит final x = 0;
Кстати тот же фобос все еще нужно много доводить, константность ладно, но много функций которые можно было бы сделать compile time, таковыми не являются (особенно раздражает модуль string)