SlideShare a Scribd company logo
1 of 6
Немного о F#
Анатолий Казаков
askazakov@gmail.com
УрГУ, 2011
F# — что это?
F# — функциональный язык
программирования из семейства
языков .NET Framework
Из истории
• 2002
• Microsoft Research, Cambridge
• Don Syme
• Microsoft Developer Division
• F# 2.0 — 12 апреля 2010
• F# 3.0 ?
F#. Основы
• “Hello, world”
• Инструменты (MS VS 2010, fsi.exe, …)
• Базовые понятия
– ключевое слово let
– неизменяемость
– вывод типов
– оператор (|>)
– единицы измерения
F#. Продвинутые темы
• Рекурсия
• Взаимодействие с .NET Framework
• Простая асинхронность
• F# Fundamentals
– http://msdn.microsoft.com/en-us/magazine/ff714588.aspx
• An Introduction to Functional Programming for .NET Developers
– http://msdn.microsoft.com/en-us/magazine/ee336127.aspx
• Use Functional Programming Techniques in the .NET Framework
– http://msdn.microsoft.com/en-us/magazine/cc164244.aspx
• Build Concurrent Apps From Simple F# Expressions
– http://msdn.microsoft.com/en-us/magazine/cc967279.aspx
• Don Syme's WebLog on F# and Related Topics
– http://blogs.msdn.com/b/dsyme/

More Related Content

Similar to Немного о F#

C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.Igor Shkulipa
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoftKewpaN
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonPyNSK
 
DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.mikhaelsmirnov
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Andrey Listochkin
 
Серверная разработка на платформе Microsoft
Серверная разработка на платформе MicrosoftСерверная разработка на платформе Microsoft
Серверная разработка на платформе MicrosoftEugene Agafonov
 
Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010Anton Vidishchev
 
Distributed Development Practice
Distributed Development PracticeDistributed Development Practice
Distributed Development PracticeAlexander Veremyev
 
Software engineering. Введение в специальность. Обзор
Software engineering. Введение в специальность. ОбзорSoftware engineering. Введение в специальность. Обзор
Software engineering. Введение в специальность. ОбзорPavel Egorov
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  МоскалёвПереводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван МоскалёвYandex
 
Михаил Трошев "Школа разработки интерфейсов"
Михаил Трошев "Школа разработки интерфейсов"Михаил Трошев "Школа разработки интерфейсов"
Михаил Трошев "Школа разработки интерфейсов"Yandex
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике втAnastasia Snegina
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике втAnastasia Snegina
 
Office development tips and tricks
Office development tips and tricksOffice development tips and tricks
Office development tips and tricksEugene Agafonov
 

Similar to Немного о F# (20)

Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстовСмолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
SECR
SECRSECR
SECR
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.DBD lection 1. Intro in Database Design. In Russian.
DBD lection 1. Intro in Database Design. In Russian.
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013
 
Серверная разработка на платформе Microsoft
Серверная разработка на платформе MicrosoftСерверная разработка на платформе Microsoft
Серверная разработка на платформе Microsoft
 
Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010
 
Languages b6cc1c17
Languages b6cc1c17Languages b6cc1c17
Languages b6cc1c17
 
SoftPpro экспорт МИРО по ИКТ (40 м.р.)
SoftPpro экспорт МИРО по ИКТ (40 м.р.)SoftPpro экспорт МИРО по ИКТ (40 м.р.)
SoftPpro экспорт МИРО по ИКТ (40 м.р.)
 
Distributed Development Practice
Distributed Development PracticeDistributed Development Practice
Distributed Development Practice
 
Software engineering. Введение в специальность. Обзор
Software engineering. Введение в специальность. ОбзорSoftware engineering. Введение в специальность. Обзор
Software engineering. Введение в специальность. Обзор
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  МоскалёвПереводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
 
