Здравствуйте, nikov, Вы писали:
N>А где ковариантность массивов?
Нету. Насколько я помню у компиляторщиков были большие пробемы с ним и они отказались от поддержки неявного приведения типов для массивов.
N>
N>A.Foo(x :> array[object]); // тоже не катит
N>
Так работает. Явное приведение допустимо.
Видимо ты опять старым компилятором воспользовался.
Плюс еще если нужно просто создать массив object-ов, то можно сделать так:
def x = array["a" : object, "b", "c"];
A.Foo(x);
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Так работает. Явное приведение допустимо. VD>Видимо ты опять старым компилятором воспользовался.
Попробовал взять свежие исходники из SVN. Потом запустил Build.cmd и Reg.cmd
Теперь при попытке запуска компилятор всегда выдает следующее:
------ Build started: Project: NemerleProject, Configuration: Debug Any CPU ------
C:\Program Files\Nemerle\ncc.exe /no-color /no-stdlib /define:DEBUG;TRACE /debug+ /out:obj\Debug\NemerleProject.exe /target:exe Properties\AssemblyInfo.n Main.n /ref:"C:\Program Files\Nemerle\\Nemerle.dll" /ref:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /ref:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /ref:"C:\Program Files\LINQ Preview\Bin\System.Query.dll" /ref:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll
Unhandled Exception: System.IO.FileLoadException: Could not load file or assembly 'Nemerle, Version=0.9.3.7342, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Nemerle, Version=0.9.3.7342, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd'
at Nemerle.Compiler.CompilationOptions..ctor()
at Nemerle.CommandlineCompiler.MainClass.Main() in C:\Nemerle\ncc\main.n:line 60
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Здравствуйте, nikov, Вы писали:
VD>>Так работает. Явное приведение допустимо. VD>>Видимо ты опять старым компилятором воспользовался.
N>Попробовал взять свежие исходники из SVN. Потом запустил Build.cmd и Reg.cmd N>Теперь при попытке запуска компилятор всегда выдает следующее:...
1. Удали переменную стреды окуржения Nemerle. Или хотя бы исправь в ней путь. Старый инсталлятор засовывал туда путь в кавычках.
2. Открой в Windows Explorer путь %WinDir%\assembly и удали из GAC-а все вхождения немерловских сборок.
3. На всякий пожарный, сделай поиск старых версий сборок немерла и грохни их.
N>В чем может быть причина?
что скорее всего вызвано тем, что старый инсталлятор засовывал в переменную среды окружения Nemerle путь в кавычках.
Но лучше сделать все что я описал.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>1. Удали переменную стреды окуржения Nemerle. Или хотя бы исправь в ней путь. Старый инсталлятор засовывал туда путь в кавычках.
Заработало!
Кавычки-то я сразу после установки удалил. Оказалось, проблема была в завершающем бэк-слэше. Его удалил, перекомпилировал компилятор, и все заработало.
Вообще, это очень здорово, что компилятор написан на том же языке, который он компилирует. Это помогает исправлять многие ошибки еще на этапе разработки языка, и исключает досадные недоразумения которые есть в C# (например, когда числовые литералы по-разному разбираются на этапе компиляции и в рантайме).
Здравствуйте, nikov, Вы писали:
N>Вообще, это очень здорово, что компилятор написан на том же языке, который он компилирует.
Ага.
N>Это помогает исправлять многие ошибки еще на этапе разработки языка, и исключает досадные недоразумения которые есть в C# (например, когда числовые литералы по-разному разбираются на этапе компиляции и в рантайме).
Это дает гораздо большее:
1. Компилятор может использовать все возможности языка. Это значит, что компилятор становится проще разрабатывать и сопровождать.
2. Это дополнительный стимул для улучшения языка. Вот недавно Камил Скальски добавил реализацию Абстрактной фабрики и Агрегации так как решал задачи требующие реализации этих паттернов.
N>В общем, си-шарп идет фтопку.
Думаю он еще помучается.
Ведь очень многие дизайнеры рассчитаны именно на него.
К тому же в 3.0 будет LINQ который стоило бы повторить.
Но в общем, согласен. При прочих равных смысла использовать C# нет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, nikov, Вы писали:
N>Оказалось, что оно допустимо слишком часто. N>Интересно, что в свое время точно такая же проблема была у РеШарпера.
Дык, логично. Ведь пляски с вэлью-типами и ссылочными типами — это оптимизация дотнета которая совершенно не естественна. Подобные оптимизации зачастую являются причинами огромного количества "но". И все эти "но" нужно учесть. А это море проверок в совершенно разных местах.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.