65
Заголовок презентации Имя и фамилия автора доклада Компания Контактные данные 1 Контактные данные 2 Контактные данные 3 Контактные данные 4 Война Типов Виктор Полищук Infopulse Skype: victor-cr Twitter: @alkovictor

"Война типов: сильные против слабых" Виктор Полищук

  • Upload
    fwdays

  • View
    780

  • Download
    4

Embed Size (px)

Citation preview

Page 1: "Война типов: сильные против слабых" Виктор Полищук

Заголовок презентации

Имя и фамилия автора докладаКомпания

Контактные данные 1Контактные данные 2Контактные данные 3Контактные данные 4

Война ТиповВиктор ПолищукInfopulse

Skype: victor-crTwitter: @alkovictor

Page 2: "Война типов: сильные против слабых" Виктор Полищук

Целевая аудитория• «Низкие программисты»• «Средние программисты»• «Высокие программисты»• И прочие другие программисты, которые ничего

не знают о компиляторах, синтаксическом анализе, системах типов и формальных грамматиках, но не против узнать

Page 3: "Война типов: сильные против слабых" Виктор Полищук

Разрушители Мифов

Page 4: "Война типов: сильные против слабых" Виктор Полищук

Миф №1.Богоизбранность.

Page 5: "Война типов: сильные против слабых" Виктор Полищук

Миф №1. Богоизбранность.

Языки программирования

– божественное вмешательство

Page 6: "Война типов: сильные против слабых" Виктор Полищук

Миф №1. Богоизбранность.

Если язык хорош – тебе

не понадобится другой

Page 7: "Война типов: сильные против слабых" Виктор Полищук

Миф №1. Богоизбранность.

Как только люди познают этот язык –

они уверуют.Помоги им спастись.

Page 8: "Война типов: сильные против слабых" Виктор Полищук

慧娘?我是慧娘,我是慧娘…

Page 9: "Война типов: сильные против слабых" Виктор Полищук

Язык – это инструмент

Решает проблемы

Добавляет проблемы

Имеет баги и костыли

Имеет фичи и свистки

Пишут люди разной квалификации

Page 10: "Война типов: сильные против слабых" Виктор Полищук

Over 9000 языков

Ada Активный Оберон Action Script C++ C++/CLI ColdFusion D

Delphi Dylan Eiffel Groovy haXe Io Java

JavaScript Компонентный Паскаль MC# Модула-3 Оберон-2 Objective-C Object Pascal

Perl Pike PHP Python Ruby Simula Smalltalk

Swift Visual Basic Visual DataFlex Vala Zonnon

Page 11: "Война типов: сильные против слабых" Виктор Полищук

Миф №1. Богоизбранность.

Page 12: "Война типов: сильные против слабых" Виктор Полищук

Миф №2.Главное удобный синтаксис.

Page 13: "Война типов: сильные против слабых" Виктор Полищук

Миф №2. Главное удобный синтаксис.

Лаконичность – главный

показатель качества

Page 14: "Война типов: сильные против слабых" Виктор Полищук

Миф №2. Главное удобный синтаксис.

Понятность – главный

показатель качества

Page 15: "Война типов: сильные против слабых" Виктор Полищук

Миф №2. Главное удобный синтаксис.

Минимализм – главный

показатель качества

Page 16: "Война типов: сильные против слабых" Виктор Полищук

慧娘?我是慧娘,我是慧娘…

Page 17: "Война типов: сильные против слабых" Виктор Полищук

Лаконичность1. [-+]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][-+]?[0-9]+)?

2. quicksort (x:xs) = quicksort small ++ (x : quicksort large)where small = [y | y <- xs, y <= x]

large = [y | y <- xs, y > x]

