Краткое введение в Scala для разработчиков на других языках. Рассмотрены несколько простых программ, написанных с использованием красивых возможностей Scala.
Краткое введение в Scala для разработчиков на других языках. Рассмотрены несколько простых программ, написанных с использованием красивых возможностей Scala.
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM LanguageCodeFest
This document introduces Fantom, a statically typed programming language that runs on the JVM. It highlights Fantom's features that improve developer productivity over Java such as type inference, literals, closures, and mixins. It also discusses Fantom's safety features like nullable types and const classes/fields. The document provides examples of Fantom's support for object-oriented, functional, declarative, and dynamic programming paradigms. It lists companies and projects using Fantom including X5, F4 IDE, Terminals, and Kloudo.com. The document encourages readers to get involved with the Fantom community and language.
CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...CodeFest
The document summarizes key details about ECMAScript 6 (ES6), the next version of JavaScript. It discusses how ES6 is being designed to address JavaScript's use in complex applications and libraries. The talk also covers many of the new language features being added in ES6, such as block scoping, arrow functions, classes, modules, and more. All information is preliminary as features may change before the finalization of ES6.
CodeFest 2014. Осипов К. — NoSQL: вангуем вместеCodeFest
This document discusses NoSQL databases and alternatives to relational databases. It covers three key aspects: data models, data consistency, and data storage. For data models, it describes popular NoSQL models like key-value, document, and column stores and compares them to the relational and graph models. For consistency, it discusses CAP theorem and tradeoffs between consistency, availability and performance. It provides examples to illustrate how different databases approach consistency. For storage, it covers technologies like B-trees, LSM trees, and consistent hashing. The document recommends keeping an eye on specific databases and technologies and suggests some existing databases that can be used.
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подходCodeFest
Code coverage metrics provide a measure of how much source code is covered during testing. While achieving high code coverage percentages, like 100%, may require significant testing effort, the primary goal of code coverage should be effectiveness over completeness. Code coverage should be used to guide test improvement and identify areas for additional testing, not as an absolute target. Automated test generation has limitations and cannot replace manual functional testing.
SECON'2016. Сергей Аверин. Javascript-фреймворки: должен остаться только одинSECON
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет. В докладе пойдет речь о том, что хорошо работающий фронтенд — это больше про слаженную работу команды, про понятный и масштабируемый код, чем про сухие циферки. Но и циферки тоже будут.
1) Какие у нас были проблемы с текущим фреймворком — UI, архитектура, код.
2) Как измеряли, что примерно стоит брать (исследование популярности).
3) Что рассматривали.
4) На пути к демо-проекту, какие были сложности (то, что уперли идею с Typescript, собственный компилятор шаблонов, четыре Flux-фреймворка и все плохи).
5) Два пилотных демо-проекта: цифры.
6) Оценка трудоемкости перехода.
SECON'2016. Аверин Сергей, Javascript-фреймворки: должен остаться только одинSECON
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет.
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM LanguageCodeFest
This document introduces Fantom, a statically typed programming language that runs on the JVM. It highlights Fantom's features that improve developer productivity over Java such as type inference, literals, closures, and mixins. It also discusses Fantom's safety features like nullable types and const classes/fields. The document provides examples of Fantom's support for object-oriented, functional, declarative, and dynamic programming paradigms. It lists companies and projects using Fantom including X5, F4 IDE, Terminals, and Kloudo.com. The document encourages readers to get involved with the Fantom community and language.
CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...CodeFest
The document summarizes key details about ECMAScript 6 (ES6), the next version of JavaScript. It discusses how ES6 is being designed to address JavaScript's use in complex applications and libraries. The talk also covers many of the new language features being added in ES6, such as block scoping, arrow functions, classes, modules, and more. All information is preliminary as features may change before the finalization of ES6.
CodeFest 2014. Осипов К. — NoSQL: вангуем вместеCodeFest
This document discusses NoSQL databases and alternatives to relational databases. It covers three key aspects: data models, data consistency, and data storage. For data models, it describes popular NoSQL models like key-value, document, and column stores and compares them to the relational and graph models. For consistency, it discusses CAP theorem and tradeoffs between consistency, availability and performance. It provides examples to illustrate how different databases approach consistency. For storage, it covers technologies like B-trees, LSM trees, and consistent hashing. The document recommends keeping an eye on specific databases and technologies and suggests some existing databases that can be used.
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подходCodeFest
Code coverage metrics provide a measure of how much source code is covered during testing. While achieving high code coverage percentages, like 100%, may require significant testing effort, the primary goal of code coverage should be effectiveness over completeness. Code coverage should be used to guide test improvement and identify areas for additional testing, not as an absolute target. Automated test generation has limitations and cannot replace manual functional testing.
SECON'2016. Сергей Аверин. Javascript-фреймворки: должен остаться только одинSECON
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет. В докладе пойдет речь о том, что хорошо работающий фронтенд — это больше про слаженную работу команды, про понятный и масштабируемый код, чем про сухие циферки. Но и циферки тоже будут.
1) Какие у нас были проблемы с текущим фреймворком — UI, архитектура, код.
2) Как измеряли, что примерно стоит брать (исследование популярности).
3) Что рассматривали.
4) На пути к демо-проекту, какие были сложности (то, что уперли идею с Typescript, собственный компилятор шаблонов, четыре Flux-фреймворка и все плохи).
5) Два пилотных демо-проекта: цифры.
6) Оценка трудоемкости перехода.
SECON'2016. Аверин Сергей, Javascript-фреймворки: должен остаться только одинSECON
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет.
Javascript-фреймворки: должен остаться только одинSergey Xek
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет.
В докладе пойдет речь о том, что производительность фронтенда — это больше про слаженную работу команды, про понятный и масштабируемый код, чем про сухие циферки. Но циферки тоже будут.
1) Какие у нас были проблемы с текущим фреймворком — UI, архитектура, код.
2) Как измеряли, что примерно стоит брать (исследование популярности).
3) Что рассматривали.
4) На пути к демо-проекту, какие были сложности (то, что уперли идею с Typescript, собственный компилятор шаблонов, четыре Flux-фреймворка и все плохи).
5) Два пилотных демо-проекта: цифры.
6) Оценка трудоемкости перехода.
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет.
В докладе пойдет речь о том, что производительность фронтенда — это больше про слаженную работу команды, про понятный и масштабируемый код, чем про сухие циферки. Но циферки тоже будут.
1) Какие у нас были проблемы с текущим фреймворком — UI, архитектура, код.
2) Как измеряли, что примерно стоит брать (исследование популярности).
3) Что рассматривали.
4) На пути к демо-проекту, какие были сложности (то, что уперли идею с Typescript, собственный компилятор шаблонов, четыре Flux-фреймворка и все плохи).
5) Два пилотных демо-проекта: цифры.
6) Оценка трудоемкости перехода.
"Formal verification of C code" Efremov D.V.
The talk covers the issue of developing correct software applying one of the types of static code analysis. The speaker will also address the matters of using such methods, their weaknesses and limitations, as well as the results they can guarantee.
PHDays VII, PDUG section, Moscow, May 24 2017.
"Формальная верификация кода на языке Си" Ефремов Д.В.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Доклад представлен на конференции PHDays VII (2017) 24 мая в секции PDUG.
Similar to CodeFest 2013. Бурмако Е. — Макросы в Скале (20)
The document discusses Uber's APIs and how they can be used to build experiences that enhance transportation. It notes that Uber has facilitated over 2 billion trips across more than 470 cities. Developers can integrate their apps with Uber's APIs to authenticate users, request rides, access ride details and context through the trip to improve users' experiences. The document provides examples of how ride context could be used to suggest local guides, play media based on trip duration, and control smart home devices like heating when approaching home.
This document discusses building and shipping software using GitHub. It provides key facts about GitHub such as being founded in 2008, having over 15 million registered users and 36 million repositories. It also shares principles from "The Zen of GitHub" including that responsive is better than fast, practicality beats purity, and favor focus over features. The document advocates for empowering businesses to build great software through culture, tools, process and a DevOps approach.
This document introduces .NET Core and its advantages over the .NET Framework. It discusses how .NET Core is cross-platform, uses the .NET Standard library, and can create self-contained applications. It also highlights how .NET Core applications are smaller, faster, and container-friendly. The document demonstrates how to use the dotnet CLI and publish .NET Core applications to reduce their deployment size. Overall, it promotes adopting .NET Core for its performance, portability, and familiar .NET APIs.
René Gröschke gave a talk on the latest features and future direction of Gradle. Some of the key points included:
- Gradle is moving to a Kotlin-based DSL for improved performance, tooling support, and bringing application patterns to builds.
- Performance improvements include a dedicated performance team that has improved Android Gradle Plugin build times significantly.
- Composite builds allow including external projects to debug dependencies or test plugins against real projects.
- Build cache and distributed build cache are incubating features to cache and share build results for faster rebuilds.
- Gradle build scans provide insights into builds to debug issues, optimize performance, and compare builds
The document discusses containerizing ASP.NET Core applications with Kubernetes. It begins with an overview of .NET Core and containers, and how they have converged. It then discusses Kubernetes and how it can help manage containers at scale. It covers Kubernetes building blocks like deployments, pods, labels, services, and replica sets. It provides examples of deploying containers with Kubernetes, including demonstrations of creating deployments, services, scaling applications, and rolling updates.
9. Что умеют?
Превращать вызовы специально объявленных
функций в произвольный код.
Было:
assert(2
+
2
==
4,
"сообщение
об
ошибке")
Стало:
if
(2
+
2
!=
4)
raise("сообщение
об
ошибке")
10. Как это работает?
• Макросы = функции, которые вызывает
компилятор
• В эти функции передается код программы
• Эти функции возвращают код
• Сгенерированный код компилируется как
написанный вручную
• Детали: http://scalamacros.org/documentation.html
12. Сильные стороны
• Исполнение произвольного кода (макросы - это
обычные скальные функции)
• Генерация произвольного кода (вызовы методов,
объявления локальных классов/функций)
• Интроспекция (код компилируемой программы,
список мемберов классов, загрузка аннотаций)
• Общение с тайпчекером (тайпчек, поиск
имплиситов, проверка сабтайпинга)
• http://www.scala-lang.org/api/current/
index.html#scala.reflect.macros.Context
13. Временные сложности
• Приходится работать на самом низком уровне
(деревья для представления кода, внутренние
структуры данных компилятора)
• API для общения макросов и компилятора пока
что не отличается стабильностью
• Проблемы с инфраструктурой (IDE, отладка,
инкрементальная компиляция, раздельная
компиляция)
15. Slick
val
coffees
=
Queryable[Coffee]
val
result
=
coffees.map(c
=>
(c.name,
c.price))
• Вроде бы обычные filter и map на самом деле
являются макросами
• Эти макросы ничего не делают с аргументами во
время компиляции, а просто сохраняют эти
функции на будущее (реификация)
• В рантайме сохраненные функции транслируются
в SQL (или во что еще угодно)
16. Play
Скала 2.9:
case
class
Person(name:
String)
implicit
val
personReads
=
(
(__
'name).reads[String]
)(Person)
Скала 2.10:
case
class
Person(name:
String)
implicit
val
personReads
=
Json.reads[Person]
Скала 2.11:
case
class
Person(name:
String)
17. SBT
Было:
myTask
<<=
(aTask,
bTask)
map
{
(a,
b)
=>
f(a,
b)
}
Стало:
myTask
:=
f(a.value,
b.value)
• Аналогично можно создавать свои нотации и в
других случаях, перегружая разнообразные
языковые конструкции (точку с запятой, условия,
циклы, объявления и так далее)
18. Sqltyped
scala>
val
q
=
sql("select
name
from
person")
scala>
q()
map
(_
get
name)
res0:
List[String]
=
List("Martin",
"Jason")
scala>
q()
map
(_
get
salary)
<console>:24:
error:
No
such
key
salary
• Сиквел-запросы, валидируемые и типизируемые
во время компиляции
• Да, макросы натурально берут и стучатся в базу
данных в компайл-тайме
19. Declosurify
for
(i
<-‐
0
until
100000000
optimized)
{
...
}
• Циклы на функциях высшего порядка это удобно
• Но Скала пока что не умеет эффективно
компилировать такие функции
• При помощи макроса можно взять красиво
записанный цикл и преобразовать его в
некрасивую, но быструю форму - бенчмарки
сыты, глаза целы
21. Прогресс не стоит на месте
С момента кодофриза Скалы 2.10.0 мы работали
над новыми фишечками не покладая рук
22. Что нас интересует?
• Как сделать написание макросов гуманным?
• Какие еще возможности дать нашим
пользователям?
• Как скрестить возможности макросов и
тайпчекера?
24. Тайп макросы
type
H2Db(url:
String)
=
macro
impl
object
Db
extends
H2Db("coffees”)
println(Db.Coffees.all)
• Уже как несколько месяцев макросы умеют
генерировать публично видимые определения
(классы, трейты, объекты)
• Очевидное применение – строго типизированная
работа с данными, но есть и более веселые вещи
25. Макро аннотации
@Serializable
class
Foo(val
x:
Int,
val
y:
String)
• Совсем недавно я научился добавлять мемберы
в произвольные классы в компилируемой
программе.
• Открывающиеся возможности очень широки:
• Кастомные кейс классы
• Удобная сериализация
• Более удобное реактивное
программирование
26. Эзотерика
Макросы + тайпчекер:
• Имплисит макросы
• Нетипизированные макросы
• Макросы, влияющие на вывод типов
• Вычисления на типах при помощи макросов
27. Macro paradise
• Кодовое название форка Скалы, в котором
тусуются штучки из этого раздела доклада
• Некоторые из фич в парадайзе уже
заинтересовали наших продакшен ребят
• Заюзать парадайз очень легко – надо всего лишь
поменять scalaOrganization в SBT билде
29. Заключение
• Макросы = легковесные и портабельные плагины
к компилятору Скалы
• Они уже с нами в продакшен релизе Скалы 2.10.0
• Такие популярные библиотеки как Slick, SBT и
Play используют макросы
• Мы не стоим на месте и постоянно развиваем
концепцию макросов в Скале
30. Вопросы и ответы
Евгений Бурмако
École Polytechnique Fédérale de Lausanne
eugene.burmako@epfl.ch
http://xeno-by.livejournal.com