Михаил Трошев "Школа разработки интерфейсов"
Михаил Трошев "Школа разработки интерфейсов"Михаил Трошев "Школа разработки интерфейсов"
Михаил Трошев "Школа разработки интерфейсов"
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике вт
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике вт
 
С-Tutor Экспорт МИРО по ИКТ (40 млн. руб.)
С-Tutor Экспорт МИРО по ИКТ (40 млн. руб.)С-Tutor Экспорт МИРО по ИКТ (40 млн. руб.)
С-Tutor Экспорт МИРО по ИКТ (40 млн. руб.)
 
Office development tips and tricks
Office development tips and tricksOffice development tips and tricks
Office development tips and tricks
 

Немного о F#

  • 1. Немного о F# Анатолий Казаков askazakov@gmail.com УрГУ, 2011
  • 2. F# — что это? F# — функциональный язык программирования из семейства языков .NET Framework
  • 3. Из истории • 2002 • Microsoft Research, Cambridge • Don Syme • Microsoft Developer Division • F# 2.0 — 12 апреля 2010 • F# 3.0 ?
  • 4. F#. Основы • “Hello, world” • Инструменты (MS VS 2010, fsi.exe, …) • Базовые понятия – ключевое слово let – неизменяемость – вывод типов – оператор (|>) – единицы измерения
  • 5. F#. Продвинутые темы • Рекурсия • Взаимодействие с .NET Framework • Простая асинхронность
  • 6. • F# Fundamentals – http://msdn.microsoft.com/en-us/magazine/ff714588.aspx • An Introduction to Functional Programming for .NET Developers – http://msdn.microsoft.com/en-us/magazine/ee336127.aspx • Use Functional Programming Techniques in the .NET Framework – http://msdn.microsoft.com/en-us/magazine/cc164244.aspx • Build Concurrent Apps From Simple F# Expressions – http://msdn.microsoft.com/en-us/magazine/cc967279.aspx • Don Syme's WebLog on F# and Related Topics – http://blogs.msdn.com/b/dsyme/

Editor's Notes

  1. Строго типизированный Функциональный Объектно-ориентированный Open Source (Apache license) .NET Функциональное программирование Чистые функции Функции высшего порядка Сопоставление с образцом (pattern matching)
  2. OCaml
  3. ключевое слово let связывает значение с именем. Оно может использоваться для связывания данных и значений функции, а также для связывания на локальном и глобальном уровнях. оператор (|>) используется для большей читаемости кода, разрешая вам переупорядочивать аргументы в функции, чтобы последний аргумент первым попался вам на глаза. let (|>) x f = f x В F# единицы измерения введены непосредственно в систему типов языка, поэтому числовые количества можно обозначать своими единицами. Эти единицы учитываются при вычислениях, и, если они не совпадают, сообщается об ошибках. Попытка сложить килограммы с секундами даёт ошибку, хотя поделить килограммы на секунды можно без проблем. Однако единицы мер, хоть и являются частью системы типов F#, в период компиляции удаляются. То есть в конечной .NET-сборке никакой информации о единицах мер не будет, и CLR будет оперировать всеми значениями, исходя из их нижележащих типов, а значит, никаких издержек не создаётся.
  4. Неизменяемость и функциональное программирование способствуют использованию в F# для вычислений рекурсии. Чтобы избежать чрезмерного разрастания стека, рекурсивный код можно писать так, чтобы рекурсивный вызов всегда осуществлялся в хвостовой позиции, т. е. всегда был последним перед самым возвратом из функции. (В примере с факториалом после рекурсивного вызова выполняется операция сложения) F# применяет библиотеки .NET Framework для многих задач; причём эти .NET-библиотеки могут быть задействованы из F# точно так же, как и в других .NET-языках. Cоздаётся простейшая форма, заполняется часть свойств, заполняется обработчик событий, а затем приложению указывают работать, пока пользователь не нажмёт кнопку в верхнем правом углу и не закроет окно. Стандартные действия для приложений .NET; все различия сосредоточены в синтаксисе F#.