O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Война Типов
Сильные vs Слабые
@alkovictor#jeeconf
Виктор Полищук
Программирую
с 1989 года
за деньги
с 2000 года
на Java
c 2002
на Java за деньги
c 2004
@alḳоvίctоr vίctоr-c...
Целевая аудитория
«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
JavaSc...
Главное – удобный синтаксис
Миф 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 D...
Минимализм
>>>>>>>>,[>,]<[[>>>+<<<-]>[<+>-]<+<]>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[>>+
>+>>+<<<<<-]>>[<<+>>-]<[>+>>+>>+<<<<<-]>...
Синтаксис – это просто
(е)BNF
JLS параграф #18 (а так же параграфы #2-4)
Грамматики языков примерно равнозначны
• Haskell ...
(e)BNF Пример
<expr> ::= <term> "+" <expr>
| <term>
<term> ::= <factor> "*" <term>
| <factor>
<factor> ::= "(" <expr> ")"
...
Язык - Это Компилятор и Типы
Миф v3.000-staging
Миф v3.015-production
Компилятор спасает от ошибок
Он оптимизирует
Типизация облегчает рефакторинг
Это модно и молодежно
Анамнез
Как можно до сих пор использовать X, когда есть *** Y
Люди использующие X должны гореть в аду
Слаботипизированые я...
Верификация
Static
Dynamic
Верификация
Java
C#
C
JavaScript
PHP
Groovy
Static
Dynamic
Приведение Типа
Strict
Lenient
Приведение Типа
Java
C#
C
JavaScript
PHP
Groovy
Strict
Lenient
Вывод Типов
Implicit
Manifest
Вывод Типов
Haskell
Scheme
JavaScript
Java
Pascal
C
Implicit
Manifest
<TooManyDefinitionsException>
Strong
Weak
Когда Ты Используешь 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 𝜏 = 𝐷 𝜏1 … 𝜏 𝑛
poly 𝜎 = 𝜏
poly 𝜎 = ∀𝛼. 𝜎
Контекст
Γ = ϵ
Γ = Γ, 𝑥: 𝜎
Ну, еще немного, и я пойму!
Контекст
Γ = {𝑥1: 𝜎1, … , 𝑥 𝑛: 𝜎 𝑛}
Типизация
Γ ⊢ 𝑒: 𝜎
Формальная система типов
𝑥: 𝜎 ∈ Γ
Γ ⊢ 𝑥: 𝜎
Γ, 𝑥: 𝜏 ⊢ 𝑒: 𝜏′
Γ ⊢ 𝜆𝑥. 𝑒: 𝜏 → 𝜏′
𝑓𝑟𝑒𝑒 𝛼 = 𝛼
Γ ⊢ 𝑒: 𝜎′ 𝜎′ ⊑ 𝜎
Γ ⊢ 𝑒: 𝜎
Γ ⊢ 𝑒0 ∶...
Вы Говорите: «Типизированные»?
Куча матана
Корректность может быть доказана
Тесты – это эвристики
Перестановки: 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...
Вопросы?
Type War: Weak vs Strong [JEEConf 2016]
Type War: Weak vs Strong [JEEConf 2016]
Type War: Weak vs Strong [JEEConf 2016]
Type War: Weak vs Strong [JEEConf 2016]
Próximos SlideShares
Carregando em…5
×

Type War: Weak vs Strong [JEEConf 2016]

387 visualizações

Publicada em



It is well known that languages with weak typing are weaker than strong-typed ones. People fight on the matter so often and so passionately like the zealots of the past. I would like to open the wound again and bring a bit of clarity why and, more importantly, how we have to fight those battles from now on.

Let’s compare what we have in Java with other languages and feel the difference. Pragmatic one. I will show a bit of pain which, nowadays, a compiler takes away from a developer so the latter can “safely” code. Also I will try to answer the questions “which one is better” and “where are we going”.

It is always fun to see how little you know and how much is behind the curtains.

