Re[8]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 11:24
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Почему? По идее особой разницы тут быть не должно.


В типизированном AST есть аналог goto. А вот в match такого аналога нет. Эмулирвоать конечно можно, но объем работ будет существенно больше. "goto" же можно реализовать за пол часа.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 11:26
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Хардкейс говорит, что такого нет. Понятно в принципе, что это не должно быть большой проблемой в реализации. Не уверен, впрочем, что и отсутствие этого является большой проблемой.


+1

ВВ>Хотелось бы просто увидеть полный актуальный список, так сказать.


Я поправил тот список. Если еще что-то найдете, сообщите мне, я поправлю.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 11:27
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Почему? По идее особой разницы тут быть не должно.

VD>В типизированном AST есть аналог goto. А вот в match такого аналога нет. Эмулирвоать конечно можно, но объем работ будет существенно больше. "goto" же можно реализовать за пол часа.

Ну т.е. в AST есть понятие goto, значит должно быть и понятие label? На первый взгляд все, что нужно сделать — это генерировать лабел для каждого вхождения матча. Или я не вижу какие-то нюансы?

Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.
Re[10]: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 19.10.10 11:42
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну т.е. в AST есть понятие goto, значит должно быть и понятие label? На первый взгляд все, что нужно сделать — это генерировать лабел для каждого вхождения матча. Или я не вижу какие-то нюансы?


TExpr.Goto и TExpr.Label, но есть ньюансик — нужно типизировать тело, думаю, задача решается с использованием какого-нить вспомогательного макроса, который типизирует блок и изготовит переход на метку.

ВВ>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.


Это сильно сложнее, так как нужно разбираться с лапшой, в которую превращается match после работы DecisionTreeCompiler-а.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[10]: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 19.10.10 11:45
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.


Хмм. Я вот ни разу не пользовался goto case или goto default. Только простейшим goto.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 11:55
Оценка: +1
Здравствуйте, hardcase, Вы писали:

ВВ>>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.

H>Это сильно сложнее, так как нужно разбираться с лапшой, в которую превращается match после работы DecisionTreeCompiler-а.

А зачем разбираться с лапшой? Ты же транслируешь C# AST в AST Немерле, т.е. можно просто тупо считать, что каждый case в шарповом свитче — это создание метки. Именем метки может быть индекс кейса, т.е. номер, под которым он идет в теле switch-а.
Re[10]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 12:01
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну т.е. в AST есть понятие goto, значит должно быть и понятие label?


Естественно.

ВВ>На первый взгляд все, что нужно сделать — это генерировать лабел для каждого вхождения матча. Или я не вижу какие-то нюансы?


Много работы. Причем не тривиальной. Но реализовать конечно можно.

ВВ>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.


Тем кто использует goto вообще надо ноги отрывать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 12:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Много работы. Причем не тривиальной. Но реализовать конечно можно.


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

ВВ>>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.

VD>Тем кто использует goto вообще надо ноги отрывать.

Э, тут надо быть осторожнее return — это ж тоже по сути подвид goto. И так, глядишь, все C#-программисты без ног останутся.

За корутины, кстати, тоже ноги надо отрывать?
Re[12]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 14:06
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>>>Просто дело в том, что raw goto как раз используется очень редко, тогда как goto case/goto default все же почаще.

VD>>Тем кто использует goto вообще надо ноги отрывать.

ВВ>Э, тут надо быть осторожнее return — это ж тоже по сути подвид goto. И так, глядишь, все C#-программисты без ног останутся.


ВВ>За корутины, кстати, тоже ноги надо отрывать?


Вот за подобное и...во тебе минусы и ставят.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 14:09
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Э, тут надо быть осторожнее return — это ж тоже по сути подвид goto. И так, глядишь, все C#-программисты без ног останутся.

ВВ>>За корутины, кстати, тоже ноги надо отрывать?
VD>Вот за подобное и...во тебе минусы и ставят.

