1 553 ru

Обзор нового языка программирования Pkl от Apple

Categories: 💻 Programming

Apple представила Pkl (Pickle) — открытый язык программирования, предназначенный для определения конфигурации и продвигающий модель configuration as code.

Pkl был запущен 1 февраля 2024 года в версии 0.25. Apple опубликовала гайд, в котором рассказала о ключевых особенностях и преимуществах языка.

Pkl позиционируется как безопасный, простой и приятный в использовании язык конфигурации. Поддержка Pkl уже реализована для Java, Kotlin, Swift и Go, в перспективе список пополнят другие популярные языки и платформы.

Pkl может применяться как для генерации статических файлов конфигурации в форматах JSON, XML и YAML. Документация по языку размещена на GitHub. Язык доступен для macOS, Linux, Alpine Linux и JVM.

Теперь давайте рассмотрим подробнее.

Как можно юзать Apple Pkl?

Apple Pkl можно использовать в различных сценариях, где требуется конфигурация, например:

Настройки приложения: Вы можете использовать Apple Pkl для определения настроек вашего приложения, таких как логирование, база данных, аутентификация и т.д. Например, вот как можно определить конфигурацию для  логов в Apple Pkl:

(def logging
  (dict
    :level "INFO"
    :format "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    :handlers (list
      (dict
        :type "file"
        :filename "app.log"
        :mode "a"
      )
      (dict
        :type "console"
      )
    )
  )
)pki

Пользовательские предпочтения:

 Вы можете использовать Apple Pkl для определения своих пользовательских предпочтений, таких как темы, ярлыки, плагины и т. д. Например, вот как можно задать темную тему в Apple Pkl:

(def theme
  (dict
    :name "dark"
    :background "#282c34"
    :foreground "#abb2bf"
    :cursor "#528bff"
    :selection "#3e4452"
    :colors (list
      "#282c34" "#e06c75" "#98c379" "#e5c07b"
      "#61afef" "#c678dd" "#56b6c2" "#abb2bf"
      "#545862" "#be5046" "#7c9f4b" "#d19a66"
      "#4078f2" "#a626a4" "#0184bc" "#5c6370"
    )
  )
)

Анализ данных

Вы можете юзать Apple Pkl для определения параметров анализа данных, таких как источники, фильтры, преобразования, data analysis pipeline и т. д. Например, вот как можно определить конвейер анализа данных в Apple Pkl:

(def pipeline
  (list
    (dict
      :type "source"
      :name "sales"
      :format "csv"
      :path "data/sales.csv"
    )
    (dict
      :type "filter"
      :name "region"
      :value "Europe"
    )
    (dict
      :type "transform"
      :name "profit"
      :function (lambda (row) (- (get row "revenue") (get row "cost")))
    )
    (dict
      :type "visualize"
      :name "bar"
      :x "product"
      :y "profit"
      :title "Profit by Product in Europe"
    )
  )
)

Как Apple Pkl может взаимодействовать с другими языками?

Apple Pkl может взаимодействовать с другими языками двумя способами: embedding и code generation.

Embedding

 Apple Pkl может быть встроен в качестве библиотеки в Java, Kotlin, Swift, Go и другие языки. Вы можете встраивать Apple Pkl в свои приложения для настройки во время выполнения и получать доступ к значениям Pkl из основного языка. Apple Pkl предоставляет библиотеки для Python, Kotlin и Lisp, которые позволяют загружать, разбирать, оценивать и манипулировать Pkl файлами и выражениями. Например, вот как можно загрузить файл Pkl и получить доступ к его значениям из Java и Golang:

import com.apple.pkl.Pkl;
import com.apple.pkl.PklConfig;
import com.apple.pkl.PklException;

// Load a Pkl file
PklConfig config = Pkl.load("config.pkl");
// Access a Pkl value
String host = config.getString("host");
// Modify a Pkl value
config.set("port", 8080);
// Save the modified Pkl file
Pkl.dump(config, "config.pkl");
import (
 "context"
 "github.com/apple/pkl-go"
)

// Load a Pkl file
config, err := pkl.LoadFromPath(context.Background(), "config.pkl")
if err != nil {
 panic(err)
}
// Access a Pkl value
host := config.GetString("host")
// Modify a Pkl value
config.Set("port", 8080)
// Save the modified Pkl file
err = pkl.Dump(config, "config.pkl")
if err != nil {
 panic(err)
}

Генерация кода

Вы можете использовать Apple Pkl для генерации кода для вашего целевого языка и использовать сгенерированный код в качестве статической конфигурации. Apple Pkl поддерживает генерацию кода для Java, Kotlin, Swift и Go и может генерировать классы, перечисления, константы и аннотации на основе значений Pkl. Например, вот как можно создать класс Java из файла Pkl:

# Define a Pkl value
(def person
  (dict
    :name "Alice"
    :age 25
    :gender "female"
  )
)
# Generate a Java class
(pkl-codegen-java person "Person")

Сгенеренный Java class будет выглядеть следующим образом:

public class Person {
  public static final String name = "Alice";
  public static final int age = 25;
  public static final String gender = "female";
}

Так же интересный видео обзор на pkl можно глянуть тут:

 

Comments:

Please log in to be able add comments.
непонятна польза от кодогенерации в частности на java) учитывая, что объем конфига больше чем объем получаемого кода) т.е. нужно разбираться с синтаксисом(довольно всратом) генератора, чтобы получить код который джуниор бысрее сгенерирует)