Пишете .NET на динамическом языке?

Меня смущает возможность написания .NET на динамических языках, таких как (Iron) Ruby. В частности, я видел код в IronRuby, который использовал универсальные шаблоны (...foo[String]), но я не знаю об этой функции в Ruby, поскольку для динамических языков это кажется мне бессмысленным.

Итак, когда я пишу приложение .NET на IronRuby, как обстоят дела с безопасностью типов и компиляцией? Я думал, что он такой же динамичный, как и Ruby во всем остальном. Я думал, что если синтаксис Ruby в порядке, вся проверка типов будет выполняться во время выполнения.

Кроме того, насколько мне известно, .NET сам по себе ориентирован на типы - есть классы, которые активно используют упомянутые обобщения. Как с этим справляются?

А что насчет делегатов? На динамических языках у меня могут быть почти функциональные спагетти, а иногда и просто нормально (например, взлом пользовательского интерфейса в javascript).

Или мне нужно заботиться даже об общих делегатах?


person tillda    schedule 23.12.2010    source источник
comment
Вы пишете код, как в обычном Ruby. Хотя, думаю, нативные расширения (написанные на C) использовать нельзя. Как бы то ни было, я писал тихий большой скрипт, ориентированный на IronRuby. Затем я перешел на нормальный Ruby 1.9 без каких-либо изменений. С той лишь разницей: Ruby 1.9 запускается в 10 раз быстрее :)   -  person Alexey    schedule 23.12.2010


Ответы (1)


Имейте в виду, что даже такие языки, как C # и VB .NET, теперь (необязательно) являются динамическими, например, вместо

string strongTypedReference = "Hello";

Начиная с .NET 4, теперь вы также можете:

dynamic dynamicReference = "Hello";

Следовательно:

strongTypedReference.Foo() // gives a compile-time error as expected.
dynamicReference.Foo() // compiles, but will give a run-time error.
dynamicReference.ToString() // compiles and binds to the correct call at run-time.

Так что да, с динамическим компилятором не проверяется разрешение вызовов методов, средств доступа к свойствам и т. Д. Во время компиляции, а во время выполнения. Это относится ко всем языкам, которые предлагают динамическую типизацию в .NET, например. IronRuby, IronPython, C #, VB и т. Д.

person Isaac Abraham    schedule 31.12.2010