"Война типов: сильные против слабых" Виктор...
TRANSCRIPT
![Page 1: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/1.jpg)
Заголовок презентации
Имя и фамилия автора докладаКомпания
Контактные данные 1Контактные данные 2Контактные данные 3Контактные данные 4
Война ТиповВиктор ПолищукInfopulse
Skype: victor-crTwitter: @alkovictor
![Page 2: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/2.jpg)
Целевая аудитория• «Низкие программисты»• «Средние программисты»• «Высокие программисты»• И прочие другие программисты, которые ничего
не знают о компиляторах, синтаксическом анализе, системах типов и формальных грамматиках, но не против узнать
![Page 3: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/3.jpg)
Разрушители Мифов
![Page 4: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/4.jpg)
Миф №1.Богоизбранность.
![Page 5: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/5.jpg)
Миф №1. Богоизбранность.
Языки программирования
– божественное вмешательство
![Page 6: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/6.jpg)
Миф №1. Богоизбранность.
Если язык хорош – тебе
не понадобится другой
![Page 7: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/7.jpg)
Миф №1. Богоизбранность.
Как только люди познают этот язык –
они уверуют.Помоги им спастись.
![Page 8: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/8.jpg)
慧娘?我是慧娘,我是慧娘…
![Page 9: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/9.jpg)
Язык – это инструмент
Решает проблемы
Добавляет проблемы
Имеет баги и костыли
Имеет фичи и свистки
Пишут люди разной квалификации
![Page 10: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/10.jpg)
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: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/11.jpg)
Миф №1. Богоизбранность.
![Page 12: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/12.jpg)
Миф №2.Главное удобный синтаксис.
![Page 13: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/13.jpg)
Миф №2. Главное удобный синтаксис.
Лаконичность – главный
показатель качества
![Page 14: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/14.jpg)
Миф №2. Главное удобный синтаксис.
Понятность – главный
показатель качества
![Page 15: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/15.jpg)
Миф №2. Главное удобный синтаксис.
Минимализм – главный
показатель качества
![Page 16: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/16.jpg)
慧娘?我是慧娘,我是慧娘…
![Page 17: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/17.jpg)
Лаконичность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: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/18.jpg)
Понятность$ SET SOURCEFORMAT"FREE"IDENTIFICATION DIVISION.PROGRAM-ID. MaleSort.AUTHOR. Michael Coughlan.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL....
![Page 19: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/19.jpg)
Минимализм>>>>>>>>,[>,]<[[>>>+<<<-]>[<+>-]<+<]>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[>>+>+>>+<<<<<-]>>[<<+>>-]<[>+>>+>>+<<<<<-]>[<+>-]>>>>[-<->]+<[>->+<<-[>>-<<[-]]]>[<+>-]>[<<+>>-]<+<[->-<<[-]<[-]<<[-]<[[>+<-]<]>>[>]<+>>>>]>[-<<+[-[>+<-]<-[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<]<<[>>+<<-]>[>[>+>>+<<<-]>[<+>-]>>>>>>[<+<+>>-]<[>+<-]<<<[>+>[<-]<[<]>>[<<+>[-]+>-]>-<<-]>>[-]+<<<[->>+<<]>>[->-<<<<<[>+<-]<[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<]>[[-]<<<<<<[>>+>>>>>+<<<<<<<-]>>[<<+>>-]>>>>>[-[>>[<<<+>>>-]<[>+<-]<-[>+<-]>]<<[[>>+<<-]<]]>]<<<<<<-]>[>>>>>>+<<<<<<-]<<[[>>>>>>>+<<<<<<<-]>[<+>-]<+<]<[[>>>>>>>>+<<<<<<<<-]>>[<+>-]<+<<]>+>[<-<<[>+<-]<[<]>[[<+>-]>]>>>[<<<<+>>>>-]<<[<+>-]>>]<[-<<+>>]>>>]<<<<<<]>>>>>>>>>>>[.>]
![Page 20: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/20.jpg)
Синтаксис – это просто• BNF• JLS параграф #18 (а так же параграфы #2-4)• Грамматики языков примерно равнозначны• Haskell ~40+40 правил• Scala ~30+60 правил• Java ~100 правил
![Page 21: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/21.jpg)
Миф №2. Главное удобный синтаксис.
![Page 22: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/22.jpg)
Миф №3.Язык == Типы == Компилятор.
![Page 23: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/23.jpg)
Миф №3. Язык == Типы == Компилятор.Компилятор спасает от ошибок
Он оптимизирует
Типизация облегчает рефакторинг
Это модно и молодежно
![Page 24: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/24.jpg)
![Page 25: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/25.jpg)
Эволюция: Языки Программирования
ASM
ALGOL & Lisp
Simula
C & Cobol
Java & .Net ???
![Page 26: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/26.jpg)
Эволюция: Программисты
Проект горит!Бегом работать!!!
За мной! Ща быстро скрам проведем – побрейнстормим!
С%к@! Как же все за..
Только бы не уволили
Еще чуток, и я тим-лид
Что происходит
?
![Page 27: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/27.jpg)
Эволюция: Системы Типов
Слабые Сильные
![Page 28: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/28.jpg)
Почему Воюем?• Мальтузианские теории: борьба за ресурсы• Теория преобладания молодёжи: возрастная
агрессия
![Page 29: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/29.jpg)
Анамнез• Как можно до сих пор использовать X, когда есть *** Y• Люди использующие X должны гореть в аду• Слаботипизированые языки, типа X, должны исчезнуть• ЛОЛ!!! Прикинь на X сделали ..., нет чтобы взять *** Y• Ад, смотри, че пишут на X. На *** Y, я бы за такое убивал
(***) – теплый, ламповый, богоугодно-кошерно-православный, современный, быстрый, безбажный, богатый и популярный
![Page 30: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/30.jpg)
Кто Воюет?• Мы с ними• Они с нами• Они, там, себе• Мы, тут, у себя, иногда
![Page 31: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/31.jpg)
StaticDynamic
Верификация
![Page 32: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/32.jpg)
JavaC#C
JavaScriptPHPGroovyStatic
Dynamic
![Page 33: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/33.jpg)
StrictLenient
Приведение
![Page 34: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/34.jpg)
JavaC#C
JavaScriptPHPGroovyStrict
Lenient
![Page 35: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/35.jpg)
ImplicitManifest
Вывод
![Page 36: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/36.jpg)
HaskellSchemeJavaScript
JavaPascalCImplicit
Manifest
![Page 37: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/37.jpg)
StrongWeak
<TooManyDefinitionsException>
![Page 38: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/38.jpg)
Когда ты используешь “strong” вместо “static” или “strict”
– ты причиняешь боль этому щенку
![Page 39: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/39.jpg)
Типовая безопасность
Well-typed program cannot “go wrong”
• Arthur John Robin Gorell Milner
![Page 40: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/40.jpg)
Что же такое “типовая безопасность”
Безопасность памяти
Корректная семантика операций
![Page 41: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/41.jpg)
Формализация систем типов•Context: {<v, T>,…,<v, T>}•Operation: (T, …, T) -> T
![Page 42: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/42.jpg)
![Page 43: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/43.jpg)
Формализация систем типов
![Page 44: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/44.jpg)
Выражения
![Page 45: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/45.jpg)
Типы
mono mono
poly poly
![Page 46: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/46.jpg)
Контекст
![Page 47: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/47.jpg)
![Page 48: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/48.jpg)
Контекст
Γ={𝑥1:𝜎1 ,…,𝑥𝑛 :𝜎 𝑛}
![Page 49: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/49.jpg)
Типизация
Γ⊢𝑒 :𝜎
![Page 50: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/50.jpg)
Формальная система типов
![Page 51: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/51.jpg)
Свободные типовые переменные
![Page 52: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/52.jpg)
Формальная система типов
![Page 53: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/53.jpg)
Ага. Точно.
Зовите санитаров
![Page 54: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/54.jpg)
Вы говорите типизированные?
Куча матана
Корректность может быть доказана
Тесты – это эвристики
![Page 55: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/55.jpg)
Перестановки: JavaScript
![Page 56: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/56.jpg)
Перестановки: Java
![Page 57: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/57.jpg)
Перестановки: Java 8
![Page 58: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/58.jpg)
Перестановки: JavaScript
![Page 59: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/59.jpg)
Перестановки: Scala
![Page 60: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/60.jpg)
Перестановки: Scala
![Page 61: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/61.jpg)
Перестановки: C#
![Page 62: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/62.jpg)
Перестановки: Haskell
![Page 63: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/63.jpg)
Что делать?
Учить
Математику
Другие языки
Computer Science
![Page 64: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/64.jpg)
Что дальше?
Project Valhalla
• Value types• Improved generics
Correctness Proving
• JSR 308: Java Type Annotations• Functions as first-class citizens• Dependent types
![Page 65: "Война типов: сильные против слабых" Виктор Полищук](https://reader036.vdocuments.net/reader036/viewer/2022062503/587ce8441a28ab564b8b49d3/html5/thumbnails/65.jpg)
ВопросыСпасибо за внимание