Заголовок презентации
Имя и фамилия автора докладаКомпания
Контактные данные 1Контактные данные 2Контактные данные 3Контактные данные 4
Война ТиповВиктор ПолищукInfopulse
Skype: victor-crTwitter: @alkovictor
Целевая аудитория• «Низкие программисты»• «Средние программисты»• «Высокие программисты»• И прочие другие программисты, которые ничего
не знают о компиляторах, синтаксическом анализе, системах типов и формальных грамматиках, но не против узнать
Разрушители Мифов
Миф №1.Богоизбранность.
Миф №1. Богоизбранность.
Языки программирования
– божественное вмешательство
Миф №1. Богоизбранность.
Если язык хорош – тебе
не понадобится другой
Миф №1. Богоизбранность.
Как только люди познают этот язык –
они уверуют.Помоги им спастись.
慧娘?我是慧娘,我是慧娘…
Язык – это инструмент
Решает проблемы
Добавляет проблемы
Имеет баги и костыли
Имеет фичи и свистки
Пишут люди разной квалификации
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
Миф №1. Богоизбранность.
Миф №2.Главное удобный синтаксис.
Миф №2. Главное удобный синтаксис.
Лаконичность – главный
показатель качества
Миф №2. Главное удобный синтаксис.
Понятность – главный
показатель качества
Миф №2. Главное удобный синтаксис.
Минимализм – главный
показатель качества
慧娘?我是慧娘,我是慧娘…
Лаконичность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<#)
Понятность$ SET SOURCEFORMAT"FREE"IDENTIFICATION DIVISION.PROGRAM-ID. MaleSort.AUTHOR. Michael Coughlan.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL....
Минимализм>>>>>>>>,[>,]<[[>>>+<<<-]>[<+>-]<+<]>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[>>+>+>>+<<<<<-]>>[<<+>>-]<[>+>>+>>+<<<<<-]>[<+>-]>>>>[-<->]+<[>->+<<-[>>-<<[-]]]>[<+>-]>[<<+>>-]<+<[->-<<[-]<[-]<<[-]<[[>+<-]<]>>[>]<+>>>>]>[-<<+[-[>+<-]<-[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<]<<[>>+<<-]>[>[>+>>+<<<-]>[<+>-]>>>>>>[<+<+>>-]<[>+<-]<<<[>+>[<-]<[<]>>[<<+>[-]+>-]>-<<-]>>[-]+<<<[->>+<<]>>[->-<<<<<[>+<-]<[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<]>[[-]<<<<<<[>>+>>>>>+<<<<<<<-]>>[<<+>>-]>>>>>[-[>>[<<<+>>>-]<[>+<-]<-[>+<-]>]<<[[>>+<<-]<]]>]<<<<<<-]>[>>>>>>+<<<<<<-]<<[[>>>>>>>+<<<<<<<-]>[<+>-]<+<]<[[>>>>>>>>+<<<<<<<<-]>>[<+>-]<+<<]>+>[<-<<[>+<-]<[<]>[[<+>-]>]>>>[<<<<+>>>>-]<<[<+>-]>>]<[-<<+>>]>>>]<<<<<<]>>>>>>>>>>>[.>]
Синтаксис – это просто• BNF• JLS параграф #18 (а так же параграфы #2-4)• Грамматики языков примерно равнозначны• Haskell ~40+40 правил• Scala ~30+60 правил• Java ~100 правил
Миф №2. Главное удобный синтаксис.
Миф №3.Язык == Типы == Компилятор.
Миф №3. Язык == Типы == Компилятор.Компилятор спасает от ошибок
Он оптимизирует
Типизация облегчает рефакторинг
Это модно и молодежно
Эволюция: Языки Программирования
ASM
ALGOL & Lisp
Simula
C & Cobol
Java & .Net ???
Эволюция: Программисты
Проект горит!Бегом работать!!!
За мной! Ща быстро скрам проведем – побрейнстормим!
С%к@! Как же все за..
Только бы не уволили
Еще чуток, и я тим-лид
Что происходит
?
Эволюция: Системы Типов
Слабые Сильные
Почему Воюем?• Мальтузианские теории: борьба за ресурсы• Теория преобладания молодёжи: возрастная
агрессия
Анамнез• Как можно до сих пор использовать X, когда есть *** Y• Люди использующие X должны гореть в аду• Слаботипизированые языки, типа X, должны исчезнуть• ЛОЛ!!! Прикинь на X сделали ..., нет чтобы взять *** Y• Ад, смотри, че пишут на X. На *** Y, я бы за такое убивал
(***) – теплый, ламповый, богоугодно-кошерно-православный, современный, быстрый, безбажный, богатый и популярный
Кто Воюет?• Мы с ними• Они с нами• Они, там, себе• Мы, тут, у себя, иногда
StaticDynamic
Верификация
JavaC#C
JavaScriptPHPGroovyStatic
Dynamic
StrictLenient
Приведение
JavaC#C
JavaScriptPHPGroovyStrict
Lenient
ImplicitManifest
Вывод
HaskellSchemeJavaScript
JavaPascalCImplicit
Manifest
StrongWeak
<TooManyDefinitionsException>
Когда ты используешь “strong” вместо “static” или “strict”
– ты причиняешь боль этому щенку
Типовая безопасность
Well-typed program cannot “go wrong”
• Arthur John Robin Gorell Milner
Что же такое “типовая безопасность”
Безопасность памяти
Корректная семантика операций
Формализация систем типов•Context: {<v, T>,…,<v, T>}•Operation: (T, …, T) -> T
Формализация систем типов
Выражения
Типы
mono mono
poly poly
Контекст
Контекст
Γ={𝑥1:𝜎1 ,…,𝑥𝑛 :𝜎 𝑛}
Типизация
Γ⊢𝑒 :𝜎
Формальная система типов
Свободные типовые переменные
Формальная система типов
Ага. Точно.
Зовите санитаров
Вы говорите типизированные?
Куча матана
Корректность может быть доказана
Тесты – это эвристики
Перестановки: JavaScript
Перестановки: Java
Перестановки: Java 8
Перестановки: JavaScript
Перестановки: Scala
Перестановки: Scala
Перестановки: C#
Перестановки: Haskell
Что делать?
Учить
Математику
Другие языки
Computer Science
Что дальше?
Project Valhalla
• Value types• Improved generics
Correctness Proving
• JSR 308: Java Type Annotations• Functions as first-class citizens• Dependent types
ВопросыСпасибо за внимание