metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-06-12 08:54 pm

Забавненько

Наткнулся в F# на то, что для строки автоматически не делается upcast до объекта, если в описании функции для этого объекта не написать что это flexible type, т.е. вместо obj - #obj.
Flexible type параметр - это пометка, что функция принимает не только значения строго этого типа, а еще и значения с типами потомков. Соответственно, чтобы передавать любой объект в функцию, нужно писать #obj
Соответственно, если этого не написать, то единственный вариант вызова вместо "fun s" будет "fun (upcast s)". Тип оператор upcast автоматически инферится при компиляции.

Причем эта падла не дает этот flexible type использовать в декларациях типов, в спецификации написано что можно использовать только в member declarations.

[identity profile] zamotivator.livejournal.com 2010-06-12 09:22 pm (UTC)(link)
Кстати, как тебе F#?

[identity profile] metaclass.livejournal.com 2010-06-12 09:31 pm (UTC)(link)
Немного создает впечатление "стащили к себе из других языков и платформ все что плохо лежало", но вообще хорошо.

[identity profile] alexey-rom.livejournal.com 2010-06-13 04:28 am (UTC)(link)
Да. Интегрировали с .NET, интегрировали, да не довыинтегрировали.

[identity profile] metaclass.livejournal.com 2010-06-13 08:15 am (UTC)(link)
Вроде там почти все в этой интеграции нормально. Я именно из-за нее его и использую, практически идеально встраивается в существующие проекты.

[identity profile] alexey-rom.livejournal.com 2010-06-13 09:24 am (UTC)(link)
Почти. Но пятна вроде этого остались.

[identity profile] geniepro.livejournal.com 2010-06-14 06:56 am (UTC)(link)
А приходится ли Вам устанавливать компилятор F# (окромя .NET) на тех машинах, где эксплуатируется Ваш смешанный C#/F# код? А то у меня тут такая лажа с этим появилась после одного из обновлений компилятора -- не мог линковать F#-рантайм к dll-ке из-за конфликта с C#-кодом, юзающим эту dll-ку. Пришлось устанавливать сам F#-транслятор.

[identity profile] metaclass.livejournal.com 2010-06-14 06:57 am (UTC)(link)
Нет, я пока F# код никуда не деплоил, он тут на этапе разработки используется для кодогенерации.