3. quicksort=: (($:@(<#[), (=#[), $:@(>#[)) ({~?@#)) ^: (1<#)

Page 18: "Война типов: сильные против слабых" Виктор Полищук

Понятность$ SET SOURCEFORMAT"FREE"IDENTIFICATION DIVISION.PROGRAM-ID. MaleSort.AUTHOR. Michael Coughlan.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL....

Page 19: "Война типов: сильные против слабых" Виктор Полищук

Минимализм>>>>>>>>,[>,]<[[>>>+<<<-]>[<+>-]<+<]>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[>>+>+>>+<<<<<-]>>[<<+>>-]<[>+>>+>>+<<<<<-]>[<+>-]>>>>[-<->]+<[>->+<<-[>>-<<[-]]]>[<+>-]>[<<+>>-]<+<[->-<<[-]<[-]<<[-]<[[>+<-]<]>>[>]<+>>>>]>[-<<+[-[>+<-]<-[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<]<<[>>+<<-]>[>[>+>>+<<<-]>[<+>-]>>>>>>[<+<+>>-]<[>+<-]<<<[>+>[<-]<[<]>>[<<+>[-]+>-]>-<<-]>>[-]+<<<[->>+<<]>>[->-<<<<<[>+<-]<[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<]>[[-]<<<<<<[>>+>>>>>+<<<<<<<-]>>[<<+>>-]>>>>>[-[>>[<<<+>>>-]<[>+<-]<-[>+<-]>]<<[[>>+<<-]<]]>]<<<<<<-]>[>>>>>>+<<<<<<-]<<[[>>>>>>>+<<<<<<<-]>[<+>-]<+<]<[[>>>>>>>>+<<<<<<<<-]>>[<+>-]<+<<]>+>[<-<<[>+<-]<[<]>[[<+>-]>]>>>[<<<<+>>>>-]<<[<+>-]>>]<[-<<+>>]>>>]<<<<<<]>>>>>>>>>>>[.>]

Page 20: "Война типов: сильные против слабых" Виктор Полищук

Синтаксис – это просто• BNF• JLS параграф #18 (а так же параграфы #2-4)• Грамматики языков примерно равнозначны• Haskell ~40+40 правил• Scala ~30+60 правил• Java ~100 правил

Page 21: "Война типов: сильные против слабых" Виктор Полищук

Миф №2. Главное удобный синтаксис.

Page 22: "Война типов: сильные против слабых" Виктор Полищук

Миф №3.Язык == Типы == Компилятор.

Page 23: "Война типов: сильные против слабых" Виктор Полищук

Миф №3. Язык == Типы == Компилятор.Компилятор спасает от ошибок

Он оптимизирует

Типизация облегчает рефакторинг

Это модно и молодежно

Page 24: "Война типов: сильные против слабых" Виктор Полищук
Page 25: "Война типов: сильные против слабых" Виктор Полищук

Эволюция: Языки Программирования

ASM

ALGOL & Lisp

Simula

C & Cobol

Java & .Net ???

Page 26: "Война типов: сильные против слабых" Виктор Полищук

Эволюция: Программисты

Проект горит!Бегом работать!!!

За мной! Ща быстро скрам проведем – побрейнстормим!

С%к@! Как же все за..

Только бы не уволили

Еще чуток, и я тим-лид

Что происходит

?

Page 27: "Война типов: сильные против слабых" Виктор Полищук

Эволюция: Системы Типов

Слабые Сильные

Page 28: "Война типов: сильные против слабых" Виктор Полищук

Почему Воюем?• Мальтузианские теории: борьба за ресурсы• Теория преобладания молодёжи: возрастная

агрессия

Page 29: "Война типов: сильные против слабых" Виктор Полищук

Анамнез• Как можно до сих пор использовать X, когда есть *** Y• Люди использующие X должны гореть в аду• Слаботипизированые языки, типа X, должны исчезнуть• ЛОЛ!!! Прикинь на X сделали ..., нет чтобы взять *** Y• Ад, смотри, че пишут на X. На *** Y, я бы за такое убивал

(***) – теплый, ламповый, богоугодно-кошерно-православный, современный, быстрый, безбажный, богатый и популярный

Page 30: "Война типов: сильные против слабых" Виктор Полищук

Кто Воюет?• Мы с ними• Они с нами• Они, там, себе• Мы, тут, у себя, иногда

Page 31: "Война типов: сильные против слабых" Виктор Полищук

StaticDynamic

Верификация

Page 32: "Война типов: сильные против слабых" Виктор Полищук

JavaC#C

JavaScriptPHPGroovyStatic

Dynamic

Page 33: "Война типов: сильные против слабых" Виктор Полищук

StrictLenient

Приведение

Page 34: "Война типов: сильные против слабых" Виктор Полищук

JavaC#C

JavaScriptPHPGroovyStrict

Lenient

Page 35: "Война типов: сильные против слабых" Виктор Полищук

ImplicitManifest

Вывод

Page 36: "Война типов: сильные против слабых" Виктор Полищук

HaskellSchemeJavaScript

JavaPascalCImplicit

Manifest

Page 37: "Война типов: сильные против слабых" Виктор Полищук

StrongWeak

<TooManyDefinitionsException>

Page 38: "Война типов: сильные против слабых" Виктор Полищук

Когда ты используешь “strong” вместо “static” или “strict”

– ты причиняешь боль этому щенку

Page 39: "Война типов: сильные против слабых" Виктор Полищук

Типовая безопасность

Well-typed program cannot “go wrong”

• Arthur John Robin Gorell Milner

Page 40: "Война типов: сильные против слабых" Виктор Полищук

Что же такое “типовая безопасность”

Безопасность памяти

Корректная семантика операций

Page 41: "Война типов: сильные против слабых" Виктор Полищук

Формализация систем типов•Context: {<v, T>,…,<v, T>}•Operation: (T, …, T) -> T

Page 42: "Война типов: сильные против слабых" Виктор Полищук
Page 43: "Война типов: сильные против слабых" Виктор Полищук

Формализация систем типов

Page 44: "Война типов: сильные против слабых" Виктор Полищук

Выражения

Page 45: "Война типов: сильные против слабых" Виктор Полищук

Типы

mono mono

poly poly

Page 46: "Война типов: сильные против слабых" Виктор Полищук

Контекст

Page 47: "Война типов: сильные против слабых" Виктор Полищук
Page 48: "Война типов: сильные против слабых" Виктор Полищук

Контекст

Γ={𝑥1:𝜎1 ,…,𝑥𝑛 :𝜎 𝑛}

Page 49: "Война типов: сильные против слабых" Виктор Полищук

Типизация

Γ⊢𝑒 :𝜎

Page 50: "Война типов: сильные против слабых" Виктор Полищук

Формальная система типов

Page 51: "Война типов: сильные против слабых" Виктор Полищук

Свободные типовые переменные

Page 52: "Война типов: сильные против слабых" Виктор Полищук

Формальная система типов

Page 53: "Война типов: сильные против слабых" Виктор Полищук

Ага. Точно.

Зовите санитаров

Page 54: "Война типов: сильные против слабых" Виктор Полищук

Вы говорите типизированные?

Куча матана

Корректность может быть доказана

Тесты – это эвристики

Page 55: "Война типов: сильные против слабых" Виктор Полищук

Перестановки: JavaScript

Page 56: "Война типов: сильные против слабых" Виктор Полищук

Перестановки: Java

Page 57: "Война типов: сильные против слабых" Виктор Полищук

Перестановки: Java 8

Page 58: "Война типов: сильные против слабых" Виктор Полищук

Перестановки: JavaScript

Page 59: "Война типов: сильные против слабых" Виктор Полищук

Перестановки: Scala

Page 60: "Война типов: сильные против слабых" Виктор Полищук

Перестановки: Scala

Page 61: "Война типов: сильные против слабых" Виктор Полищук

Перестановки: C#

Page 62: "Война типов: сильные против слабых" Виктор Полищук

Перестановки: Haskell

Page 63: "Война типов: сильные против слабых" Виктор Полищук

Что делать?

Учить

Математику

Другие языки

Computer Science

Page 64: "Война типов: сильные против слабых" Виктор Полищук

Что дальше?

Project Valhalla

• Value types• Improved generics

Correctness Proving

• JSR 308: Java Type Annotations• Functions as first-class citizens• Dependent types

Page 65: "Война типов: сильные против слабых" Виктор Полищук

ВопросыСпасибо за внимание