"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)IT-Доминанта
Матвеенко Сергей - Ведущий разработчик / Positive Technologies / Россия, Санкт-Петербург
Декларативное программирование на Python, метаклассы, YAML и прочие неприятности.
Популярные применения. Подводные камни.
http://www.it-sobytie.ru/events/2040
Лекция для студентов АлтГТУ, проведенная 04.03.2015. В ходе лекции рассматривались следующие ключевые моменты:
1) Lambda project
2) Steam API
3) Date API
Лекция для сотрудников фирмы Soft-logic, проведенная 13.11.2014. В ходе лекции рассматривались следующие ключевые моменты:
1. Назначение lambda-выражений
2. Синтаксис lambda-выражений
3. Функциональные интерфейсы
4. Default и статические методы в интерфейсах
5. Ссылки на методы
6. Область действия переменных
7. Трансляция lambda-выражений
8. Сериализация lambda-выражений
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
"Вингардиум Левиоса”. Или основы декларативной магии (Матвеенко Сергей)IT-Доминанта
Матвеенко Сергей - Ведущий разработчик / Positive Technologies / Россия, Санкт-Петербург
Декларативное программирование на Python, метаклассы, YAML и прочие неприятности.
Популярные применения. Подводные камни.
http://www.it-sobytie.ru/events/2040
Лекция для студентов АлтГТУ, проведенная 04.03.2015. В ходе лекции рассматривались следующие ключевые моменты:
1) Lambda project
2) Steam API
3) Date API
Лекция для сотрудников фирмы Soft-logic, проведенная 13.11.2014. В ходе лекции рассматривались следующие ключевые моменты:
1. Назначение lambda-выражений
2. Синтаксис lambda-выражений
3. Функциональные интерфейсы
4. Default и статические методы в интерфейсах
5. Ссылки на методы
6. Область действия переменных
7. Трансляция lambda-выражений
8. Сериализация lambda-выражений
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
Дмитрий Ховрич рассказывает как использовать строгую типизацию TypeScript и писать надёжный код в функциональном стиле. А также делится знаниями как использовать функторы и монады в ежедневной фронтенд разработке.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
В докладе будут затронуты принципиальные вопросы — зачем нам программировать на шаблонах, как мы это делаем в C++11/14 и как будем это делать в C++17. Проведем параллель с функциональными языками (привет Haskell!). На примере реального кода разберем fold-expressions и увидим, чем опасен constexpr-if. А также взглянем на метапрограммирование в стиле C++11/14 и C++17 глазами компилятора.
Implicit conversions and implicit parameters are fundamental and unique features of Scala that are powerful at the same time. To use these features to their maximum potential, and do so with confidence, you have to understand the specifics of how Scala compiler’s implicits search works. I will cover this topic in details, including ways you can optimize the implicits search algorithm in your library.
The second part of my session will focus on IntelliJ IDEA and how to leverage your IDE for working with implicits. Among other helpful IDE features, I will show how to debug implicits in IntelliJ IDEA.
As examples we’ll take a look at a few Scala libraries, including Spray with its well-known Magnet pattern.
On top of that, during my talk I’ll show you a few new tips and tricks on how to be more efficient by using IntelliJ IDEA’s hidden gems when working with Scala. "
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
Дмитрий Ховрич рассказывает как использовать строгую типизацию TypeScript и писать надёжный код в функциональном стиле. А также делится знаниями как использовать функторы и монады в ежедневной фронтенд разработке.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
В докладе будут затронуты принципиальные вопросы — зачем нам программировать на шаблонах, как мы это делаем в C++11/14 и как будем это делать в C++17. Проведем параллель с функциональными языками (привет Haskell!). На примере реального кода разберем fold-expressions и увидим, чем опасен constexpr-if. А также взглянем на метапрограммирование в стиле C++11/14 и C++17 глазами компилятора.
Implicit conversions and implicit parameters are fundamental and unique features of Scala that are powerful at the same time. To use these features to their maximum potential, and do so with confidence, you have to understand the specifics of how Scala compiler’s implicits search works. I will cover this topic in details, including ways you can optimize the implicits search algorithm in your library.
The second part of my session will focus on IntelliJ IDEA and how to leverage your IDE for working with implicits. Among other helpful IDE features, I will show how to debug implicits in IntelliJ IDEA.
As examples we’ll take a look at a few Scala libraries, including Spray with its well-known Magnet pattern.
On top of that, during my talk I’ll show you a few new tips and tricks on how to be more efficient by using IntelliJ IDEA’s hidden gems when working with Scala. "
Краткое введение в Scala для разработчиков на других языках. Рассмотрены несколько простых программ, написанных с использованием красивых возможностей Scala.
Евгений Котельников. Зависимые типы в HaskellFProg
Системы зависимых типов позволяют оперировать данными на уровне типов, что может значительно повысить точность спецификации программ. Несмотря на отсутствие поддержки самих зависимых типов в Haskell, некоторые их свойства могут быть реализованы с помощью расширений языка. Будет представлен ряд техник, приближающий Haskell к возможностям языков вроде Agda, Coq и Epigram. Доклад имеет вводный характер и не требует предварительных знаний в обсуждаемых в нём темах.
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
OOP in JavaScript - Presentation by Eugene KaloshaRostyslav Siryk
Евгений Калоша рассказывает о том, как выглядит объектно-ориентированное программирование в JavaScript. Его видение сформировано также под влиянием многолетнего опыта разработки на Flex, PHP и Java.
Запись доклада:
http://flash-ripper.com/oop-in-javascript
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
2. Special unapply
class A {
def _1: Int = 1
def _2: String = "text"
}
class B {
def isEmpty = false
def get = new A
}
object K {
def unapply(s: String): B =
new B
}
"text" match {
case K(i, s) =>
println(i, s)
}
3. Case classes more
Теперь понятнее, что же на самом деле
дает case class:
case class Person(name: String)
val ivan = Person("ivan")
ivan.name
ivan match {
case Person(name) =>
}
4. Multiline strings
Многострочные литералы:
val s =
"""
|Some text.
|<- This is margin.
|It will be stripped below.
""".stripMargin
5. Interpolated strings
Можно использовать разные
интерполяторы. Дефолтные - это s и f:
val name = "Alexander"
val city = "Saint-Petersburg"
s"My name is $name. I live in $city."
val height = 1.8311d
f"$name%s’s height is $height%2.2f"
6. Regular expressions
val Decimal = """(-)?(d+)(.d*)?""".r
"1.0" match {
case Decimal(sign, i, d) =>
case _ =>
}
val Decimal(sign, i, d) = "1.0"
val iterator = Decimal findAllIn "1.0 and 2.0, 33"
for (Decimal(sign, i, d) <- iterator) {
println(i)
}
8. Other patterns
object ** {
def unapply(t: (Int, Int)): Some[(Int, Int)] = Some(t)
}
val x, y: Int = 1
(x, y) match {
case (1, 2) | (2, 1) =>
case 1 ** 1 =>
}
9. Pattern guards
Можно накладывать условия на case clause:
val x, y: Int = 1
(x, y) match {
case (a, b) if a == b =>
case _ =>
}
10. Scopes
Scopes - это место в коде, где может быть
объявлена переменная.
● { - начинает новый scope, кроме классов
● Каждый генератор в for statement начинает
новый scope
● Функция начинает новый scope для
параметров
● Case clause начинает новый scope
Переменная объявленная внутри одного scope
не видна снаружи.
11. Names shadowing
Во внутреннем scope можно скрывать имя
определенное во внешнем scope при условии,
что приоритет этого имени не ниже чем у имени
объявленного снаружи.
Это ошибка объявить переменные с одним
именем внутри одного и того же scope.
Существует два вида имен: expressions, types.
13. Implicit conversions
Преследует две главные цели:
● Extension methods
● DSL languages
Позволяет неявно в коде конвертировать
один тип в другой.
14. Implicit conversions
Простейшие примеры:
class RichString(s: String) {
def double: String = s + s
}
implicit def s2r(s: String): RichString = new RichString(s)
"text".double
val r: RichString = "text"
"""^[^d].*""".r
15. Implicit classes
В Scala 2.10 есть более простой вариант:
implicit class RichString(s: String) {
def double: String = s + s
}
"text".double
16. Value classes
Performance overhead на удаление в GC
новых объектов существенный. Поэтому для
extension methods можно сделать так:
implicit class RichString(val s: String)
extends AnyVal {
def double: String = s + s
}
"text".double
17. Implicits search
1. Сначала ищем в scope
2. Если не нашли, то расширяем scope с
помощью companion objects частей типа,
для которого ищем конверсию
18. How to debug implicits?
Неявно это хорошо, когда все работает.
Что делать, если не работает:
● -Xprint:typer параметр для компилятора
● IntelliJ IDEA view implicits tools
19. Magnet pattern
Пример использования implicits:
● Нет проблемы с type erasure для
перегруженных методов
● Автоматически выносится общая часть
для перегруженных методов
● Использование функциональных типов с
перегрузкой
20. Homework
Написать интерпретируемый язык программирования. Синтаксис и
все остальное дело вашего вкуса. Базовая спецификация
следующая:
1. Динамически типизируемый. У целых и вещественных чисел нет
переполнения.
2. Можно объявлять целые, вещественные и стоковые литералы.
3. Можно объявлять переменные и функции. В функциях можно
задавать значения по умолчанию.
4. Можно эти переменные и функции вызывать.
5. Можно создавать структуры без наследования. Просто данные,
и возможно какие-то методы.