May 7th, 2013

glider

Зачем нужны имплисит макросы?

И в недавней папере и во вчерашнем посте про новые макро фичи в 2.10.2, я упоминал имплисит макросы. Это все хорошо, но очень эзотерично, поэтому наверняка у вас возник вопрос о смысле существования таких макросов. Сегодня я постараюсь наглядно объяснить.

Когда макросы только начинались, и у нас еще даже не было разделения на macro defs и macro impls, весьма интересным занятием было помечтать: "а что если сделать макро типы?", "а что если сделать макро пакеты?" и так далее. Поэтому довольно быстро мы сообразили, что нужно будет поэкспериментировать с тайп макросами и макро-аннотациями, а, например, макро пакеты не особо и нужны, т.к. они эмулируются тайп макросами, и так далее.

С имплисит макросами произошло несколько по-другому. Довольно долгое время мы не догоняли их сакраментального значения, поэтому они, в основном, служили материалом для шуток. Ну, знаете, многие боятся имплиситов и точно так же многие боятся макросов, поэтому имплисит макросы это получается вообще что-то убер. Я, кстати, предлагаю в этом посте не обсуждать кажущуюся бессмысленность имплиситов или макросов, т.к. уже есть отличные беседы на эту тему: про имплиситы и про макросы. Давайте лучше сосредоточимся собственно на теме поста.

А потом мы поняли, и с этого момента имплисит макросы стали моей любимой фичей Скалы. Итак, имплисит макросы нужны для автоматической генерации инстансов тайп классов. Есть еще несколько прикольных применений, но там именно что прикольно, а материализация тайп классов это фундаментально. Collapse )