-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
versionNumbers.scroll
140 lines (91 loc) · 4.58 KB
/
versionNumbers.scroll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
date 2024-05-25
tags All Programming Data Scroll
title What can we learn from programming language version numbers?
header.scroll
printTitle
# Analyzing the version numbers of 621 programming languages
// *including some other things that are closely related to PLs.
mediumColumns 1
plVersions/versionNumbers.png
caption Interactive Version
https://observablehq.com/@breck/version-numbers
https://observablehq.com/@breck/version-numbers
I just pushed version 93.0.0 of my language Scroll. *Version 93*!
dateline
https://scroll.pub/ Scroll
endSnippet
Why so many versions? I use Tom Preston-Warner's Semantic Versioning (2011).
https://semver.org/ Semantic Versioning
https://tom.preston-werner.com/ Tom Preston-Warner's
In particular, I followed his advice in Major Version Numbers are Not Sacred.
https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred Major Version Numbers are Not Sacred
***
Pushing so many major versions was no big deal because Scroll was a toy.
But Scroll now has a novel feature that makes it very useful.
scrollsets.html novel feature
I need to decide if I should ship fewer major versions with higher quality.
***
Let's do some research on what other programming language developers are doing.
I added version number data to over 600 languages in PLDB.
https://pldb.io/lists/explorer.html#columns=rank~name~id~appeared~tags~creators~latestMajorVersion~latestVersion~usesSemanticVersioning~foundationScore&searchBuilder=%7B%22criteria%22%3A%5B%7B%22condition%22%3A%22%3D%22%2C%22data%22%3A%22usesSemanticVersioning%22%2C%22origData%22%3A%22usesSemanticVersioning%22%2C%22type%22%3A%22boolean%22%2C%22value%22%3A%5B%22true%22%5D%7D%5D%2C%22logic%22%3A%22AND%22%7D version number data to over 600 languages in PLDB
***
# What major version are programming languages on?
dashboard
0 Min
1 Median
2.9 Average
73% < v3
95% < v10
99% < v30
Wow! No languages in the top 400 have surpassed 30 major versions.
Erlang, at version 27, ranks #34 and is the only top 100 language with more than 25 major versions.
https://pldb.io/concepts/erlang.html Erlang
My language, at version 93, is a huge outlier. Maybe I've done something wrong 😳.
// Such an outlier that I filtered it from the charts on this page
***
Let's plot version number by rank.
plVersions/versionRanks.png
openGraph
link https://datawrapper.dwcdn.net/XLcIn/1/
caption Interactive Version
https://datawrapper.dwcdn.net/XLcIn/1/
We can see that there is a positive correlation between how many major versions a language has and how popular it is.
However, we can also see that 5 of the top 10 languages are on version 5 or less.
We can also see that ~15 of the top 25 languages are on version 5 or less.
*If you have a great model of your core ideas, you can ship fewer major versions.*
***
? What's the relationship between age of the language and the current major version?
plVersions/ageVsVersion.png
link https://datawrapper.dwcdn.net/kcWGg/1/
caption Interactive Version
https://datawrapper.dwcdn.net/kcWGg/1/
? Did Semantic Versioning, published in 2011, change release rates of major versions of programming languages?
No. As you can see:
plVersions/releaseRates.png
link https://datawrapper.dwcdn.net/AiGaB/1/
caption Interactive Version
https://datawrapper.dwcdn.net/AiGaB/1/
***
# So, what did I learn?
TIL I did SemVer wrong. In particular, I missed this part:
> If you’re changing the API every day you should...still be in version 0.y.z
Whoops!
It took me about 5 years to figure out what Scroll 1.0.0 should be. I should be on version 0.93.0, not version 93.0.0.
No big deal. I will soon release Scroll 100.0.0, and from then on will have far fewer major releases.
An ounce of deep thought on the core of your language is worth a pound of major releases!
## Other things I learned
- I learned 97.5% of languages with a version system use Semantic Versioning. The ~2% of languages, such as C and C++, that are still doing versions like C17 (which does not mean major version 17, but refers to the year the revision came out), maybe want to reconsider ;).
- I learned most languages use git tags for tagging their releases. Something I should start doing.
https://git-scm.com/book/en/v2/Git-Basics-Tagging git tags
I learned a few things today. Hope you did too!
****
# Notes
- Thank you to redditors Greenbeen86, subgeniuskitty, and chibuku_chauya for pointing out the bug with the C and C++ rows.
// Ohayo code:
data.localStorage datalocalstoragenode-2.data
group.by appeared
reduce MajorVersionsPerYear mean rate
tables.basic
rows.sortBy appeared
tables.basic
footer.scroll