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

Что такое динамический язык и почему С# не подходит?

Прослушивание подкаста, я слышал, что С# не является динамическим языком, в то время как Ruby.

Что такое "динамический язык"? Существует ли существование динамических языков, что существуют статические языки?

Почему С# - динамический язык и что другие языки являются динамическими? Если С# не является динамическим, почему Microsoft сильно продвигает его на рынок?

Также почему большинство программистов .NET сходят с ума по нему и оставляют другие языки и переходят на С#?

Почему Ruby "язык будущего"?

4b9b3361

Ответ 1

Что такое динамический язык?

Является ли динамический язык динамическим, обычно относится к типу привязки, который выполняет компилятор: статическая или поздняя привязка.

Статическое связывание просто означает, что метод (или иерархия методов для виртуальных методов) привязан во время компиляции. Во время выполнения может быть виртуальная отправка, но токен метода связан во время компиляции. Если подходящий метод не существует во время компиляции, вы получите сообщение об ошибке.

Динамические языки противоположны. Они выполняют свою работу во время работы. Они мало или вообще не проверяют существование методов во время компиляции, но вместо этого выполняют все это во время выполнения.

Почему С# не является динамическим языком?

С#, до 4.0, является статически связанным языком и, следовательно, не является динамическим языком.

Почему Ruby - это язык будущего?

Этот вопрос основан на ложной предпосылке, а именно, что существует один язык, который является будущим программирования. Сегодня нет такого языка, потому что ни один язык не является лучшим при выполнении всех различных типов программирования, которые необходимо выполнить.

Например, Ruby - отличный язык для множества различных приложений: веб-разработка является популярной. Однако я бы не написал в нем операционную систему.

Ответ 2

В динамическом языке вы можете сделать это:

var something = 1;
something = "Foo";
something = {"Something", 5.5};

Другими словами, тип не является статическим. В статически типизированном языке это приведет к ошибке компилятора.

Языки, такие как C, С++, С# и Java, статически типизированы.

Языки, такие как Ruby, Python и Javascript, динамически типизируются.

Кроме того, это не то же самое, что "сильно или слабо" напечатан. Это все по-другому.

Ответ 3

Я ошеломляю тем, что С# он охватывает фундаментальный набор парадигм программирования.

Можно сказать, что С# обладает богатым объектно-ориентированным программированием, богатое компонентное программирование, хорошо интегрированное функциональное программирование, полный набор операций запроса над различными типами источников данных (linq), элегантный подход параллельного программирования через pLinq и параллельные расширения, в следующем выпуске (С# 4.0) будут иметь мощные динамические возможности, и он почти уверен, что в С# 5.0 будет иметь надежный набор метапрограмм особенности.

Только что можно сказать, что С# он отлично справляется с интеграцией всех этих мощных в одном ящике для инструментов. Это, на мой взгляд, так, как должно быть, потому что переход с одного языка программирования на другой почти всегда очень больно.

Ответ 4

С# - это статически типизированный язык, потому что тип каждого объекта, с которым вы работаете, должен быть известен во время компиляции. На динамическом языке вам не нужно знать, какой тип объекта находится во время компиляции. Возможно, вы импортируете некоторые классы, которые вы не знаете раньше, например, импортируете все классы в папку, например, плагины или что-то еще. Или, может быть, даже тип объекта зависит от взаимодействия пользователя.

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

В динамически типизированных языках не имеет значения, что такое тип при его компиляции, он попытается вызвать метод, указанный вами по имени, если этот метод не существует на объекте, он будет запускать прогон -time исключение, поэтому до программиста, чтобы убедиться, что это не происходит или обрабатывать его соответствующим образом. Вы получаете гибкость, но немного теряете при проверке ошибок времени компиляции.

Ответ 5

