Написание .NET на динамическом языке? - PullRequest
1 голос
/ 23 декабря 2010

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

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

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

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

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

1 Ответ

1 голос
/ 31 декабря 2010

Имейте в виду, что даже такие языки, как 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 и т. Д.

...