Здравствуйте, mini_root_2, Вы писали:
M>>Большой проект — это всегда смесь противоречивых требований. И надёжно должно быть, M>>и работать быстро, и писать программу надо быстро и дёшево. Эти требования можно M>>разрешить только разделяя программу на разные уровни — внешний (где скрипты рулят), M>>внутренний (где требования промежуточные), ядро (где нужно быстро и надёжно, но M>>которое не такого большого размера, и можно его писать долго и дорого). M>>Писать эти разные части на разных языках — замечательно выходит. M>>Проблемы начинаются, когда эти разные языки пытаются соединить вместе. M>>А у них рантайм разный. И всё, приплыли. Передача данных и управления между M>>разными слоями становится настолько сложной и тормознутой, что это перечёркивает M>>все преимущества разделения проекта на разные части. И мы опять у разбитого корыта.
__>А если воспользоваться связкой Java+Groovy, Java+Scala — ведь они по сути будут __>исполняться в рамках одной JVM, поэтому никаких проблем с взаимодействием быть не должно __>(для груви можно вообще явно сформировать переменные из явы, а кроме того никто не отменял синглтон).
Посмотри на код, генерируемый Scala и ужаснись.
Или вот, пусть мне нужны параметры типов в рантайме. Чтоб я мог написать
List<String> ls = ...;
String[] arr = ls.toArray();
а не
String[] arr = ls.toArray(new String[ls.size()]);
Пусть я использую высокоуровневый язык Foovy, который работает поверх JVM, и который
генерирует код с поддержкой аргументов типов в рантайме. Он как их поддерживает?
Передаёт скрытый аргумент конструктору объекта или методу (параметризированному).
В своём собственным формате передаёт. Вот у Kiev-а есть kiev.stdlib.TypeInfo
для этого. И у Foovy будет foovy.utils.TypeInfo.
А теперь, чтоб это всё заработало вместе. Чтоб явовский List можно было использовать
интероперабельно с Foovy-вским или Kiev-ским. И чтоб Foovy-вский лист можно
было использовать в Kiev-ском коде.