Подтвердить что ты не робот

Возможно ли создать целое приложение, используя только динамические части С#?

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

Но, что касается концепции, можно было бы в принципе сделать С# полностью динамически, бросая статическую проверку типа в сторону и говоря: "Пах, ты такой старомодный!".

Недавно у меня был большой опыт IronPython и F #, но я действительно чувствую себя дома на языке C.

Как далеко можно взять С# на пути к динамике? Недавно я написал синтаксический анализатор XML для ExpandoObject, и это было здорово, он был похож на прототип javascript.

Насколько оптимизирован динамический материал, так же быстро, как некоторые из реальных языков динамического языка программирования, такие как NodeJs и CPython?

4b9b3361

Ответ 1

можно ли в принципе сделать С# полностью динамическим способом?

Конечно, почему бы и нет? Просто введите все как "динамический".

Недавно у меня был большой опыт IronPython и F #

Замечу, что F # не является динамически типизированным языком; это неявно типизированный статически типизированный язык. Просто потому, что вы не видите, что проверка типов не означает, что ее нет.

Насколько оптимизирован динамический материал?

Он довольно оптимизирован для скорости, но тяжелый для использования памяти и размера кода. Мы создаем кеш на каждом сайте вызова. Во второй раз, когда вы попадаете на сайт вызова, он должен быть очень быстрым, но вы платите за это стоимость памяти.

Это так же быстро, как некоторые из реальных языков динамического языка программирования, такие как NodeJs и CPython?

Попробуйте оба, измерьте их, а затем вы узнаете.

Ответ 2

В значительной степени. Конечно, в любой момент, когда вы взаимодействуете с другим кодом (в том числе с FCL), который ожидает определенные типы, вам нужно будет отобразить ожидаемый тип. Но если бы вы были очень оптимистичны, вы могли бы создать несколько таких методов, как:

public static object IntegerAdd(object x, object y)
{
  return Convert.ToInt32(x) + Convert.ToInt32(y);
}

Теперь из остальной части вашего кода тот факт, что существует какая-то статическая типизация, никогда не расстраивает вас!

Недавно у меня был большой опыт IronPython и F #,

F # немного больше похож на действительно тяжелое использование var и действительно тяжелого использования вывода типа, чем это похоже на использование dynamic и позднего -связывающий. Это не редкость для некоторых С# -кодов (особенно при интенсивном использовании linq), чтобы сделать довольно много без единого явно объявленного типа, но для того, чтобы быть статически типизированным до конца, и это было бы более близкое сравнение.

Как далеко можно взять С# на пути к динамике? Недавно я написал синтаксический анализатор XML для ExpandoObject, и это было здорово, он был похож на прототип javascript.

Если вы написали это, потому что вам понравилось экспериментировать с этим подходом, то фантастический.

Если вы написали это, потому что вам нужно что-то, что он дал, то также фантастически.

И если вы написали это, потому что вам нужно что-то, что он дал, и вам понравилось экспериментировать с подходом, а затем чертовски блестяще! Что еще вы можете попросить на работе?

Если вы используете его, чтобы уклониться от сильных сторон С# в сторону сильных сторон javascript, я бы предложил осторожность. Мы уже давно знаем, что статическая типизация "старомодная". Оба подхода имеют свои сильные стороны. Я не говорю, что быть дипломатическим, я действительно думаю, что они делают. С#, предлагающая смесь обоих способов, может извлечь выгоду из некоторых сильных сторон динамического набора текста, несмотря на то, что обычно является строго типизированным языком. Это выразительная и эффективная комбинация, и нет необходимости снимать ее в одной ноге, потому что вам нравится другая нога.

Ответ 3

Нет, это не сработает.

Да, это может сработать для ВАШЕГО кода, но вы будете иметь дело с большим количеством системных библиотек, которые только что написаны таким образом, что делает все приложение не динамичным. Вы можете в основном взаимодействовать с NOTHING в .NET framework, который является статическим, не нарушая вашего жесткого требования:

можно было бы в принципе сделать С# полностью динамическим способом, выбрасывая статический тип с одной стороны, и сказать "pah, ваш старомодный!".

Это слишком тяжело. Если вы будете "с моим полным кодом", то вы сможете это сделать, но вы не спросите его.

Кроме того, в качестве побочного примечания - "динамический" не является "старым способом". Это просто ОДИН способ. Многие старые языки сильно прописаны. Сразу же после того, как ассемблерные люди пошли в значительной степени за сильными типичными языками. Затем через некоторое время наступил динамичный. Но это означает, что утверждение "старый фагоризованный путь" тоже ошибочно.