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

Preview:

Citation preview

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

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

Контактные данные 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

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

Recommended