Глядя на запись в Википедии, мы видим, что динамический язык - это тот, который делает вещи временем выполнения, которое большинство делает во время компиляции. Как правило, на динамическом языке переменная может быстро и легко изменять типы, и обычно не существует отдельного этапа компиляции (но, скорее, это интерпретированное выполнение или очень быстрая компиляция). С# - более традиционный язык, с использованием объявлений переменных и компиляции.

В Википедии перечислены многочисленные динамические языки.

"X - это Y будущего", с другой стороны, означает, что кто-то пытается вам что-то продать. (Не обязательно буквально, но попытка повлиять на ваши убеждения удобным для говорящего способом.)

Ответ 6

Знаете ли вы, что VB6 является как статическим, так и динамическим?

Если вы объявляете переменные с заданным типом, вы получаете статическое поведение:

Dim name as Label

Теперь вы можете получить доступ только к членам имени Label, и intellisense знает это.

Если у вас есть класс и добавьте ключевое слово implements, то ваш класс может реализовать методы другого класса. Это наследование интерфейса, которым позволяет VB6. Вы можете получить некоторый полиморфизм во время выполнения.

Вы также можете объявить такие переменные:

Dim proxy As Object

Теперь intellisense не дает вам никакой помощи, и VB6 позволит вам делать что угодно, proxy:

proxy.foo()

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

Вы также можете выполнить:

set proxy = <any instance>

и это запустится. Не имеет значения, имеет ли <any instance> метод foo или нет.

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

Обратите внимание, что во время выполнения все более динамические ошибки выполняются во время исполнения.

Ответ 7

Слова Статические и Динамические не определены.

Однако наиболее часто это означает две проблемы:

1) В статических языках тип переменной (т.е. тип значения, который переменная может содержать или указывать) не может меняться в ходе программы. Например, в С# вы объявляете тип переменной при ее определении, например:

int a;

Теперь a может удерживать только int значение - если вы попытаетесь присвоить ему строку или вызвать метод на нем, вы получите ошибку типа компиляции.

2) В статическом языке тип объекта не может быть изменен. В динамических языках объект может меняться тем, что вы можете прикрепить или удалить методы и свойства, тем самым превратив его в совершенно другой объект.

Ответ 8

В С# 3.0 все типы должны быть известны во время компиляции. Это статический язык. Динамический язык использует динамическую диспетчеризацию во время выполнения, чтобы определить тип вещей и способы вызова этих вещей. Оба типа языков имеют свои преимущества и недостатки. С# 4.0 добавит динамические возможности. Андерс Хейлсберг дал отличный разговор о статических vs. динамические языки и С# 4.0 в PDC.

Ответ 9

С# статически типизирован, т.е. int я = 0; попробуйте установить я как строку. компилятор будет жаловаться,

где в качестве python переменная, используемая для хранения целого числа, может быть установлена ​​для хранения строки,

Статический: типы являются окончательными, Динамический: типы могут быть изменены,

С# пытается добавить больше динамических функций, например var

Ответ 10

Нет истинного "языка будущего". Различные языки имеют разные цели. В лучшем случае вы можете сказать, что Ruby - это язык будущего.

Согласно Википедии:

Динамический язык программирования - это термин широко используется в информатике для описать класс высокоуровневых языки программирования, которые выполняются в времени выполнения много общего поведения, которое другие языки могут компиляция, если вообще. Эти поведение может включать расширение программы, добавив новый код, расширения объектов и определений или путем изменения системы типов, все во время выполнения программы. Эти поведение можно эмулировать почти любой язык достаточной сложности, но динамические языки обеспечивают инструменты для их использования. Большинство динамических языков динамически типизированы, но не все.

Ruby - динамический язык, а С# - нет, поскольку Ruby интерпретируется и скомпилирован С#. Однако С# содержит некоторые функции, которые делают его динамическим.

Ответ 11

Динамический язык обычно считается тем, который может динамически интерпретировать и генерировать код во время выполнения. С# не может этого сделать.

Существуют также динамически типизированные и статически типизированные языки. Динамически типизированный означает, что тип переменной не задан и может меняться во время выполнения программы.

Ответ 12

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