static Main() : void
{
def iterator() : IEnumerable[int] {
mutable i = 0;
while( i < 10 ) {
yield i;
i++;
}
}
foreach( i in iterator() ) {
WriteLine($"i = $i");
}
}
error : yield used in a `loop' function, which is returning void (it should be System.Collections.Generic.IEnumerator[T] or System.Collections.Generic.IEnumerable[T])
Ежели ф-цию вынести в метод — работает.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re: Почему в Н я не могу использовать локальные ф-ции в каче
DS>error : yield used in a `loop' function, which is returning void (it should be System.Collections.Generic.IEnumerator[T] or System.Collections.Generic.IEnumerable[T])
Потому-что все циклы в Н реализованы через локальные функции. И если ползволить это делать, то не выйдет реализовать мало-мальски сложную логику.
Если очень хочется иметь локальные генераторы (yield), то можешь воспользоваться макросом Computation Expression и предопределенным билдером для IEnumerable[T] или аналогами для массивов и списков.
За одно, если возникнет вопрос "как на Немерле сделать Async из C# 5.0", то тоже сможешь найти ответ ;).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, VladD2, Вы писали:
VD>Потому-что все циклы в Н реализованы через локальные функции. И если ползволить это делать, то не выйдет реализовать мало-мальски сложную логику.
VD>Если очень хочется иметь локальные генераторы (yield), то можешь воспользоваться макросом Computation Expression и предопределенным билдером для IEnumerable[T] или аналогами для массивов и списков.
Не очень хорошая статья. Нифига не понятно. Какая-то магия: comp, defcomp. Не ясно даже в каком пространстве имен эти компы дефкомпы.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[3]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, DarthSidius, Вы писали:
DS>Здравствуйте, VladD2, Вы писали:
VD>>Потому-что все циклы в Н реализованы через локальные функции. И если ползволить это делать, то не выйдет реализовать мало-мальски сложную логику.
VD>>Если очень хочется иметь локальные генераторы (yield), то можешь воспользоваться макросом Computation Expression и предопределенным билдером для IEnumerable[T] или аналогами для массивов и списков.
DS>Не очень хорошая статья. Нифига не понятно. Какая-то магия: comp, defcomp. Не ясно даже в каком пространстве имен эти компы дефкомпы.
предопределенным билдером для IEnumerable[T] или аналогами для массивов и списков.
DS>>Не очень хорошая статья. Нифига не понятно. Какая-то магия: comp, defcomp. Не ясно даже в каком пространстве имен эти компы дефкомпы.
_NN>Можно посмотреть код: _NN>EnumerableTest
Здравствуйте, DarthSidius, Вы писали:
DS>За это спасибо. Хоть тупо скопирую по аналогии. Если не трудно конечно, а в какой сборке искать ComputationExpressions ?
Здравствуйте, DarthSidius, Вы писали:
DS>Это 100 раз переведенная статья на английский с хабры. Кроме нее про кампутатион экспрессионс на Н больше ничего походу нет. Это как раз про нее:
Не очень хорошая статья. Нифига не понятно. Какая-то магия: comp, defcomp. Не ясно даже в каком пространстве имен эти компы дефкомпы.
Для того чтобы использовать это дело для замены локальным yield-ам, особого описания не требуется. Примеров более чем достаточно. Описание нужно для разработки своих компрешеншонов. Но это явно не всем по зубам, да и нужно не всем.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, DarthSidius, Вы писали:
DS>>За это спасибо. Хоть тупо скопирую по аналогии. Если не трудно конечно, а в какой сборке искать ComputationExpressions ?
_NN>ComputationExpressions.Macros.dll, ComputationExpressions.dll
Спасибо, нашел. Получается немерловые сборки разбросаны по закоулкам всего списка. Извините, конечно, но это косяк. Привык что пр-ва имен, например, System.Data и System.Data.SqlClient можно найти в System.Data.dll
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[6]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, VladD2, Вы писали:
VD>Для того чтобы использовать это дело для замены локальным yield-ам, особого описания не требуется. Примеров более чем достаточно. Описание нужно для разработки своих компрешеншонов. Но это явно не всем по зубам, да и нужно не всем.
В том то и проблема, что документации для простых смертных — без слез не взглянешь.
Здравствуйте, _NN_, Вы писали:
_NN>ComputationExpressions.Macros.dll, ComputationExpressions.dll
Необработанное исключение: System.IO.FileLoadException: Невозможно загрузить файл или сборку "ComputationExpressions, Version=1.1.716.0, Culture=neutral, Public KeyToken=null" или один из зависимых от них компонентов. Требуется сборка со строгим именем. (Исключение из HRESULT: 0x80131044)
в Test1.Program.Main()
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[7]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, DarthSidius, Вы писали:
DS>Здравствуйте, _NN_, Вы писали:
_NN>>Здравствуйте, DarthSidius, Вы писали:
DS>>>За это спасибо. Хоть тупо скопирую по аналогии. Если не трудно конечно, а в какой сборке искать ComputationExpressions ?
_NN>>ComputationExpressions.Macros.dll, ComputationExpressions.dll
DS>Спасибо, нашел. Получается немерловые сборки разбросаны по закоулкам всего списка. Извините, конечно, но это косяк. Привык что пр-ва имен, например, System.Data и System.Data.SqlClient можно найти в System.Data.dll
Ну это snippets , релизное качество никто не гарантирует.
По уму надо бы сделать Nemerle.ComputationExperssions, бесспорно.
Хотите этим заняться ?
DS>Необработанное исключение: System.IO.FileLoadException: Невозможно загрузить файл или сборку "ComputationExpressions, Version=1.1.716.0, Culture=neutral, Public KeyToken=null" или один из зависимых от них компонентов. Требуется сборка со строгим именем. (Исключение из HRESULT: 0x80131044)
DS> в Test1.Program.Main()
Если я не ошибаюсь, то надо пересобрать ComputationExpressions, они раньше могли неправильно собираться.
Сделай "git pull", а потом собери заново. Проверь версии получившихся сборок Nemerle.dll и ComputationExpressions.dll — они должны совпадать.
Здравствуйте, ionoy, Вы писали:
I>Если я не ошибаюсь, то надо пересобрать ComputationExpressions, они раньше могли неправильно собираться. I>Сделай "git pull", а потом собери заново. Проверь версии получившихся сборок Nemerle.dll и ComputationExpressions.dll — они должны совпадать.
Скачал последний релиз: 718
Версии и там и там 1.1.718.0
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[8]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, _NN_, Вы писали:
_NN>>>ComputationExpressions.Macros.dll, ComputationExpressions.dll
DS>>Спасибо, нашел. Получается немерловые сборки разбросаны по закоулкам всего списка. Извините, конечно, но это косяк. Привык что пр-ва имен, например, System.Data и System.Data.SqlClient можно найти в System.Data.dll
_NN>Ну это snippets , релизное качество никто не гарантирует. _NN>По уму надо бы сделать Nemerle.ComputationExperssions, бесспорно. _NN>Хотите этим заняться ?
Да я непротив посильной помощи. Что там надо сделать? С учетом того, что пока эти самые (как их там по русски-то?) экспрессионс для меня еще темный лес.
Здравствуйте, DarthSidius, Вы писали:
DS>Да я непротив посильной помощи. Что там надо сделать? С учетом того, что пока эти самые (как их там по русски-то?) экспрессионс для меня еще темный лес.
Ты же cам все озвучил вроде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, DarthSidius, Вы писали:
DS>Да я непротив посильной помощи. Что там надо сделать? С учетом того, что пока эти самые (как их там по русски-то?) экспрессионс для меня еще темный лес.
Только когда будешь переименовывать, сделай алиасы в старых пространствах имен со старыми именами (через директиву type)... для обратной совместимости.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, DarthSidius, Вы писали:
DS>В том то и проблема, что документации для простых смертных — без слез не взглянешь.
Тут проблема в том, что документацию для простых смертных должны писать такие же простые смертные разобравшиеся в проблеме. Иначе получается скучно и не по делу.
Вот разберись и черкни пару слов. Следующему будет проще.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Почему в Н я не могу использовать локальные ф-ции в к
Здравствуйте, VladD2, Вы писали:
VD>Только когда будешь переименовывать, сделай алиасы в старых пространствах имен со старыми именами (через директиву type)... для обратной совместимости.
Пространства имен нормальные, сборку — переименовывать.
Здравствуйте, ionoy, Вы писали:
I>Здравствуйте, DarthSidius, Вы писали: DS>>Скачал последний релиз: 718 DS>>Версии и там и там 1.1.718.0
I>Если можешь, выложи проект куда-нибудь. Посмотрю.
Да что там смотреть? Сборка ComputationExpressions.dll не подписана, в отличии от всех остальных.
C:\Program Files (x86)\Nemerle\net-4.0>sn -T Nemerle.dll
Программа для работы со строгими именами Microsoft (R) .NET Framework, версия 4.0.30319.1
(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
Маркер открытого ключа: e080a9c724e2bfcd
C:\Program Files (x86)\Nemerle\net-4.0>sn -T ComputationExpressions.dll
Программа для работы со строгими именами Microsoft (R) .NET Framework, версия 4.0.30319.1
(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
"ComputationExpressions.dll" не представляет сборку со строгим именем
C:\Program Files (x86)\Nemerle\net-4.0>
Здравствуйте, ionoy, Вы писали:
I>Здравствуйте, DarthSidius, Вы писали:
DS>>Да что там смотреть? Сборка ComputationExpressions.dll не подписана, в отличии от всех остальных.
I>Непонятно, почему она должна быть подписана. Если ты свою сборку не подписываешь, то и ComputationExpressions не обязательно подписывать.
Сборку со строгим именем — я могу использовать из любых сборок. А вот сборку без строгого имени только со сборками без оного.
I>Вот пример проекта, у меня все отлично работает: I>http://dl.dropbox.com/u/133081/compexpr.zip
И еще бы не работал. А ты сборочку свою, как положено, со строгим именем сделай. Ага.
Спасибо, читал. ComputationExpressions сейчас не является неотъемлемой частью Немерле. Это пользовательская библиотека.
Ты всем разработчикам OS библиотек советуешь Рихтера читать, чтобы они обязательно сборки подписывали?
DS>И еще бы не работал. А ты сборочку свою, как положено, со строгим именем сделай. Ага.
А чего тон то такой? Я вроде тебе помочь хотел.
Здравствуйте, DarthSidius, Вы писали:
DS>Сборку со строгим именем — я могу использовать из любых сборок. А вот сборку без строгого имени только со сборками без оного.
Ты прав. Но что так расходиться то? Давно бы добавил бы подпись, переименовал бы сборку и создал бы пул-реквест, лучше.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, ionoy, Вы писали:
I>Спасибо, читал. ComputationExpressions сейчас не является неотъемлемой частью Немерле. Это пользовательская библиотека. I>Ты всем разработчикам OS библиотек советуешь Рихтера читать, чтобы они обязательно сборки подписывали?
Тут все очень просто. Из подписанной сборки нельзя использовать не подписанные. А подпись бывает нужна не только из эстетических сообрежений. Например, она обязательна при регистрации сборки как КОМ-компонента. Или при помещении в ГАК.
Таким образом все публичные, библиотечные сборки нужно подписывать от греха. Макросыные можно и не подписывать, если из них типы не экспортируются.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, DarthSidius, Вы писали:
DS>Че там нажать надо? "Fork and edit this file" ?
Надо сделать форк, клонировать форк локально, изменить, протестировать сборку с помощью DevBuildForCommit-4.cmd и DevBuildForCommit.cmd (медленно) или хотя бы с помощью DevBuild2StageWithTests-4.cmd и DevBuild2StageWithTests.cmd (несколько быстрее). И в случае успеха сделать пул-реквест (из веб-интерфейса).
В вебе ничего редактировать не надо. Без тестов менять ничего в компиляторе не надо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Тут все очень просто. Из подписанной сборки нельзя использовать не подписанные. А подпись бывает нужна не только из эстетических сообрежений. Например, она обязательна при регистрации сборки как КОМ-компонента. Или при помещении в ГАК.
Дык я это вроде всё знаю, просто на наезд отреагировал.
Далеко не все библиотеки подписаны, и ничего — никто Рихтера не отправляет читать. Другое дело, что подпись иногда бывает действительно нужна.
Здравствуйте, ionoy, Вы писали:
I>Здравствуйте, DarthSidius, Вы писали:
DS>>Ты что реально не понимаешь, что сборка должна иметь строгое имя. http://blogs.msdn.com/b/ruericlippert/archive/2009/09/03/9900601.aspx DS>>И Рихтера рекомендую почитать.
I>Спасибо, читал. ComputationExpressions сейчас не является неотъемлемой частью Немерле. Это пользовательская библиотека.
Я считаю, что уже является.
I>Ты всем разработчикам OS библиотек советуешь Рихтера читать, чтобы они обязательно сборки подписывали?
Если они не подписывают, то посоветую.
А вот чтоб не подписывали — ни разу не видел.
DS>>И еще бы не работал. А ты сборочку свою, как положено, со строгим именем сделай. Ага. I>А чего тон то такой? Я вроде тебе помочь хотел.
Нормальный тон. Как можно увидеть в буквах тон? Извиняюсь, конечно, если обидел.
Здравствуйте, VladD2, Вы писали:
VD>Надо сделать форк, клонировать форк локально, изменить, протестировать сборку с помощью DevBuildForCommit-4.cmd и DevBuildForCommit.cmd (медленно) или хотя бы с помощью DevBuild2StageWithTests-4.cmd и DevBuild2StageWithTests.cmd (несколько быстрее). И в случае успеха сделать пул-реквест (из веб-интерфейса).
Блин, где взять targets?
D:\Work\Nemerle\DarthSidius-nemerle-03768d7\VsIntegration\Nemerle.VisualStudio\Nemerle.VisualStudio.csproj(681,11): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v9.0\VSSDK\Microsoft.VsSDK.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Скачал и поставил VsSDk, но встал в папку: C:\Program Files (x86)\Microsoft Visual Studio 2010 SDK
Здравствуйте, DarthSidius, Вы писали:
DS>Здравствуйте, VladD2, Вы писали:
VD>>Надо сделать форк, клонировать форк локально, изменить, протестировать сборку с помощью DevBuildForCommit-4.cmd и DevBuildForCommit.cmd (медленно) или хотя бы с помощью DevBuild2StageWithTests-4.cmd и DevBuild2StageWithTests.cmd (несколько быстрее). И в случае успеха сделать пул-реквест (из веб-интерфейса).
DS>Блин, где взять targets?
Еще забыл: ошибка здесь для 3.5, для 4.0 — аналогично.
Здравствуйте, DarthSidius, Вы писали:
DS>Блин, где взять targets? DS>
DS> D:\Work\Nemerle\DarthSidius-nemerle-03768d7\VsIntegration\Nemerle.VisualStudio\Nemerle.VisualStudio.csproj(681,11): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v9.0\VSSDK\Microsoft.VsSDK.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
DS>Скачал и поставил VsSDk, но встал в папку: C:\Program Files (x86)\Microsoft Visual Studio 2010 SDK
Думаю, что у тебя просто переменные окружения каком-то приложении закэшированы. Просто перезагрузи машину.
Да... Батники нужно запускать с административными привилегиями. Иначе они не смогу все как следует зарегистрировать и скопировать. Запусти Total Commander или FAR под администратором (из контекстного меню шортката). И уже из них запускай батники.
На всякий пожарный перед этим имеет смысл закрыть студии.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Думаю, что у тебя просто переменные окружения каком-то приложении закэшированы. Просто перезагрузи машину.
Сделал.
VD>Да... Батники нужно запускать с административными привилегиями. Иначе они не смогу все как следует зарегистрировать и скопировать. Запусти Total Commander или FAR под администратором (из контекстного меню шортката). И уже из них запускай батники.
Так и было.
VD>На всякий пожарный перед этим имеет смысл закрыть студии.
Так и было.
Но не растет кокос все равно.
FindExistingDeploymentPath:
Extension 'FFFFeaae-d2c0-461d-8ff6-b3bc8d67bcfe' located at 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Nemerle\'.
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets(420,5): error : Адресат вызова создал исключение. [D:\Work\Nemerle\DarthSidius-nemerle-03768d7\snippets\VS2010\Nemerle.VisualStudio\Nemerle.VisualStudio.csproj]
Построение проекта "D:\Work\Nemerle\DarthSidius-nemerle-03768d7\snippets\VS2010\Nemerle.VisualStudio\Nemerle.VisualStudio.csproj" завершено (целевые объекты Rebuild) с ошибкой.
Построение проекта "D:\Work\Nemerle\DarthSidius-nemerle-03768d7\NemerleAll.nproj" завершено (целевые объекты DevBuild2StageWithTests) с ошибкой.
Не удалось выполнить построение.
"D:\Work\Nemerle\DarthSidius-nemerle-03768d7\NemerleAll.nproj" (целевой объект DevBuild2StageWithTests ) (1) ->
"D:\Work\Nemerle\DarthSidius-nemerle-03768d7\snippets\VS2010\Nemerle.VisualStudio\Nemerle.VisualStudio.csproj" (целевой объект Rebuild ) (20) ->
(Целевой объект DeployVsixExtensionFiles) ->
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets(420,5): error : Адресат вызова создал исключение. [D:\Work\Nemerle\DarthSidius-nemerle-03768d7\snippets\VS2010\Nemerle.VisualStudio\Nemerle.VisualStudio.csproj]
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, DarthSidius, Вы писали:
DS>>Че там нажать надо? "Fork and edit this file" ?
VD>Надо сделать форк, клонировать форк локально, изменить, протестировать сборку с помощью DevBuildForCommit-4.cmd и DevBuildForCommit.cmd (медленно) или хотя бы с помощью DevBuild2StageWithTests-4.cmd и DevBuild2StageWithTests.cmd (несколько быстрее). И в случае успеха сделать пул-реквест (из веб-интерфейса).
Как оказалось, вышеназваные cmd ваабще к ComputationExpressions ровным счетом побоку, т.к. они в PowerPack. Запускал BuildInstallerFull-4.cmd, потом инсталировал и проверял в своем проекте. Вобщем все пучком.
Здравствуйте, DarthSidius, Вы писали:
DS>Как оказалось, вышеназваные cmd ваабще к ComputationExpressions ровным счетом побоку, т.к. они в PowerPack. Запускал BuildInstallerFull-4.cmd, потом инсталировал и проверял в своем проекте. Вобщем все пучком.
Можно конечно и так. Но это уже перебор. Достаточно DevBuildForCommit-4.cmd. Только при этом нужно еще и сборку для дотнет 2-3.5 проверять с помощью
DevBuild2StageWithTests.cmd.
А можно и более быстрый вариант использовать — DevBuild2StageWithTests-4.cmd DevBuild2StageWithTests.cmd. Они в два раза быстрее, так как делается 2 прохода, а не 4.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, DarthSidius, Вы писали:
DS>Как оказалось, вышеназваные cmd ваабще к ComputationExpressions ровным счетом побоку, т.к. они в PowerPack. Запускал BuildInstallerFull-4.cmd, потом инсталировал и проверял в своем проекте. Вобщем все пучком.
Хм. Странно. Мне казалось, что ComputationExpressions при том собирается. ОК, тогда BuildInstallerFull-4.cmd лучший вариант. Но надо бы было еще и BuildInstallerFull.cmd прогнать. А то бывает так, что все пашет для 4-го фрэймворка, но перестает работать для 3.5-го. А без этого ночные билды не пройдут. Да и вообще непорядочек.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.