TeaVM: dead code elimination and devirtualizationАлексей Андреев
This presentation is in Russian!
TeaVM is a AOT compiler of Java bytecode primarily targetted to JavaScript. This presentation explains technique used by to remove unused code
TMPA-2015: Lexical analysis of dynamically formed string expressionsIosif Itkin
Lexical analysis of dynamically formed string expressions
Marina Polubelova, Semyon Grigorev, Saint Petersburg State University, Saint Petersburg
12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg
Евгений Котельников. Зависимые типы в HaskellFProg
Системы зависимых типов позволяют оперировать данными на уровне типов, что может значительно повысить точность спецификации программ. Несмотря на отсутствие поддержки самих зависимых типов в Haskell, некоторые их свойства могут быть реализованы с помощью расширений языка. Будет представлен ряд техник, приближающий Haskell к возможностям языков вроде Agda, Coq и Epigram. Доклад имеет вводный характер и не требует предварительных знаний в обсуждаемых в нём темах.
OOP in JavaScript - Presentation by Eugene KaloshaRostyslav Siryk
Евгений Калоша рассказывает о том, как выглядит объектно-ориентированное программирование в JavaScript. Его видение сформировано также под влиянием многолетнего опыта разработки на Flex, PHP и Java.
Запись доклада:
http://flash-ripper.com/oop-in-javascript
http://inarocket.com
Learn BEM fundamentals as fast as possible. What is BEM (Block, element, modifier), BEM syntax, how it works with a real example, etc.
TeaVM: dead code elimination and devirtualizationАлексей Андреев
This presentation is in Russian!
TeaVM is a AOT compiler of Java bytecode primarily targetted to JavaScript. This presentation explains technique used by to remove unused code
TMPA-2015: Lexical analysis of dynamically formed string expressionsIosif Itkin
Lexical analysis of dynamically formed string expressions
Marina Polubelova, Semyon Grigorev, Saint Petersburg State University, Saint Petersburg
12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg
Евгений Котельников. Зависимые типы в HaskellFProg
Системы зависимых типов позволяют оперировать данными на уровне типов, что может значительно повысить точность спецификации программ. Несмотря на отсутствие поддержки самих зависимых типов в Haskell, некоторые их свойства могут быть реализованы с помощью расширений языка. Будет представлен ряд техник, приближающий Haskell к возможностям языков вроде Agda, Coq и Epigram. Доклад имеет вводный характер и не требует предварительных знаний в обсуждаемых в нём темах.
OOP in JavaScript - Presentation by Eugene KaloshaRostyslav Siryk
Евгений Калоша рассказывает о том, как выглядит объектно-ориентированное программирование в JavaScript. Его видение сформировано также под влиянием многолетнего опыта разработки на Flex, PHP и Java.
Запись доклада:
http://flash-ripper.com/oop-in-javascript
http://inarocket.com
Learn BEM fundamentals as fast as possible. What is BEM (Block, element, modifier), BEM syntax, how it works with a real example, etc.
How to Build a Dynamic Social Media PlanPost Planner
Stop guessing and wasting your time on networks and strategies that don’t work!
Join Rebekah Radice and Katie Lance to learn how to optimize your social networks, the best kept secrets for hot content, top time management tools, and much more!
Watch the replay here: bit.ly/socialmedia-plan
Content personalisation is becoming more prevalent. A site, it's content and/or it's products, change dynamically according to the specific needs of the user. SEO needs to ensure we do not fall behind of this trend.
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldabaux singapore
How can we take UX and Data Storytelling out of the tech context and use them to change the way government behaves?
Showcasing the truth is the highest goal of data storytelling. Because the design of a chart can affect the interpretation of data in a major way, one must wield visual tools with care and deliberation. Using quantitative facts to evoke an emotional response is best achieved with the combination of UX and data storytelling.
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
By David F. Larcker, Stephen A. Miles, and Brian Tayan
Stanford Closer Look Series
Overview:
Shareholders pay considerable attention to the choice of executive selected as the new CEO whenever a change in leadership takes place. However, without an inside look at the leading candidates to assume the CEO role, it is difficult for shareholders to tell whether the board has made the correct choice. In this Closer Look, we examine CEO succession events among the largest 100 companies over a ten-year period to determine what happens to the executives who were not selected (i.e., the “succession losers”) and how they perform relative to those who were selected (the “succession winners”).
We ask:
• Are the executives selected for the CEO role really better than those passed over?
• What are the implications for understanding the labor market for executive talent?
• Are differences in performance due to operating conditions or quality of available talent?
• Are boards better at identifying CEO talent than other research generally suggests?
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
10 июня 2015. Дмитрий Кашицын (HDsoft) дает обзор LLVM.
http://techtalks.nsu.ru
Видеозапись: https://plus.google.com/events/ctes98f7uhf19t5jlvlbk24dan4
В этом докладе мы кратко расскажем о таком звере, как LLVM, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
язык работы с КМАС (Yafoll сообщение 1)Alex Shkotin
Вводится понятие конечной многоосновной алгебраической системы (КМАС/FMAS), а также язык для работы с такими системами - YAFOLL (Yet Another First Order Logic Language).
Показывается применимость таких систем для построения математической модели части реальности, т.е. математической конструкции к которой можно обращаться с вопросами о свойствах объектов и процессов предметной области.
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...corehard_by
Язык C++, претерпев долгую эволюцию, обрёл ряд черт, характерных для функциональной парадигмы: функции стали полноправными объектами, над которыми могут выполняться операции, а аппарат шаблонов позволяет проводить вычисления на типах на этапе компиляции. Математический фундамент этих двух главных аспектов составляют, соответственно, ламбда-исчисление и теория категорий. Расширение языка этими средствами способствовало реализации на языке C++ ряда инструментов, известных из функционального программирования. Некоторые из этих реализаций вошли в стандартную библиотеку (std::function, std::bind), другие - в сторонние библиотеки, в том числе в коллекцию библиотек Boost (functional, hana). Важную роль в арсенале функционального программирования играют операции свёртки и развёртки, которые очевиднее всего определяются для списков, но также естественным образом обобщаются на другие индуктивные и коиндуктивные структуры данных. Например, суммирование списка чисел можно представить себе как свёртку списка по операции сложения, а построение списка простых множителей заданного целого числа - как развёртку. Обобщения свёртки и развёртки известны как анаморфизмы и катаморфизмы. Также в функциональном программировании находит применение понятие гиломорфизма - композиция развёртки некоторого объекта в коллекцию с последующей свёрткой её в новый объект. В докладе продемонстрировано, что свёртки, развёртки и их композиции допускают довольно простую реализацию на языке C++.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
What is Distributed Tracing (DT), why it may be useful for you.
Design of DT, how OpenTracing and OpenCensus works for Elixir/Erlang projects (libraries, problems, my experience)
Kubernetes is not needed to 90 percents of the companies.rusIvan Glushkov
Эйфория и хайп вокруг Kubernetes не дают всем компаниям возможности трезво взглянуть на сложности, проблемы и риски процесса перехода на Kubernetes.
Я попробую остудить пыл самых смелых и наивных, и показать, что этот путь очень тернист и опасен:
рассмотрю список стандартных проблем,
покажу, на что следует обратить внимание при планировании перехода,
и посоветую "ничего не трогать, пока работает".
Стандартно, банально, но может сэкономить вам массу нервов и денег.
NewSQL overview:
- History of RDBMs
- The reasons why NoSQL concept appeared
- Why NoSQL was not enough, the necessity of NewSQL
- Characteristics of NewSQL
- 7 DBs that belongs to NewSQL
- Overview Table with main properties
2. Императивное программирование
✤
Последовательность модификаций состояния!
✤
начальное значение S0 (входные значения)!
✤
конечное значение Sn (конечное значение)!
✤
модификация с помощью команд присваивания!
✤
Sn = f(S0)!
✤
абстрагирование от низкоуровневых деталей
3. Функциональное программирование
✤
вся программа - одно [матем.] выражение!
✤
выполнение - вычисление значения выражения!
✤
языковые конструкции для облегчения чтения и
написания программ!
✤
абстрактная система для записи алгоритма ->
перевод на императивный язык низкого уровня
4. Отличительные особенности ФП
✤
не используют “переменные”!
✤
нет оператора присваивания!
✤
нет циклов!
✤
функции - обычные значения!
✤
рекурсия!
✤
могут напрямую соответствовать матем. объектам
5. Примеры
✤
Всеми любимый пример “факториал”!
✤
Сама функция:
foo n = if n == 0 then 1 else n * foo (n-1)!
✤
Матем. описание:
f(n):
n! n >= 0
n<0
6. Функции императивных языков
✤
значение зависит не только от аргументов!
✤
результатом могут быть побочные эффекты!
✤
два вызова могут приводить к разному результату!
✤
вывод: это не функции в математическом смысле
7. Лямбда-исчисление (lambda calculus)
✤
создана в начале 30х годов!
✤
формализация для написания программ!
✤
простая модель для рекурсии и вложенных сред!
✤
лямбда выражения (анонимные функции)!
8. Введение в лямбда-исчисление:
лямбда-терм
✤
Переменные!
✤
Константы!
✤
Комбинации: применение функции S к аргументу T: (S T). И S и T могут быть произвольными лямбда-термами!
✤
Абстракции произвольного лямбда терма S по переменной x: λ x . S!
✤
Exp = Var | Const | Exp Exp | λ Var . Exp!
✤
Представляется в виде дерева, а не строки. Поэтому любые
договоренности написания - не часть формальной системы.
9. Введение в лямбда-исчисление:
обзор
✤
Свободные и связанные переменные:
S = (λ x y . x) (λ x . z x) => FV(S) = {z}, BV(S) = {x,y}!
✤
Подстановки
применение λx.S к аргументу T дает S[x := T]!
✤
Каррирование (R -> R -> R) = (R -> (R -> R))
(λ x y . x + y) 1 2 = (λ y . 1 + y) 2 = 1 + 2 = 3
10. Введение в лямбда-исчисление:
преобразования
✤
Альфа-преобразование:
λ x . S -> λ y . S [x := y], if y ∉ FV(T)!
✤
Бета-преобразование:
(λ x .S) T -> S [x := T]!
✤
Эта-преобразование:
λ x . T x -> T, if x ∉ FV(T)!
✤
позволяют переходить к эквивалентному терму!
✤
равенство лямбда-термов!
✤
редукция лямбда-термов, в том числе к “нормальной” форме
11. Введение в лямбда-исчисление:
пример Bool значений и условий
✤
Bool - тип, представляющий функцию от двух переменных
true ~> λ x y . x
false ~> λ x y . y!
✤
if E then E1 else E2 ~> E E1 E2
Пример:
if true then E1 else E2
= true E1 E2
= (λ x y . x) E1 E2
= λ y . E1 = E1!
✤
not p = if p then false else true
p and q = if p then q else false
p or q = if p then true else q
12. Введение в лямбда-исчисление:
пример натуральных чисел
✤
Любое натуральное число N - это выполнение функции
suc n раз:
n = suc (suc (suc … (0)) …)!
✤
Достаточно определить
suc
iszero
чтобы поддержать
m + n
m * n
pre n
13. Введение в лямбда-исчисление:
типизация
✤
дают ясное представление о функции, если знать
область определения и значений!
✤
эффективность (int8, int64) по mem и по cpu!
✤
статическая проверка программ!
✤
модульность и скрытие данных!
✤
позволяют обойти некоторые мат. противоречия
14. типизация в ЯП
✤
строгая типизация - мягкая типизация
int a[] = {1,2,3,4.0}; /* c - it’s ok */
let a = [1,2,3,4.0] - - haskell - not ok
A = [1,2,3,4,”hello”, [“world”]]. % erlang - it’s ok!
✤
динамическая типизация - статическая типизация!
✤
полиморфизм типов!
✤
автоматический вывод типов
15. Типизированное лямбда-исчисление
✤
Каждый лямбда-терм имеет тип!
✤
терм S можно применить к терму T, если их типы
правильно соотносятся (сильная типизация):
S :: a -> b
T :: a
S T :: b!
✤
Базовые типы: Int, Bool!
✤
Конструктор типов: Int; Bool; Bool -> Bool; [Bool] -> Bool
16. Отложенные (ленивые) вычисления
✤
(λ x . x + x + x) (10 + 5):
(10 + 5) + (10 + 5) + (10 + 5) - нормальная редукция
(15 + 15 + 15) - передача по значению!
✤
Передача по значению обычно более эффективна
необходима для гибридных языков!
✤
Вызов по необходимости позволяет исп. ленивые вычисления!
✤
bottom = bottom - - Haskell: никогда не завершится
const1 x = 1
- - нет необходимости проверять аргумент
const1 bottom -> 1
const1 (1/0) -> 1!
✤
Плата: снижение эффективности при сохранении отложенных вычислений
17. Пример ленивых вычислений
✤
ones = 1 : ones
numsFrom n = n : numsFrom (n+1)
square x = x^2
squres = map square (numsFrom 1)!
✤
take 5 (numsFrom 1) -> [1,2,3,4,5]!
✤
take 5 squares -> [1,4,9,16,25]
18. real world функции
✤
как в чисто функциональном языке сделать print?!
✤
сравнение функции random:
/* c-like, нет входа, случайный результат */
long random(void);
- - haskell: generator as input, new generator as output
random :: RandomGen g => g -> (a, g)
19. Введение в haskell
✤
статическая типизация:
тип объекта фиксируется в момент компиляции!
✤
строгая типизация (imp. статическая типизация):
строго определенные типы для любых операций
присваивание переменной только значения того же типа
не допускается неявное преобразование типов!
✤
чистый язык: детерменированность и отсутствие
побочных эффектов
20. Синтаксис haskell
✤
идентификаторы: someFunction, foo, foo’, abc123.
Каждому идентификатору можно сопоставить тип!
✤
Знаки операций, приоритеты между ними:
+ , - , * , / , ++!
✤
clause функций
factorial 0 = 1
factorial n = n * factorial (n-1)!
✤
guards
factorial n | n == 0 = 1
| otherwise = n * factorial (n - 1)!
✤
indentation!
✤
backquote:
div 10 5 -> 2
10 `div` 5 -> 2
21. Введение в haskell 2
✤
элементарные типы: Int, Bool, Char, Float!
✤
Конструкторы типов: кортежи (tuples), списки,
random :: g -> (a,g)
map :: (a->b) -> [a] -> [b]!
✤
алгебраические типы данных (ADT):
data Maybe a = Just a | Nothing!
24. списки как пример простоты
“ядра языка” haskell
✤
Поддержка - на уровне библиотек.!
✤
Работа со списками
[]
[1,2,3]
1:[2,3]
[1,2] ++ [3]
(1:(2:(3:([]))))!
✤
map :: (a -> b) -> [a] -> [b]
foldl :: (a -> b -> a) -> a -> [b] -> a
head :: [a] -> a
tail :: [a] -> [a]
length :: [a] -> Int
null :: [a] -> Bool!
✤
foldl (+) 0 [1,2,3,4]
map (^2) [1,2,3,4]
head [1,2,3,4]
tail [1,2,3,4]
-> 10
-> [1,4,9,16]
-> 1
-> [2,3,4]