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

Высшие типы - почему возможно Scala, но не F #?

Учитывая, что реализация генерических средств CLR поддерживает больше возможностей, чем JVM, такие как reification, а дженерики JVM представляют собой простой трюк компилятора Java , почему выше -ключенные типы невозможны в F #, но возможны в Scala? Внедряет ли реализация генерических средств CLR каким-то образом на пути, в то время как отсутствие JVM одного из них позволяет вам идти дальше, чем планировалось дизайнерами; как динамические языки, позволяют делать трюки, что сильно типизированный компилятор сделает невозможным?

4b9b3361

Ответ 1

В принципе, я не уверен, что есть что-то, препятствующее включению F # из более высоких типов; CLR не поддерживает их самостоятельно, поэтому потребуется использовать более косвенную стратегию компиляции, но также и для Scala на JVM. Это может быть сложнее или сложнее сделать это поверх генерируемых генерических средств CLR, но я подозреваю, что причина, по которой F # не включает их, более философская. В то время как более высокие типы типов были бы хороши, дизайн F # имеет тенденцию поддерживать простые функции, которые хорошо взаимодействуют с другими языками .NET; более высокие типы типов, вероятно, потребуют значительных усилий для добавления к языку, усложнят вывод типа и другие части языка и, безусловно, не будут хорошо взаимодействовать с С# и другими .NET-языками, поэтому затраты (включая альтернативные издержки), вероятно, были восприняты перевесить преимущества.

Ответ 2

лучше? Предположительно.

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