Цитата:
Сообщение от
mazzy
Спасибо за ссылки, по-моему, очень занимательная презентация, заставляет о многом задуматься... К слову, качать вариант high, как оказалось, смысла не имеет: отличается от low он не качеством картинки, а тем, что слева рядом с записью презентации и примеров кода есть небольшое окошко, где показывают докладчика, как он ходит по сцене, жестикулирует, переключает кадры презентации, однако, из-за существенно рассинхронизации звука и видео (!) смотреть на него становится совсем не интересно.
Цитата:
Сообщение от
belugin
F# для мена он интересен в качестве скриптового языка - там убрано много ненужных элементов, но при этом там строгая статическая типизация - так что студия подсказывает, где ошибка.
К слову, для тех, кто не осилил видео, презентация как раз и посвящена, можно сказать, строгой типизации. Вот вкратце ее пересказ.
Итак, тема доклада:
Будущее F#: данные и сервисы у вас под рукой в строго типизированном виде (The Future of F#: Data and Services at your Finger Tips,
Strongly Typed).
Докладчик: Дон Сайм (Don Syme), некий высокопоставленный исследователь из Microsoft Research
В самом начале докладчик делает многообещающее заявление, что, мол, то, чему посвящен доклад, представляется для него в определенном смысле более важным, чем дженерики в .NET, поддержка на уровне языка программирования асинхронных вычилений (asynchronous programming support), над которыми он работает, и даже в чем-то вжнее, чем F# в целом.
Затем он выдвигает следующие утверждения:
- окружающий мир богат разнообразной информацией, и чем дальше, тем больше мы нуждаемся в компьютерах и информационных технологиях, чтобы справляться с этим разнообразием;
- современные приложения работают с самой разнообразной информацией;
- наши языки программирования, однако, не предоставляют простых возможностей для работы со всей этой разнообразной информацией: вы не найдете в спецификации языка никаких конкретных описаний типов, кроме, может, примитивных типов и строк. Конечно, есть .NET Framework, но и она по-своему скудна: там есть замечательные средства для работы с данными, такими как текст, бинарные данные, XML, но все это - очень общие типы данных.
- мы можем это исправить. К примеру, отчасти можно решить эту проблему за счет использования языков с динамической типизацией, правда, во многом оставаясь без поддержки инструментальных средств. Но как быть с языками со статической типизацией? Тут один из путей - использование ключевого слова dynamic в том же C#, другой весьма распространенный путь - использование автоматически генерируемого кода.
Далее, делается заявление, что будущее F# как раз и состоит в исправлении этого несоответствия или в предоставлении некоторых интерфейсов, к которым разработчики смогут подключить свои компоненты, чтобы исправить это несоответствие. Для этого будет использовать волшебный (sic!) инструмент под названием
Type Providers.
Для примера приводится задача построения объектной модели для строго типизированной работы с химическими элементами. Оставив в стороне этап проектирования, внимание концентрируется на том, что помимо самой объектной модели понадобится также ее информационное наполнение: данные об элементах, их названиях, обозначении, атомной массе, валентности, etc. Затем заказчику может понадобиться информация об изотопах: их наличии и характеристиках; потом он может захотеть иметь информацию о том, кто открыл тот или иной химический элемент - и вам понадобиться спроектировать и реализовать классы для представления информации о соответствующих людях. И вот пока вы всем этим занимаетесь, приходит кто-то и говорит: в моем языке программирования уже есть готовые интегрированные источники данных для работы с химическими элементами, потому что я работаю с языком, где кроме строгой типизации также реализован легкий доступ к разнообразной информации - в отличие от ваших языков, где все приходится программировать "с нуля" в виде классов, их свойств, методов и т.д. А у меня, мол, все под рукой - большая часть накопленных человечеством знаний - в виде источников данных и готовых строго типизированных моделей для работы с ними (и в примере на самом деле подключается некий
волшебный источник дынных, предоставляющий разнообразную строго типизированную информацию о химических элементах).
За счет строгой типизации поддерживаются все возможности среды разработки: IntelliSence, строгая проверка на этапе компиляции, etc. До того, как вы запустите код на выполнение, компилятор может подсказать вам, что вы, к примеру, некорректно использовали обращение к тому или иному свойству объекта в LINQ-запросе, и вы поймете, что вам нужно скорректировать запрос, скажем, добавив дополнительную фильтрацию данных.
Какие обобщения можно сделать на основе примера с химическими элементами? При работе в информационно насыщенной среде мы имеем дело с:
- организованными данными;
- огромным числом различных "типов";
- взаимосвязанными (interlinked) данными: от химических элементов мы можем перейти к информации о том, кто их открыл, оттуда - к географиеской информации о месте их проживания и т.д.;
- в качестве источников информации зачастую используется Wikipedia и тому подобные ресурсы (DBpedia, WolframAlpha, FreeBase, etc)
Извините, но на все это генераторов кода не напасешься.
Волшебство предлагаемого решения в фундаментальном изменении подхода к языку, к архитектуре компилятора и к тому, как мы думаем о языках программирования. Вместо импортирования лишь .NET-сборок, в которых определено конечное относительно небольшое множество типов, мы можем подключить к компилятору механизм предоставления типов (включая проверку типов на этапе компиляции), который за счет т.н. type providers откроет для нас огромное множество типов из окружающего мира: данные веб-сервисов и веб-сайтов, из корпоративных информационных систем, с локальной машины и т.п. Эти type providers могут специализироваться как на работе с каким-то определенным источником данных, так и на работе с определенным типом данных. Таким образом, различные источники данных оказываются интегрированными в контекст разработки программ за счет использования архитектуры адаптеров (провайдеров), отображающих данные на типы языка программирования со строгой статической типизацией.
Что вкратце обеспечивают Type Prividers:
- данные и сервисы - у вас под рукой;
- масштабируемость (буквально миллионы типов) - за счет "ленивой" подгрузки типов
- удобство навигации, поддержку IntelliSence;
- интеграцию с LINQ-запросами;
- отсутствие необходимости в явном использовании генераторов кода
Использование того или иного провайдера не отличается от использования обычной .NET-сборки: вам нужно лишь добавить его в список ссылок (references). При этом провайдеры весьма компактны, к примеру, тестовый Microsoft.Management.TypeProvider.dll занимает всего 93kb (около 130 строк кода, правда, в тестовом провайдере поддерживается работа лишь на локальной машине) - и открывает вам полный доступ к миру WMI с его сотнями и тысячами классов, событий и т.д. От провайдера требуется реализация простого и лаконичного интерфейса:
PHP код:
public interface ITypeProvider
{
Type GetType(string name, BindingFlags bindingAttr);
Expression GetInvokerExpression(MethodBase syntheticMethodBase,
ParameterExpression[] parameters);
event System.EventHandler Invalidate;
Type[] GetTypes();
}
Код провайдера может быть очень простым и занимать около сотни или больше строк; основная его задача - сопоставление информации с системой типов .NET. Архитектура провайдеров открыта, все необходимые руководства и примеры кода будут предоставлены, так что самостоятельное их написание не должно составить труда.
В заключении в качестве примера приводится Windows Azure Marketplace:
Data Market, где с одной стороны, могут быть представлены те, кто собирает и систематизирует данные, а с другой - те, кому нужные те или иные данные в структурированном виде, подходящем для автоматизированного использования. Часть данных здесь доступна бесплатно, а для определенных источников может потребоваться подписание соответствующего соглашения и использования определенных учетных данных (credentials) при доступе к источнику информации. В примере набросан код, получающий доступ к одному из источников данных, разбитых в первом приближении на следующие категории:
- здоровье и здоровый образ жизни;
- недвижимость;
- перевозки и навигация;
- погода;
- розничная торговля;
- сервисы, привязанные к местоположению (location based services);
- статистика;
- фильмы и развлечения;
- и др.
Подход с использованием провайдеров типов в перспективе обеспечивает возможность строго типизированной, подразумевающей расширяемость и открытость, не требующей явной генерации кода работы с данными:
- веб-ресурсов
- WMI, Active Directory
- веб-сервисов
- CRM-систем
- data markets
- электронных таблиц (если вы предполагаете, что они будут иметь строго определенную структуру)
- социальных сетей
- баз данных SQL
- XML
- и др.
Вопрос доступа к данным во многом стал стеной, отделяющей разработчиков, использующих строго типизированные языки программирования, и данные, к которым должны получать доступ приложения, и будущее F# в том, чтобы разрушить эту стену.