天泣記

2016-08-15 (Mon)

#1 ショクダイオオコンニャク

国立科学博物館筑波実験植物園で、ショクダイオオコンニャクが咲いたというので見に行ってみた。

2016-08-18 (Thu)

#1 Coq Bug 5023 を報告した

Coq Bug 5023 - JSON extraction doesn't generate 'for xxx' part of local mutually recursive functions

2016-08-30 (Tue)

#1 json の dependency の種類

しばたさんが 「Ruby 2.4.0 で導入予定の Integer Unification まとめ」を書いてくれたので思い立って、add_dependency や add_runtime_dependency で json がどのように指定されているか調べてみた。

gem-codesearch で集めた gem を以下のように検索してデータを集めた。

csearch 'add_runtime_dependency|add_dependency'|egrep -o "('json'|\"json\"|%q<json>).*"

これをもとに requirements のところだけ取り出して形式を整えるなど (エディタで) 掃除してきれいにした。

数を数えて上位を表示してみると以下のようになる。(nothing は add_dependency に requirements を指定していないものである。)

% sort 2016-08/json-dependency.csv|uniq -c|sort -nr|head
   1731 "nothing"
   1298 "'>=0'"
    366 "'~>1.8'"
    119 "'>=1.4.6'"
     97 "'~>1.8.1'"
     83 "'>=1.1.3'"
     73 "'~>1.4'"
     69 "'~>1.8.0'"
     69 "'>=1.4.3'"
     60 "'>=1.2.0'"

グラフにしてみると以下のようになる。

json-dependency.R:

library(ggplot2)
d <- read.csv("2016-08/json-dependency.csv")
d$detail <- "exact"
d$detail[grep("nothing", d$requirements)] <- "any"
d$detail[grep(">", d$requirements)] <- "optimistic"
d$detail[grep("<", d$requirements)] <- "pessimistic"
d$detail[grep("~", d$requirements)] <- "pessimistic"
d$type <- "optimistic/any"
d$type[d$detail == "exact"] <- "pessimistic/exact"
d$type[d$detail == "pessimistic"] <- "pessimistic/exact"
p <- ggplot(d, aes(type)) + geom_bar(aes(fill=detail))
print(p)

json-dependency.png

以下のように分類したつもりである。

json が Ruby 2.4 対応 (Integer Unification 対応) と同時に 2.0.0 にバージョンをあげた (major version up) ことにより、使えるバージョンの上限を指定しているもの (大きく version up したら動かないかもしれないから使わないという悲観的な指定をしていたもの) は Ruby 2.4 対応のために dependency の更新が必要になった、ということだろう。

なお、特定のバージョンを要求するものもあるが、多くはない。

json がなぜ major version up したのかというと、RFC 7159 対応とか Ruby 1.x サポート終了とか大きな変更が入ったからだろうか。

さらに json に依存する gem の更新時に大きく version up をされるとそっちでも同様な話が起きるというのが rdoc や ActiveSupport の話かな。

なんというか、バージョンを指定する、というやりかたが間違っているような気もする。


[latest]


田中哲