8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FreeBSDAdvent Calendar 2020

Day 16

bc コマンドが新しくなる

Last updated at Posted at 2020-12-15

#current で既にデフォルトになってる、新たな bc コマンド

お手軽にコマンドラインで計算するのに使う、おなじみの bc コマンドのお話です。あまり変化なさそうな分野だと思っていたら、current ではいつの間にやら新しいバージョンに差し替わっていました。
実行すると一目瞭然、「>>>」というプロンプトがつくようになりました。


$ bc
>>> 1+2
3

以下ではプロンプト以外の従来bcとの違いや、FreeBSD で選ばれた理由などを適当にまとめます。

Gavin Howard さん作、gh-bc

FreeBSD では今まで OpenBSD 由来の bc (usr.bin/bc)が入っていました。新しい bc コマンドはGavin Howard さんが独立にスクラッチから作られたものです。ビルドに C99 コンパイラを要求する点など、モダンさが伺えます。
FreeBSD のソース上は usr.bin/gh-bc というディレクトリに入っています。本稿でもこの bc は gh-bc と呼ぶことにします。

開発元 URL https://git.yzena.com/gavin/bc
FreeBSD リポジトリ https://svnweb.freebsd.org/base/head/usr.bin/gh-bc/

開発元のREADME.mdによると、Linuxなどで広く使われている GNU bc (FreeBSDだと pkg/ports からインストール出来ます)と比べると

  • スクリプトに便利な拡張機能
  • パフォーマンス
  • 安定性
  • より POSIXに準拠している

などが優れていると謳っています。
パフォーマンスに関しては GNU bc との比較を公式でベンチマーク比較していて、それを見ると桁違いな速さを見せつけてるケースが多いです。
https://git.yzena.com/gavin/bc/src/branch/master/manuals/benchmarks.md

FreeBSD で選ばれた理由

FreeBSD でこの gh-bc を使用するようにした理由に関しては、上記のパフォーマンスなどの点以外に、

  • 多桁計算用ライブラリが他のライブラリに依存していない
  • man 文章が非常に詳細である

などがあるようです。詳細は以下の commit log を参照してください。

従来の bc は OpenSSL の多桁計算ライブラリに依存しているようで、確かにそれに依存しないというのは魅力ですね。

12 release では明示的ビルドが必要

currentではすでにデフォルトが切り替わってますが、12-releaseではどうでしょうか。

12-release でもソース自体は入っている状態ですが、通常はビルドはされないようになっています。明示的に gh-bc に切り替えるには、「WITH_GH_BC=yes」というオプションをつけて buildworld する必要があります。

sinがsin

使ってわかりやすい違いとして、sin関数がちゃんと「sin()」として使えることがあります。従来のbcではsinは「s()」、cosは「c()」、logは「l()」とかいう、省略しすぎな名称でしたが、それぞれちゃんと省略しない関数名が使えるようになっています。
また、「pi()」という関数が定義されていて、引数に桁数をすると、その桁数の円周率を返してくれます。

詳しくは man で

記事での紹介ではかなりかいつまんでになりましたが、FreeBSDでの採用理由になったように man が詳細ですので興味のある方はmanを参照してください。

gh-bc
https://www.freebsd.org/cgi/man.cgi?query=bc&apropos=0&sektion=0&manpath=FreeBSD+13.0-current&arch=default&format=html

従来のbcのmanはこちら
https://www.freebsd.org/cgi/man.cgi?query=bc&apropos=0&sektion=0&manpath=FreeBSD+12.2-RELEASE&arch=default&format=html

8
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?