Самый динамический язык динамического программирования [закрывается]

15
задан Community 23 May 2017 в 12:30
поделиться

6 ответов

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

  • Размышление: Присутствует на Java, C# (не печатать безопасно).
  • Первоклассные продолжения: ограниченная поддержка в Scala (возможно, другие)
  • Изменение объектов исполнения: Изменение типа объекта поддерживается в ограниченном виде на C# с помощью методов расширения (будет на Java 7) и неявного приведения типов в Scala. Хотя открытый класс не поддерживается, большинство случаев использования покрывается приведением типов.
  • Метапрограммирование: Я бы сказал, что метапрограммирование - это заголовок для множества сопутствующих возможностей, таких как отражение, изменение типов во время исполнения, AOP и т.д.

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

Функция открытого класса, поддерживаемая Ruby, это то, что скомпилированные языки никогда не будут поддерживать. Это наиболее гибкая форма метапрограммирования (со всеми вытекающими последствиями: безопасность, производительность, сопровождаемость.) Вы можете менять классы платформы. Она используется Ruby on Rails для создания методов доменных объектов из метаданных "на лету". На статически набранном языке вам нужно как минимум создать (или сгенерировать код) интерфейс вашего доменного объекта.

Если вы ищете "большинство диманических языков", то все гомоиконы , такие как LISP и Prolog, являются хорошими кандидатами. Интересно, что C# несколько гомоиконичен с деревьями выражений в LINQ.

2
ответ дан 1 December 2019 в 04:40
поделиться

Вам следует посетить WRRRLLD Douglas Crockford Wrrlld и увидеть его волшебство над JavaScript. JavaScript обычно написан довольно простым и простым способом, как слегка упрощенный C. Но это только поверхность. Недобываемые ключевые слова являются небольшими процентами языковой мощности. Большинство из них заключается в объектах и ​​методах, экспортируемых системой, и они полностью изменяются. Вы можете заменить / расширять методы на лету, вы можете заменить довольно глубоко укоренившиеся системные методы, гнездо EVAL () , сгенерированные нагрузки