Здравствуйте, Воронков Василий, Вы писали:
ВВ>Почему? По идее особой разницы тут быть не должно.
В типизированном AST есть аналог goto. А вот в match такого аналога нет. Эмулирвоать конечно можно, но объем работ будет существенно больше. "goto" же можно реализовать за пол часа.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Хардкейс говорит, что такого нет. Понятно в принципе, что это не должно быть большой проблемой в реализации. Не уверен, впрочем, что и отсутствие этого является большой проблемой.
+1
ВВ>Хотелось бы просто увидеть полный актуальный список, так сказать.
Я поправил тот список. Если еще что-то найдете, сообщите мне, я поправлю.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
ВВ>>Почему? По идее особой разницы тут быть не должно. VD>В типизированном AST есть аналог goto. А вот в match такого аналога нет. Эмулирвоать конечно можно, но объем работ будет существенно больше. "goto" же можно реализовать за пол часа.
Ну т.е. в AST есть понятие goto, значит должно быть и понятие label? На первый взгляд все, что нужно сделать — это генерировать лабел для каждого вхождения матча. Или я не вижу какие-то нюансы?
Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.
Re[10]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Ну т.е. в AST есть понятие goto, значит должно быть и понятие label? На первый взгляд все, что нужно сделать — это генерировать лабел для каждого вхождения матча. Или я не вижу какие-то нюансы?
TExpr.Goto и TExpr.Label, но есть ньюансик — нужно типизировать тело, думаю, задача решается с использованием какого-нить вспомогательного макроса, который типизирует блок и изготовит переход на метку.
ВВ>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.
Это сильно сложнее, так как нужно разбираться с лапшой, в которую превращается match после работы DecisionTreeCompiler-а.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[10]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.
Хмм. Я вот ни разу не пользовался goto case или goto default. Только простейшим goto.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, hardcase, Вы писали:
ВВ>>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще. H>Это сильно сложнее, так как нужно разбираться с лапшой, в которую превращается match после работы DecisionTreeCompiler-а.
А зачем разбираться с лапшой? Ты же транслируешь C# AST в AST Немерле, т.е. можно просто тупо считать, что каждый case в шарповом свитче — это создание метки. Именем метки может быть индекс кейса, т.е. номер, под которым он идет в теле switch-а.
Re[10]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Ну т.е. в AST есть понятие goto, значит должно быть и понятие label?
Естественно.
ВВ>На первый взгляд все, что нужно сделать — это генерировать лабел для каждого вхождения матча. Или я не вижу какие-то нюансы?
Много работы. Причем не тривиальной. Но реализовать конечно можно.
ВВ>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.
Тем кто использует goto вообще надо ноги отрывать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, VladD2, Вы писали:
VD>Много работы. Причем не тривиальной. Но реализовать конечно можно.
Со стороны, конечно, совсем не понятно, почему много Казалось бы, нужно просто генерить лабель для каждого кейса в шарповом switch-е.
ВВ>>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще. VD>Тем кто использует goto вообще надо ноги отрывать.
Э, тут надо быть осторожнее return — это ж тоже по сути подвид goto. И так, глядишь, все C#-программисты без ног останутся.
За корутины, кстати, тоже ноги надо отрывать?
Re[12]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, Воронков Василий, Вы писали:
ВВ>>>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще. VD>>Тем кто использует goto вообще надо ноги отрывать.
ВВ>Э, тут надо быть осторожнее return — это ж тоже по сути подвид goto. И так, глядишь, все C#-программисты без ног останутся.
ВВ>За корутины, кстати, тоже ноги надо отрывать?
Вот за подобное и...во тебе минусы и ставят.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, VladD2, Вы писали:
ВВ>>Э, тут надо быть осторожнее return — это ж тоже по сути подвид goto. И так, глядишь, все C#-программисты без ног останутся. ВВ>>За корутины, кстати, тоже ноги надо отрывать? VD>Вот за подобное и...во тебе минусы и ставят.
Ну вот я правда не понимаю, чем простое скромное goto хуже корутины, когда мы прыгаем из одной функции в другую. Тот же goto, вид сбоку. И да, можешь поставить мне минус.
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, hardcase, Вы писали:
H>Это сильно сложнее, так как нужно разбираться с лапшой, в которую превращается match после работы DecisionTreeCompiler-а.
А если case в который делается goto завернуть в локальную функцию?
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, VladD2, Вы писали:
ВВ>>>Э, тут надо быть осторожнее return — это ж тоже по сути подвид goto. И так, глядишь, все C#-программисты без ног останутся. ВВ>>>За корутины, кстати, тоже ноги надо отрывать? VD>>Вот за подобное и...во тебе минусы и ставят.
ВВ>Ну вот я правда не понимаю, чем простое скромное goto хуже корутины, когда мы прыгаем из одной функции в другую. Тот же goto, вид сбоку. И да, можешь поставить мне минус.
If тоже подвид goto, и match в какой-то степени тоже. Но if, match, return и корутины код разъясняют, а чистый goto запутывает.
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, hardcase, Вы писали:
H>TExpr.Goto и TExpr.Label, но есть ньюансик — нужно типизировать тело, думаю, задача решается с использованием какого-нить вспомогательного макроса, который типизирует блок и изготовит переход на метку.
Не надо ничего типизировать.
Зоворачиваешь TExpr.Goto и TExpr.Label в PExpr.Typed и вперед. Можно даже через квази-цитату <[ $(texpr : typed) ]>.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, hardcase, Вы писали:
H>Это сильно сложнее, так как нужно разбираться с лапшой, в которую превращается match после работы DecisionTreeCompiler-а.
В принципе это опять же можно сделать до типизации. Просто влепить в начало вхождений по лэйблу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, Воронков Василий, Вы писали:
ВВ>А зачем разбираться с лапшой? Ты же транслируешь C# AST в AST Немерле, т.е. можно просто тупо считать, что каждый case в шарповом свитче — это создание метки. Именем метки может быть индекс кейса, т.е. номер, под которым он идет в теле switch-а.
Да, так можно. Но есть одна проблема. Дело в том, что при преобразовании match-а иногда выражения дублируются (копируются). Это может привести к непредсказуемым последствиям.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, catbert, Вы писали:
C>If тоже подвид goto, и match в какой-то степени тоже. Но if, match, return и корутины код разъясняют, а чистый goto запутывает.
Можно еще проще сказать if, match, return и т.п. — это конструкции структурного программирования, а goto средство обфускации кода.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, VladD2, Вы писали:
C>>If тоже подвид goto, и match в какой-то степени тоже. Но if, match, return и корутины код разъясняют, а чистый goto запутывает. VD>Можно еще проще сказать if, match, return и т.п. — это конструкции структурного программирования, а goto средство обфускации кода.
Выход из цикла? — break, "структурное программирование".
Выход из двух циклов сразу?
Re[17]: Компиляция C# 4.0 в рамках проекта Nemerle
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Выход из цикла? — break, "структурное программирование".
Ага — структурное, так как ясно откуда и куда осуществляется выход.
ВВ>Выход из двух циклов сразу?
Да хоть из трех — блок немерла:
[img]
exitAllLoops :
{
foreach (...)
foreach (...)
foreach (...)
when (cond)
exitAllLoops(returnValue); // может ничего не возвращать, если тип блока — void
value
}
[/img]
break реализован на его базе.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Компиляция C# 4.0 в рамках проекта Nemerle