Grammar of graphics — это грамматика для задания графиков, описанная Леландом Уилкинсоном в одноименной работе [1]. На основе этой работы была создана библиотека ggplot2 [2] [3] для построения графиков на языке программирования R [4]. В ней для описания графиков используется синтаксис, вдохновленный грамматикой Уилкинсона. На основе библиотеки ggplot2 в компании JetBrains была разработана библиотека Lets-Plot [5] для языка программирования Kotlin [6]. Однако API для построения графика был взят почти напрямую из ggplot2, и унаследовал его существенные недостатки — отсутствие типизации и типа безопасности, проблемы со структурой (такие как отсутствие иерархии элементов графика, разделение взаимосвязанных элементов графика). Он не задействует средства Kotlin для создания идиоматичного синтаксиса, — например, внешних контекстов с получателями.
В ходе работы была разработаны предметно-ориентированный язык для построения графиков, который эффективно использует средства языка для достижения выразительности, читаемости и удобства. Он разработан таким образом, что в него можно вставлять особенности, зависящие от движка визуализации.
Разработанное промежуточное представление графика позволяет эффективно использовать один и тот же код для построения графика для визуализации в различных движках рендеринга. Благодаря простоте и универсальности, трансляции осуществляться во многие движки и несложно реализуется.
Реализованные трансляторы позволяют использовать разработанный язык для построения графиков и визуализировать их с помощью движков Lets-Plot и Apache Echarts.
Реализованные интеграции позволяют работать с важнейшими элементами экосистемы Kotlin for Data Science.
В результате работы все поставленные задачи были выполнены.
Разработанная библиотека в ближайшем будущем будет опубликована как часть официальных библиотек для языка Kotlin — kotlinx.
Весь код разработанного программного обеспечения доступен в публичных репозиториях на платформе GitHub:
• https://github.com/AndreiKingsley/ggdsl
• https://github.com/AndreiKingsley/ggdsl-lets-plot
• https://github.com/AndreiKingsley/ggdsl-echarts
• https://github.com/AndreiKingsley/ggdsl-dataframe
[1] L. Wilkinson: The Grammar of Graphics, Springer, 1999. ISBN 0-387-98774
6.
[2] Документация ggplot2. URL: https://ggplot2.tidyverse.org/
index.html
[3] H. Wickham, D. Navarro, T. L. Pedersen: ggplot2: elegant graphics for data analysis. URL: https://ggplot2-book.org
[4] Язык программирования R. URL: https://www.r-project.org
[5] Библиотека Lets-Plot. URL: https://github.com/JetBrains/lets- plot-kotlin
[6] Язык программирования Kotlin. URL: https://kotlinlang.org
[7] Библиотека Apache ECharts. URL: https://echarts.apache.org/en/ index.html
[8] Язык программирования JavaScript. URL: https://
developer.mozilla.org/en-US/docs/Web/JavaScript
[9] Kotlin Jupyter Kernel. URL: https://github.com/Kotlin/kotlin- jupyter
[10] Jupyter Notebook. URL: https://jupyter.org
[11] Библиотека Kotlin Dataframe. URL: https://github.com/Kotlin/ dataframe
[12] The official U.S. government source for fuel economy information. URL: https://fueleconomy.gov
[13] A. Nozik: An introduction to context-oriented programming in Kotlin. URL: https://proandroiddev.com/an-introduction-context- oriented-programming-in-kotlin-2e79d316b0a2
[14] Система сборки Gradle. URL: https://gradle.org
[15] Библиотека Kotlin Test. URL: https://kotlinlang.org/api/latest/ kotlin.test/
[16] Библиотека kravis. URL: https://github.com/holgerbrandl/kravis
[17] Библиотека plotly.kt. URL: https://github.com/mipt-npm/plotly.kt
[18] Библиотека plotly. URL: https://plotly.com