November 22nd, 2009

glider

Вариадик темплейты

С того момента, как в сишарпе стали активно юзаться лямбды, часто встает вопрос о том, как написать метод, который в качестве одного из своих аргументов принимает любую лямбду. Проблема усложняется тем, что 1) есть написать просто Delegate, то компилер не сможет вывести тип лямбды и придется ее кастовать, что неудобно, 2) чтобы устранить недостатки подхода 1, нужно писать кучу оверлоадов (методов или классов), что является диким неудобством.

На выручку приходит концепция вариадик темплейтов - шаблонных методов и классов, которые принимают переменное число тайп-аргументов. К сожалению, ни в одном из релизных мейнстримных языков программирования ее нет. В ближайшем будущем поддержка увидит свет вместе со стандартом C++0x, но хз когда (впрочем, есть превьюшные компиляторы), а про языки .NET совсем непонятно (впрочем, тайп инференс в f# исключает многие ситуации, когда нужны вариадики). Вот неплохой документ с деталями: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2080.pdf.

Когда я обдумывал, как бы я сам делал такую штуку, мне было непонятно, как обращаться к элементам списка тайп-аргументов (например, в вариадик-методе может понадобиться использовать их, чтобы создать инстанс вариадик-класса или создать List из типов, а в вариадик-классе вдруг захочется объявить мемберы с использованием тайп-аргументов). Решение оказалось очень простым - рекурсия: обычная рекурсия для методов и рекурсивное наследование для классов. За подробностями милости прошу в документ, слинкованный выше.
glider

Бета версия 2010го ВанНоута

Сегодня на работе удалось надыбать бету 2010го офиса. Поставил на комп, с надеждой открыл OneNote и вот что меня встретило:

OneNote 2010 - What's New

Все прекрасно, только обещанного шаринга ноутбуков на SkyDrive не получилось - диалог File > Share > Web встречает сообщением "We are sorry. This service is currently not available". Не хочет работать и File > Share > Network при указании заведомо валидного урла вебдав-шары SkyDrive. Грустно. Надеюсь в релизе эту штуку таки-запилят, ибо это абсолютная killer feature. Кстати, если кто не в курсе - SkyDrive это сервис Мелкософта, на котором бесплатно доступно 25 гектар места файликами не более, чем 50 метров.

Новые штуки, которые меня порадовали:
* Win+S теперь спрашивает, в какой ноутбук сохранить вырезку экрана, а также предлагает скопировать последнюю в клипбоард - приятная мелочь.
* Страницы (самый мелкий уровень иерархии в 2007м ВанНоуте) теперь можно упорядочивать в виде дерева.
* Теперь для каждой страницы можно посмотреть версию ее изменений, а в поиске искать по авторам.
* Одной кнопкой можно разделить экран на две части - окно предыдущей программы и окно ВанНоута, чтобы параллельно смотреть куда-то и делать заметки. Той же одной кнопкой можно вернуть все обратно.
* В этом же режиме можно открыть параллельно два ВанНоута и связывать между собой их странички.
* Upd. Еще порадовало то, что теперь по умолчанию списки сразу сдвигаются вправо (как в Ворде), а не остаются на том же уровне, что и обычный текст.

Кароче все прекрасно - прилага не глючит, интерфейс не уродский, обратная совместимость есть, юзаемые мной фичи не отломаны, плагины живые, новые возможности приятно радуют глаз. Ну а когда можно будет паблишить и шарить ноутбуки, а также открывать их прямо в браузере, то получится no-brainer апгрейд.

P.S. К слову, шаринг работает для Ворда. Upd. Блин, работает-то работает, но ни просматривать, ни редактировать доки в браузере еще нельзя. Ладно, ждем второй беты или релиза.