Hacker Newsnew | past | comments | ask | show | jobs | submit | qrobit's commentslogin

Hackage recommends using Haskell's PVP[^1], but does not enforce it. That's why many haskell packages are a four-places versions: 3 required and fourth optional (but popular) that represents "other" changes, like documentation.

[^1]: https://pvp.haskell.org/


Also, iirc PVP pre-dates SemVer. For anyone going to accuse Haskell of NIH :)

Remember, everyone: Haskell is very old!


> A.B is known as the major version number

Why are they requiring two numbers to represent one (semantic) number?


I rather like this. A represents major changes like a substantial redesign of the whole API, while B catches all other breaking changes. Tiny changes to the public API of a library may not be strictly backwards compatible, even if they don't affect most users of the package or require substantial work to address.

A problem with Semver is that a jump from 101.1.2 to 102.0.0 might be a trivial upgrade, and then the jump to 103.0.0 requires rewriting half your code. With two major version numbers, that would be 1.101.1.2 to 1.102.0.0 to 2.0.0.0. That makes the difference immediately clear, and lets library authors push a 1.103.0.0 release if they really need to.

In practice, with Semver, changes like this get reflected in the package name instead of the version number. (Like maybe you go from data-frames 101.1.2 to data-frames-2 1.0.0.) But there's no consistent convention for how this works, and it always felt awkward to me, especially if the intention is that everyone migrates to the new version of the API eventually.


You put into words why I appreciate SemVer so much! It is so much better at being deterministic and therefore allows me a greater confidence in version control.

The author of a library has no idea how tightly coupled my code is to theirs and should therefore only make yes/no answers to ”is this a breaking” change.

For example, when a large ORM library si use changed a small thing like ”no longer expose db tables for certain queries because not all db engines support it anyway” (ie moving a protected property to private) it required a two week effort to restructure the code base.

> In practice, with Semver, changes like this get reflected in the package name instead of the version number.

Not once have I seen this happen. Any specific examples?


(no idea but) I feel like changing the first number has a psychological issue, but the 2nd number feels more important than just "minor" sometimes. So may as well let the schema set the mind free?

> MAY optionally have *any* number of additional components, for example 2.1.0.4

Thus making the silly example possible.


Mostly true, but I personally have it turned of for duckduckgo and it shows me some ads with [ad] label. Actually if you wanted to disable ads there, you wouldn't even need an ad blocker, there's toggle in the settings

It will be easy to check with devtools when the update is released


I was surprised not to find cantata[1], another MPD graphical client, on the list. Used it for the past three years, despite it being unmaintained for quite some time now. The client is very featureful, allows downloading lyrics and covers automatically (TBF had many mismatches, like downloading some Gillette ad as an Eminem's album cover). Most important to me is the ability to listen do directories and not artists/albums, which cantata does perfectly. Recently nixpkgs replaced cantata with a fork[2], so cantata is kind of online again.

[1]: https://github.com/CDrummond/cantata

[2]: https://github.com/nullobsi/cantata


Arch, Debian, Fedora and OpenSUSE also use nullobsi's fork as Cantata's upstream, so I'm guessing it's the de facto upstream/origin now.


Bubblewrap seems to be much more popular[^1], personally this is the first time I heard about landrun

[1]: https://repology.org/project/bubblewrap/information https://repology.org/project/landrun/information


I wanted to say Haskell with shh[^1] and stack's or nix's shebangs[^2][^3], but interpreted haskell is not particularly fast.

Also I think a Python script is reasonable if you use a type-checker with full type annotations, although they are not a silver bullet. For most scripts I use fish, which is my preferred interactive shell too.

[1]: https://hackage.haskell.org/package/shh

[2]: https://docs.haskellstack.org/en/v3.9.1/topics/scripts/

[3]: https://wiki.nixos.org/wiki/Nix-shell_shebang. On a side note, if you were to use nix's shebang for haskell scripts with dependencies, you should be using https://github.com/tomberek/- instead of impure inputs, because it allows for cached evaluation. I personally cloned the repo to my personal gitlab account, since it's small and should never change


I would argue that the barrier to entry is on par with python for a person with no experience, but you need much more time with Haskell to become proficient in it. In python, on the other hand, you can learn the basics and these will get you pretty far


I think smalltalks just didn't bring you to the right topic, if you were to reach topic you both fancy, you would definitely remember each other. If anything, having a smalltalk is nicer than staying in awkward silence.


Unless there is some vulnerability in the current version that you want to take advantage of. See e.g. mediatek exploit to unlock bootloaders without authorization by OEM or hacking PS4.


Great post! Reminds me of (UK) Passport Application game: https://jameshaydon.github.io/passport/


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: