Как Unity использует C # в качестве языка сценариев?

8

Насколько мне известно, до сих пор я думал, что C # есть и всегда был компилируемым языком. Недавно я начал изучать Unity3d и заметил, что они предоставляют C # в качестве опции для сценариев и взаимодействия с игровыми объектами через их API (наряду с JavaScript и несколькими другими альтернативами).

Как это сделать? C # на самом деле выполняется или это абстракция, которая конвертируется в другой язык сценариев под прикрытием? Мне кажется, что существует какая-то интерпретация этой функциональности.

Брэндон Клэпп
источник
2
Что такое скриптовые языки?
Jcora
en.wikipedia.org/wiki/Category:Scripting_languages языки интерпретируются во время выполнения, а не во время компиляции.
Брэндон Клэп,
2
Но JavaScript компилируется перед выполнением в 99% случаев, а также в некоторых реализациях Python. C (++) можно интерпретировать. Я думаю, что терминология ошибочна, поскольку вы говорите не о свойстве языка, а о том, как вы его используете. Но, похоже, это не очень важно для вопроса ...
Jcora
«compiled» или «scripted» не является свойством языка программирования. Когда вы реализуете спецификацию языка, вы можете решить, хотите ли вы ее «скомпилировать» или «интерпретировать».
Иван Кукир
1
При этом то, что я всегда интерпретировал как «язык сценариев», является основой этого определения. Возможно, словарь должен был быть «истолкован», но я всегда видел их один и тот же. webopedia.com/TERM/S/scripting_language.html
Брэндон

Ответы:

15

Unity использует Mono за кулисами. Каждый раз, когда вы вносите изменения в свои скрипты на C # / UnityScript, он почти мгновенно перекомпилирует код.

Если вы посмотрите в каталог данных автономного проигрывателя Unity, то увидите, что он скомпилировал все сценарии в Assembly-CSharp.dll или аналогичную.

Так что да, C # компилируется.

Саймон Моулз
источник
Ах, я вижу .dll сейчас в каталоге данных. Это проясняет ситуацию.
Брэндон Клэпп
5
+1 за фактический ответ на вопрос и не превращение его в напыщенный семантический матч по армрестлингу
HumanCatfood
1
@BrandonClapp, если этот ответ решил ваш вопрос, пометьте его как правильный.
petervaz
1
Извините за оживление, но как Unity справляется с загрузкой и выгрузкой скомпилированной DLL в редакторе? Или я должен начать новый вопрос?
Джефф
-4

Во-первых, языки сценариев не обязательно являются интерпретируемыми языками. Некоторые языки сценариев, такие как Lua и Python, могут быть JIT-скомпилированы или интерпретированы.

И, что касается самого вопроса: потому что C # является языком сценариев, но Microsoft делает хорошую работу, чтобы он не выглядел как таковой.

В C # есть все, что нужно языку сценариев: динамическая типизация, JIT-компиляция, а не статическая компиляция, запускается на виртуальной машине ...

UBSophung
источник