Publicada em: Software
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Type War: Weak vs Strong [JEEConf 2016]

  1. 1. Война Типов Сильные vs Слабые @alkovictor#jeeconf
  2. 2. Виктор Полищук Программирую с 1989 года за деньги с 2000 года на Java c 2002 на Java за деньги c 2004 @alḳоvίctоr vίctоr-cr vίctоr2@uḳr.nеt
  3. 3. Целевая аудитория «XML программисты» «Annotation программисты» «ООП программисты» И прочие другие программисты
  4. 4. Халк, Рушить Мифы!!!
  5. 5. Богоизбранность Миф v1.0-vanilla
  6. 6. Миф v1.1-release Языки программирования – божественное вмешательство
  7. 7. Миф v1.2g Если язык хорош – тебе не понадобится другой
  8. 8. Миф v1.3-final Если люди познают этот язык – они будут спасены. Помоги им спастись.
  9. 9. 慧娘?我是慧娘,我是慧娘…
  10. 10. Язык – это инструмент Решает проблемы Добавляет проблемы Имеет баги и костыли Имеет фичи и свистки Пишут люди разной квалификации
  11. 11. 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
  12. 12. Главное – удобный синтаксис Миф v2.0.0-RC
  13. 13. Миф v2.0.0-master Лаконичность – главный показатель качества
  14. 14. Миф v2.0.0-main Понятность – главный показатель качества
  15. 15. Миф v2.0.0-trunk Минимализм – главный показатель качества
  16. 16. 慧娘?我是慧娘,我是慧娘…
  17. 17. Лаконичность quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#)
  18. 18. Понятность $ SET SOURCEFORMAT"FREE" IDENTIFICATION DIVISION. PROGRAM-ID. MaleSort. AUTHOR. Michael Coughlan. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. ...
  19. 19. Минимализм >>>>>>>>,[>,]<[[>>>+<<<-]>[<+>-]<+<]>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[>>+ >+>>+<<<<<-]>>[<<+>>-]<[>+>>+>>+<<<<<-]>[<+>-]>>>>[-<->]+<[>->+<<-[>>- <<[-]]]>[<+>-]>[<<+>>-]<+<[->-<<[-]<[-]<<[-]<[[>+<-]<]>>[>]<+>>>>]>[-< <+[-[>+<-]<-[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<]<<[>>+<<-]>[>[>+> >+<<<-]>[<+>-]>>>>>>[<+<+>>-]<[>+<-]<<<[>+>[<-]<[<]>>[<<+>[-]+>-]>-<<- ]>>[-]+<<<[->>+<<]>>[->-<<<<<[>+<-]<[>+<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-] <<]>[[-]<<<<<<[>>+>>>>>+<<<<<<<-]>>[<<+>>-]>>>>>[-[>>[<<<+>>>-]<[>+<-] <-[>+<-]>]<<[[>>+<<-]<]]>]<<<<<<-]>[>>>>>>+<<<<<<-]<<[[>>>>>>>+<<<<<<< -]>[<+>-]<+<]<[[>>>>>>>>+<<<<<<<<-]>>[<+>-]<+<<]>+>[<-<<[>+<-]<[<]>[[< +>-]>]>>>[<<<<+>>>>-]<<[<+>-]>>]<[-<<+>>]>>>]<<<<<<]>>>>>>>>>>>[.>]
  20. 20. Синтаксис – это просто (е)BNF JLS параграф #18 (а так же параграфы #2-4) Грамматики языков примерно равнозначны • Haskell ~40+40 правил • Scala ~30+60 правил • Java ~100 правил
  21. 21. (e)BNF Пример <expr> ::= <term> "+" <expr> | <term> <term> ::= <factor> "*" <term> | <factor> <factor> ::= "(" <expr> ")" | <const> <const> ::= integer
  22. 22. Язык - Это Компилятор и Типы Миф v3.000-staging
  23. 23. Миф v3.015-production Компилятор спасает от ошибок Он оптимизирует Типизация облегчает рефакторинг Это модно и молодежно
  24. 24. Анамнез Как можно до сих пор использовать X, когда есть *** Y Люди использующие X должны гореть в аду Слаботипизированые языки, типа X, должны исчезнуть ЛОЛ!!! Прикинь на X сделали ..., нет чтобы взять *** Y Ад, смотри, че пишут на X. На *** Y, я бы за такое убивал (***) – теплый, ламповый, богоугодно-кошерно-православный, современный, быстрый, безбажный, богатый и популярный
  25. 25. Верификация Static Dynamic
  26. 26. Верификация Java C# C JavaScript PHP Groovy Static Dynamic
  27. 27. Приведение Типа Strict Lenient
  28. 28. Приведение Типа Java C# C JavaScript PHP Groovy Strict Lenient
  29. 29. Вывод Типов Implicit Manifest
  30. 30. Вывод Типов Haskell Scheme JavaScript Java Pascal C Implicit Manifest
  31. 31. <TooManyDefinitionsException> Strong Weak
  32. 32. Когда Ты Используешь strong Вместо static/manifest
  33. 33. Типовая Безопасность Well-typed program cannot “go wrong” •Arthur John Robin Gorell Milner
  34. 34. Что Же Такое “Типовая Безопасность” Безопасность памяти Корректная семантика операций
  35. 35. Java 8 Puzzle
  36. 36. Ожидаемый Результат String
  37. 37. Формализация систем типов
  38. 38. Формализация систем типов Context: {<v, T>,…,<v, T>} Operation: (T, …, T) -> T
  39. 39. Выражения 𝑒 = 𝑥 𝑒 = 𝑒1(𝑒2) 𝑒 = 𝜆𝑥. 𝑒 𝑒 = 𝑙𝑒𝑡 𝑥 = 𝑒1 𝑖𝑛 𝑒2
  40. 40. Типы mono 𝜏 = 𝛼 mono 𝜏 = 𝐷 𝜏1 … 𝜏 𝑛 poly 𝜎 = 𝜏 poly 𝜎 = ∀𝛼. 𝜎
  41. 41. Контекст Γ = ϵ Γ = Γ, 𝑥: 𝜎
  42. 42. Ну, еще немного, и я пойму!
  43. 43. Контекст Γ = {𝑥1: 𝜎1, … , 𝑥 𝑛: 𝜎 𝑛}
  44. 44. Типизация Γ ⊢ 𝑒: 𝜎
  45. 45. Формальная система типов 𝑥: 𝜎 ∈ Γ Γ ⊢ 𝑥: 𝜎 Γ, 𝑥: 𝜏 ⊢ 𝑒: 𝜏′ Γ ⊢ 𝜆𝑥. 𝑒: 𝜏 → 𝜏′ 𝑓𝑟𝑒𝑒 𝛼 = 𝛼 Γ ⊢ 𝑒: 𝜎′ 𝜎′ ⊑ 𝜎 Γ ⊢ 𝑒: 𝜎 Γ ⊢ 𝑒0 ∶ 𝜏 → 𝜏′ Γ ⊢ 𝑒1: 𝜏 Γ ⊢ 𝑒0(𝑒1): 𝜏′ Γ ⊢ 𝑒0 ∶ 𝜎 Γ, 𝑥: 𝜎 ⊢ 𝑒1: 𝜏 Γ ⊢ 𝑙𝑒𝑡 𝑥 = 𝑒0 𝑖𝑛 𝑒1 ∶ 𝜏 𝑓𝑟𝑒𝑒 Γ = 𝑥:𝜎∈Γ 𝑓𝑟𝑒𝑒(𝜎) Γ ⊢ 𝑒: 𝜎 𝛼 ∉ 𝑓𝑟𝑒𝑒(Γ) Γ ⊢ 𝑒: ∀𝛼. 𝜎
  46. 46. Вы Говорите: «Типизированные»? Куча матана Корректность может быть доказана Тесты – это эвристики
  47. 47. Перестановки: JavaScript
  48. 48. Перестановки: Java
  49. 49. Перестановки: Java 8
  50. 50. Перестановки: JavaScript
  51. 51. Перестановки: Scala
  52. 52. Перестановки: Scala
  53. 53. Перестановки: C#
  54. 54. Перестановки: Haskell
  55. 55. Что дальше? Шах и мат
  56. 56. Quicksort: Coq Но есть один ньюанс...
  57. 57. Доказываем Корректность
  58. 58. Что дальше в Java? Project Valhalla • Value types • Improved generics Correctness Proving • JSR 308: Java Type Annotations • Functions as first-class citizens • Dependent types (JSR 308)
  59. 59. Вопросы?

×