Ну вот я правда не понимаю, чем простое скромное goto хуже корутины, когда мы прыгаем из одной функции в другую. Тот же goto, вид сбоку. И да, можешь поставить мне минус.
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
От: IT Россия linq2db.com
Дата: 19.10.10 15:48
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Это сильно сложнее, так как нужно разбираться с лапшой, в которую превращается match после работы DecisionTreeCompiler-а.


А если case в который делается goto завернуть в локальную функцию?
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: Компиляция C# 4.0 в рамках проекта Nemerle
От: catbert  
Дата: 19.10.10 16:04
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

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


ВВ>>>Э, тут надо быть осторожнее return — это ж тоже по сути подвид goto. И так, глядишь, все C#-программисты без ног останутся.

ВВ>>>За корутины, кстати, тоже ноги надо отрывать?
VD>>Вот за подобное и...во тебе минусы и ставят.

ВВ>Ну вот я правда не понимаю, чем простое скромное goto хуже корутины, когда мы прыгаем из одной функции в другую. Тот же goto, вид сбоку. И да, можешь поставить мне минус.


If тоже подвид goto, и match в какой-то степени тоже. Но if, match, return и корутины код разъясняют, а чистый goto запутывает.
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 16:24
Оценка:
Здравствуйте, hardcase, Вы писали:

H>TExpr.Goto и TExpr.Label, но есть ньюансик — нужно типизировать тело, думаю, задача решается с использованием какого-нить вспомогательного макроса, который типизирует блок и изготовит переход на метку.


Не надо ничего типизировать.

Зоворачиваешь TExpr.Goto и TExpr.Label в PExpr.Typed и вперед. Можно даже через квази-цитату <[ $(texpr : typed) ]>.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 16:25
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Это сильно сложнее, так как нужно разбираться с лапшой, в которую превращается match после работы DecisionTreeCompiler-а.


В принципе это опять же можно сделать до типизации. Просто влепить в начало вхождений по лэйблу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 16:27
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А зачем разбираться с лапшой? Ты же транслируешь C# AST в AST Немерле, т.е. можно просто тупо считать, что каждый case в шарповом свитче — это создание метки. Именем метки может быть индекс кейса, т.е. номер, под которым он идет в теле switch-а.


Да, так можно. Но есть одна проблема. Дело в том, что при преобразовании match-а иногда выражения дублируются (копируются). Это может привести к непредсказуемым последствиям.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 16:28
Оценка:
Здравствуйте, catbert, Вы писали:

C>If тоже подвид goto, и match в какой-то степени тоже. Но if, match, return и корутины код разъясняют, а чистый goto запутывает.


Можно еще проще сказать if, match, return и т.п. — это конструкции структурного программирования, а goto средство обфускации кода.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 16:29
Оценка:
Здравствуйте, IT, Вы писали:

IT>А если case в который делается goto завернуть в локальную функцию?


То:
1. Будет оверхэд.
2. Будет возврат управления в точку вызова.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 16:30
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>If тоже подвид goto, и match в какой-то степени тоже. Но if, match, return и корутины код разъясняют, а чистый goto запутывает.

VD>Можно еще проще сказать if, match, return и т.п. — это конструкции структурного программирования, а goto средство обфускации кода.

Выход из цикла? — break, "структурное программирование".

Выход из двух циклов сразу?
Re[17]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 16:54
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Выход из цикла? — break, "структурное программирование".


Ага — структурное, так как ясно откуда и куда осуществляется выход.

ВВ>Выход из двух циклов сразу?


Да хоть из трех — блок немерла:
[img]
exitAllLoops :
{
foreach (...)
foreach (...)
foreach (...)
when (cond)
exitAllLoops(returnValue); // может ничего не возвращать, если тип блока — void

value
}
[/img]
break реализован на его базе.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Компиляция C# 4.0 в рамках проекта Nemerle
От: catbert  
Дата: 19.10.10 17:11
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Выход из двух циклов сразу?


Ну, в холопских языках вроде C# ничего лучше и не придумаеш :-D
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.