Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Это кусок патча компилятора в файле ILEmitter который ты приводил в другой ветке (см. Re[11]: Принцип подстановки Барбары Лисков
Преобразование из PExpr в TExpr — это типизация. При этом нужно сначала типизировать все внешние ссыдки. Обычно типизируется тело метода. В общем, это не самый простой и короткий рассказ.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>До Хаскелевских классов типов шаблонам С++ никогда не дорости.
Я этого и не утверждал.
VD>Да, и не решают они ничего. Они позволяют прояснить интерфейс параметра типа. Но не зсаставляют использовать их везде. Что создает недетерминизм.
Мы говорим об одном и том же: консептам из драфта нового стандарта C++?
Здравствуйте, EvilChild, Вы писали:
VD>>Да, и не решают они ничего. Они позволяют прояснить интерфейс параметра типа. Но не зсаставляют использовать их везде. Что создает недетерминизм. EC>Мы говорим об одном и том же: консептам из драфта нового стандарта C++?
Ага. Они не обязательны для применения. Как я пониял ты по рпежнему сможешь писать код без концептов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, EvilChild, Вы писали:
VD>>>Да, и не решают они ничего. Они позволяют прояснить интерфейс параметра типа. Но не зсаставляют использовать их везде. Что создает недетерминизм. EC>>Мы говорим об одном и том же: консептам из драфта нового стандарта C++?
VD>Ага. Они не обязательны для применения. Как я пониял ты по рпежнему сможешь писать код без концептов.
Естественно, иначе весь существующий код без концептов перестанет компилироваться.
Не думаю, что подобные "эпохальные" нововведения, несовместимые со всем существующим кодом, могут приветствоваться в любом языке, не исключая твой любимый Немерле.
Так что не очень понятно, о чем была твоя реплика.
Здравствуйте, jazzer, Вы писали:
J>Естественно, иначе весь существующий код без концептов перестанет компилироваться.
Ага.
J>Не думаю, что подобные "эпохальные" нововведения, несовместимые со всем существующим кодом, могут приветствоваться в любом языке, не исключая твой любимый Немерле.
Я считаю, что косяки лучше не допускать. Тот же Немерле проектировался с нуля и без компромисов для (скажем) совместимости с С.
С++ можно сделать удобным только если таки отказаться от совместимости. Я бы тупо ввел два режима. 1. Режим совместимости в ктором все по старому. 2. Режим 0х в котором многое запрещено и не допустимо, но зато обеспечивается полноценный контроль. Первое что я бы запретил — это препроцессор. Второе — использование указателей. Третье — программироание шаблонов без концептов.
J>Так что не очень понятно, о чем была твоя реплика.
Теперь понятнее?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>С++ можно сделать удобным только если таки отказаться от совместимости. Я бы тупо ввел два режима. 1. Режим совместимости в ктором все по старому. 2. Режим 0х в котором многое запрещено и не допустимо, но зато обеспечивается полноценный контроль. Первое что я бы запретил — это препроцессор. Второе — использование указателей. Третье — программироание шаблонов без концептов.
Прям как в анекдоте:
Застойные годы. Принимают мужика в партию. Председатель комиссии срашивает:
-- Вот скажите, вы курите?
-- Да.
-- А если бы партия вам приказала бросить курить, бросили бы?
-- Да!
-- А вы водку употребляете?
-- Да.
-- А если бы партия вам приказала бросить пить водку, бросили бы?
-- Да!
-- Ну а с женщинами вы встречаетесь? Ну вы, надеюсь, понимаете в каком смысле.
-- Ну да, встречаюсь.
-- А если бы партия вам приказала отказаться от женщин, отказались бы?
-- Э... Да. Раз партия прикажет, значит откажусь.
Тут председатель принимает совсем уж серьезный вид и:
-- А теперь самый важный, как я считаю, вопрос: а если бы партия приказала вам расстаться с жизнью, расстались бы?
-- Да!
-- Вы так быстро отвечаете. Может подумаете еще?
-- Да нахрена мне такая жизнь, без сигарет, водки и женщин?! Забирайте ее всю без остатка!
Зачем кому-нибудь C++ без препроцессора и указателей?
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, jazzer, Вы писали:
J>>Естественно, иначе весь существующий код без концептов перестанет компилироваться. VD>Ага.
J>>Не думаю, что подобные "эпохальные" нововведения, несовместимые со всем существующим кодом, могут приветствоваться в любом языке, не исключая твой любимый Немерле.
VD>Я считаю, что косяки лучше не допускать.
Можно подумать, кто-то считает иначе.
VD>Тот же Немерле проектировался с нуля и без компромисов для (скажем) совместимости с С.
Это он сейчас так проектировался.
А вот когда ему стукнет 20 лет, как С++, тогда ему придется обеспечивать прежде всего совместимость с самим собой, если, конечно, он собирается эволюционировать.
VD>С++ можно сделать удобным только если таки отказаться от совместимости.
Ну мне лично совместимость никак не мешает.
VD>Я бы тупо ввел два режима. 1. Режим совместимости в ктором все по старому. 2. Режим 0х в котором многое запрещено и не допустимо, но зато обеспечивается полноценный контроль. Первое что я бы запретил — это препроцессор. Второе — использование указателей. Третье — программироание шаблонов без концептов.
А, ну опций компиляции можно завсегда придумать вагон, с этим никто и не спорит.
Ты и сейчас можешь, скажем, запускать gcc с максимальным уровнем варнингов и в pedantic mode, в котором он пишет кучу варнингов, и при этом еще одним флажком сказать, что все варнинги — это ошибки — и получишь примерно то же — запрет всех показавшихся компилятору опасными конструкций.
Или там пользоваться каким-нть линтом, который ловит "опасный" код и имеет кучу опций по этому поводу, а с выходом С++Ох их станет еще больше.
Только это не надо никому, видимо, по крайней мере, я не слышал, чтобы этим (выключением "опасных" фич) кто-то реально пользовался, вот это и не получает особого развития.
Двумя режимами точно никто не обойдется, потому что выбрасывать весь старый код ради того, чтоб заюзать одну новую фичу, абсолютно бессмысленно. И не юзать фичу ради сохранения старого кода столь же бессмысленно. А посему никто не будет делать подобных "или-или" режимов — ими просто никто не будет пользоваться.
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, VladD2, Вы писали:
VD>>Тот же Немерле проектировался с нуля и без компромисов для (скажем) совместимости с С. J>Это он сейчас так проектировался. J>А вот когда ему стукнет 20 лет, как С++, тогда ему придется обеспечивать прежде всего совместимость с самим собой, если, конечно, он собирается эволюционировать.
Только не стоит забывать, что и 20 лет назад он проектировался исходя из обратной совместимости с C
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, VladD2, Вы писали:
VD>>>Тот же Немерле проектировался с нуля и без компромисов для (скажем) совместимости с С. J>>Это он сейчас так проектировался. J>>А вот когда ему стукнет 20 лет, как С++, тогда ему придется обеспечивать прежде всего совместимость с самим собой, если, конечно, он собирается эволюционировать.
К>Только не стоит забывать, что и 20 лет назад он проектировался исходя из обратной совместимости с C
Вот через 20 лет кто-нибудь поставит Nemerle в упрек то, что он создавался под .NET.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, Курилка, Вы писали:
VD>>>Тот же Немерле проектировался с нуля и без компромисов для (скажем) совместимости с С. J>>Это он сейчас так проектировался. J>>А вот когда ему стукнет 20 лет, как С++, тогда ему придется обеспечивать прежде всего совместимость с самим собой, если, конечно, он собирается эволюционировать.
К>Только не стоит забывать, что и 20 лет назад он проектировался исходя из обратной совместимости с C
Почему это?
Имхо, после 20 лет широкого промышленного применения исходные посылки совершенно не важны, потому что нужно прежде всего обеспечивать совместимость не с тем, с чем нужно было обеспечивать совместимость вначале, а с огромным количеством кода С++, написанным за эти 20 лет.
Здравствуйте, VladD2, Вы писали:
VD>Я считаю, что косяки лучше не допускать. Тот же Немерле проектировался с нуля и без компромисов для (скажем) совместимости с С.
У немерле тоже есть компромиссы из-за совместимости с NET
VD>С++ можно сделать удобным только если таки отказаться от совместимости. Я бы тупо ввел два режима. 1. Режим совместимости в ктором все по старому. 2. Режим 0х в котором многое запрещено и не допустимо, но зато обеспечивается полноценный контроль. Первое что я бы запретил — это препроцессор. Второе — использование указателей. Третье — программироание шаблонов без концептов.
Проще написать новый язык, жаль Вальтер не торопится
Здравствуйте, eao197, Вы писали:
E>Зачем кому-нибудь C++ без препроцессора и указателей?
Я бы упростил бы это вопрос. Например, так:
Зачем кому-нибудь C++?
или даже:
Зачем C++?
А если серьезнь, то есть менее кривые средства. Те же текстуаьные макросы можно заменить немерлоподобными. Указатели пусть остаются, но только в опасном контексте (как в Шарпе). Так чтобы можно было четко выделить опастные куски кода и проверять их более дотошно. А то в любом месте многомегобайтного кода программы может появиться адресная арифметика в следствии которой будет испорчена память и бедный В.Пупкин будет вынужден месяцами тупо смотреть на корректный код не понимая почему он не работает.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, jazzer, Вы писали:
VD>>Тот же Немерле проектировался с нуля и без компромисов для (скажем) совместимости с С. J>Это он сейчас так проектировался. J>А вот когда ему стукнет 20 лет, как С++, тогда ему придется обеспечивать прежде всего совместимость с самим собой, если, конечно, он собирается эволюционировать.
А С++ так проектировался когда он еще даже С++-мо не был, а был СиСсКлассами.
VD>>С++ можно сделать удобным только если таки отказаться от совместимости. J>Ну мне лично совместимость никак не мешает.
Ну, ты лично этим маральным уродством и пользуешся. А я вот попробовал алтернативу. Теперь обратно не то что бы не тянет, а тошнить начинает просто от прсмотра кода на С++.
VD>>Я бы тупо ввел два режима. 1. Режим совместимости в ктором все по старому. 2. Режим 0х в котором многое запрещено и не допустимо, но зато обеспечивается полноценный контроль. Первое что я бы запретил — это препроцессор. Второе — использование указателей. Третье — программироание шаблонов без концептов.
J>А, ну опций компиляции можно завсегда придумать вагон, с этим никто и не спорит.
Это не опции компиляции, а скорее области видимости (скопы) в которых допустим/недопустим старый/новый синтаксис. Как с опасным кодом в Шарпе.
J>Ты и сейчас можешь, скажем, запускать gcc с максимальным уровнем варнингов и в pedantic mode, в котором он пишет кучу варнингов, и при этом еще одним флажком сказать, что все варнинги — это ошибки — и получишь примерно то же — запрет всех показавшихся компилятору опасными конструкций.
Где-то такой подход прокатит. Где-то нужно большая гранулярность. И опять же важно, чтобы кроме указателей были другие средства сделать ту же работу. Иначе на что варнинги то кидать? На сам язык?
Так и вижу:
Warning: You use C++ in C++ 0x! Kill yourself!!!
J>Только это не надо никому, видимо, по крайней мере, я не слышал, чтобы этим (выключением "опасных" фич) кто-то реально пользовался, вот это и не получает особого развития.
Ну, мне вот не надо С++ даже в виде 0х. А ведь когда-то я даже подумать об этом не мог. Так что не надо про "не надо никому".
J>Двумя режимами точно никто не обойдется, потому что выбрасывать весь старый код ради того, чтоб заюзать одну новую фичу, абсолютно бессмысленно. И не юзать фичу ради сохранения старого кода столь же бессмысленно. А посему никто не будет делать подобных "или-или" режимов — ими просто никто не будет пользоваться.
Я не предлагал выбрасывать. Я предлагал четко разделить старый иновый, чтобы можно было порвать с совместимостью в новом языке.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, eao197, Вы писали:
E>>Зачем кому-нибудь C++ без препроцессора и указателей?
VD>Я бы упростил бы это вопрос. Например, так: VD>
Зачем кому-нибудь C++?
VD>или даже: VD>
Зачем C++?
или даже:
Зачем?
VD>Те же текстуаьные макросы можно заменить немерлоподобными.
Вот тут я согласен. Немерлевые макросы в С++ я очень хотел бы видеть — то, что сейчас делается текстовым препроцессором, стало бы гораздо читабельнее, проще и надежнее. Ну и еще кое-что хотел бы видеть, но это нереально, по крайней мере, в текущей редакции языка (слишком глубоко придется лезть в его объектную модель).
Насчет остального — ну вот я уже столько времени не напарывался на проблемы с адресной арифметикой... Но это, конечно, при условии, что у тебя в проекте не работают студенты.
Но при этом другого способа пройтись по встроенному массиву или встроенной строке, кроме адресной арифметики, нету, если не хочется терять скорость, конечно.
Хотя в моем коде подобные вещи обычно упрятаны в классы либо просто используются алгоритмы STL.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, eao197, Вы писали:
E>>Зачем кому-нибудь C++ без препроцессора и указателей?
VD>Я бы упростил бы это вопрос. Например, так: VD>
Зачем кому-нибудь C++?
VD>или даже: VD>
Зачем C++?
VD>
За него платят.
VD>А если серьезнь, то есть менее кривые средства. Те же текстуаьные макросы можно заменить немерлоподобными.
Макросы в топку.
Мне препроцессор в C++ нужен для устранения различий между платформами и поддержкой разных режимов компиляции. Ну еще за макросами удобно прятать вещи типа assert или trace, которые из release версии вырезаются напрочь.
Использование C-ных макросов для более серьезных вещей, по моему опыту, является следствием непродуманного дизайна. Когда на поиск более подходящей реализации не хватило времени, подходящих инструментов или хорошей идеи.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, Andrei F., Вы писали:
AF>Здравствуйте, eao197, Вы писали:
E>>Вот через 20 лет кто-нибудь поставит Nemerle в упрек то, что он создавался под .NET.
AF>Помнится, не так давно кое-кто вообще отрицал, что у него будет какое-либо будущее. Да и сейчас еще такие не перевелись
А где фактические доказательства того что они, т.е. мы, были не правы?
SObjectizer: <микро>Агентно-ориентированное программирование на C++.