Pkl est conçu autour d’une structure de valeurs clés, d’une manière proche de JSON, plutôt que d’instructions impératives comme beaucoup d’autres langages de programmation traditionnels. Apple a conçu Pkl pour se spécialiser dans la configuration, avec quelques caractéristiques de qualité de vie soignées pour faire tourner les têtes. En effet, Pkl prend en charge les listes de propriétés JSON, XML et YAML dès le lancement pour générer des fichiers de configuration statiques.
Liaisons linguistiques
Pkl peut produire de la configuration en tant que sortie textuelle, et il peut également être intégré en tant que bibliothèque dans d’autres langages grâce à nos liaisons linguistiques.
Lorsqu’il est lié à une langue, le schéma Pkl peut être généré sous forme de classes/structures dans la langue cible. Par exemple, l’exemple Appli.pkl ci-dessus peut être généré en Swift, Go, Java et Kotlin. Pkl inclut même des commentaires de documentation dans le langage cible.
Codes Java avec Plk
import java.lang.Object; import java.lang.Override; import java.lang.String; import java.lang.StringBuilder; import java.util.Objects; import org.pkl.config.java.mapper.Named; import org.pkl.config.java.mapper.NonNull; public final class Application { /** * The hostname that this server responds to. */ public final @NonNull String hostname; /** * The port to listen on. */ public final int port; /** * The environment to deploy to. */ public final @NonNull Environment environment; /** * The database connection for this application */ public final @NonNull Database database; public Application(@Named("hostname") @NonNull String hostname, @Named("port") int port, @Named("environment") @NonNull Environment environment, @Named("database") @NonNull Database database) { this.hostname = hostname; this.port = port; this.environment = environment; this.database = database; } public static final class Database { /** * The username for this database. */ public final @NonNull String username; /** * The password for this database. */ public final @NonNull String password; /** * The remote host for this database. */ public final @NonNull String host; /** * The remote port for this database. */ public final int port; /** * The name of the database. */ public final @NonNull String dbName; public Database(@Named("username") @NonNull String username, @Named("password") @NonNull String password, @Named("host") @NonNull String host, @Named("port") long port, @Named("dbName") @NonNull String dbName) { this.username = username; this.password = password; this.host = host; this.port = port; this.dbName = dbName; } } public enum Environment { DEV("dev"), QA("qa"), PROD("prod"); private String value; private Environment(String value) { this.value = value; } @Override public String toString() { return this.value; } } }
Fonctionnalités disponibles
Voici quelques-unes des fonctionnalités disponibles avec Plk :
- Autocomplétion
- Navigation
- Validation