this post was submitted on 03 Feb 2024
36 points (97.4% liked)
Programming
17443 readers
220 users here now
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
- Follow the programming.dev instance rules
- Keep content related to programming in some way
- If you're posting long videos try to add in some form of tldr for those who don't want to watch videos
Wormhole
Follow the wormhole through a path of communities [email protected]
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Disclaimer: I don’t yet understand why this is valuable.
I looked through the yaml example a bit. It looks pretty rough. This really makes familiar and readable yaml into much longer configuration. It’s much harder to read. First impression is a pass.
The biggest advantage is IDE integration.
You can type
port = 42
and instantly be told, right there as you edit the file, that you entered an invalid value (port has to be at least 4 digits). It will also flagprot = 4242
as invalid — catching the typo. That's a real advantage - just last week I took a server offline by making a human error in a config file. The server just didn't respond to network requests after the change was applied and it was part of a larger deployment... so it took time to find the mistake. Catching mistakes early is a good thing.The second big advnatage is integrated documentation - for a lot of work you won't need to read the manual in a web browser. You can just jump into the config file, hover your mouse over something, and know how it works.
It has other strengths, but those are the big two. Probably the third is it's just a nice language to read and write (plenty of other options share that, but it's hardly universal).
Some of those examples are unnecessarily complex to demonstrate rarely used features. I like this example better:
The only slightly ugly thing is the amends line, which defines a second config file that defines rules about how to properly configure this one. In that case it's a path to a file on disk, but it could also be a URL such as
https://pkl.apache.org/virtualhost
if apache were to switch to this format for VirtualHost config files. If you don't need to import rules for use case, it's an optional feature (though it is the main advantage pkl has over other alternatives).As far as I know the only widely used config format with support for strict rules is XML, but XML is so complex that almost nobody can actually get IDE integration working. The rules are just too complex. Pkl is simple, these properties need to exist, they have these types (text, number, etc) and these restrictions (minimum 4 digits, etc).