Upload
victorcr
View
326
Download
0
Embed Size (px)
Citation preview
Война ТиповСильные vs
Слабые
@alkovictor#jeeconf
Виктор ПолищукПр
огра
ммир
уюс 1989 года
за деньги с 2000 года
на Java c 2002
на Java за деньги c 2004
@alḳоvίctоr vίctоr-cr vίctоr2@uḳr.nеt
Целевая аудитория
«XML программисты»
«Annotation программисты»
«ООП программисты»
И прочие другие программисты
Халк, Рушить Мифы!!!
БогоизбранностьМиф v1.0-vanilla
Миф v1.1-release
Языки программирования – божественное вмешательство
Миф v1.2g
Если язык хорош – тебе не понадобится другой
Миф v1.3-final
Если люди познают этот язык – они будут спасены.Помоги им спастись.
慧娘?我是慧娘,我是慧娘…
Язык – это инструментРешает проблемы
Добавляет проблемы
Имеет баги и костыли
Имеет фичи и свистки
Пишут люди разной квалификации
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
Главное – удобный синтаксисМиф v2.0.0-RC
Миф v2.0.0-master
Лаконичность – главный показатель качества
Миф v2.0.0-main
Понятность – главный показатель качества
Миф v2.0.0-trunk
Минимализм – главный показатель качества
慧娘?我是慧娘,我是慧娘…
Лаконичностьquicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#)
Понятность$ SET SOURCEFORMAT"FREE"IDENTIFICATION DIVISION.PROGRAM-ID. MaleSort.AUTHOR. Michael Coughlan.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL....
Минимализм>>>>>>>>,[>,]<[[>>>+<<<-]>[<+>-]<+<]>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[>>+>+>>+<<<<<-]>>[<<+>>-]<[>+>>+>>+<<<<<-]>[<+>-]>>>>[-<->]+<[>->+<<-[>>-<<[-]]]>[<+>-]>[<<+>>-]<+<[->-<<[-]<[-]<<[-]<[[>+<-]<]>>[>]<+>>>>]>[-<<+[-[>+<-]<-[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<]<<[>>+<<-]>[>[>+>>+<<<-]>[<+>-]>>>>>>[<+<+>>-]<[>+<-]<<<[>+>[<-]<[<]>>[<<+>[-]+>-]>-<<-]>>[-]+<<<[->>+<<]>>[->-<<<<<[>+<-]<[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<]>[[-]<<<<<<[>>+>>>>>+<<<<<<<-]>>[<<+>>-]>>>>>[-[>>[<<<+>>>-]<[>+<-]<-[>+<-]>]<<[[>>+<<-]<]]>]<<<<<<-]>[>>>>>>+<<<<<<-]<<[[>>>>>>>+<<<<<<<-]>[<+>-]<+<]<[[>>>>>>>>+<<<<<<<<-]>>[<+>-]<+<<]>+>[<-<<[>+<-]<[<]>[[<+>-]>]>>>[<<<<+>>>>-]<<[<+>-]>>]<[-<<+>>]>>>]<<<<<<]>>>>>>>>>>>[.>]
Синтаксис – это просто
(е)BNF
• Haskell ~40+40 правил• Scala ~30+60 правил• Java ~100 правил
JLS параграф #18 (а так же параграфы #2-4)
Грамматики языков примерно равнозначны
(e)BNF Пример <expr> ::= <term> "+" <expr> | <term>
<term> ::= <factor> "*" <term> | <factor>
<factor> ::= "(" <expr> ")" | <const>
<const> ::= integer
Язык - Это Компилятор и ТипыМиф v3.000-staging
Миф v3.015-production
Компилятор спасает от ошибок
Он оптимизирует
Типизация облегчает рефакторинг
Это модно и молодежно
АнамнезКак можно до сих пор использовать X, когда есть *** Y
Люди использующие X должны гореть в аду
Слаботипизированые языки, типа X, должны исчезнуть
ЛОЛ!!! Прикинь на X сделали ..., нет чтобы взять *** Y
Ад, смотри, че пишут на X. На *** Y, я бы за такое убивал
(***) – теплый, ламповый, богоугодно-кошерно-православный, современный, быстрый, безбажный, богатый и популярный
Верификация
StaticDynamic
Верификация
JavaC#C
JavaScriptPHPGroovyStatic
Dynamic
Приведение Типа
StrictLenient
Приведение Типа
JavaC#C
JavaScriptPHPGroovyStrict
Lenient
Вывод Типов
ImplicitManifest
Вывод Типов
HaskellSchemeJavaScript
JavaPascalCImplicit
Manifest
<TooManyDefinitionsException>
StrongWeak
Когда Ты Используешь strong Вместо static/manifest
Типовая Безопасность
Well-typed program cannot “go wrong”•Arthur John Robin Gorell Milner
Что Же Такое “Типовая Безопасность”
Безопасность памяти
Корректная семантика операций
Java 8 Puzzle
Ожидаемый Результат
String
Формализация систем типов
Формализация систем типов
Context: {<v, T>,…,<v, T>}
Operation: (T, …, T) -> T
Выражения
𝑒=𝑥𝑒=𝑒1(𝑒2)𝑒=𝜆𝑥 .𝑒𝑒=𝑙𝑒𝑡 𝑥=𝑒1𝑖𝑛𝑒2
Типы
mono
mono
poly
poly
Контекст
Γ=ϵΓ=Γ ,𝑥 :𝜎
Ну, еще немного, и я пойму!
Контекст
Γ={𝑥1:𝜎1 ,…,𝑥𝑛 :𝜎 𝑛 }
Типизация
Γ⊢𝑒 :𝜎
Формальная система типов
А, ну теперь-то все понятно! Спасибо!
Вы Говорите: «Типизированные»?
Куча матана
Корректность может быть доказана
Тесты – это эвристики
Перестановки: JavaScript
Перестановки: Java
Перестановки: Java 8
Перестановки: JavaScript
Перестановки: Scala
Перестановки: Scala
Перестановки: C#
Перестановки: Haskell
Что дальше?Шах и мат
Quicksort: Coq
Но есть один ньюанс...
Доказываем Корректность
Что дальше в Java?
Project Valhalla• Value types• Improved generics
Correctness Proving• JSR 308: Java Type Annotations• Functions as first-class citizens• Dependent types (JSR 308)
Вопросы?