2023-12-16

Haskellにパッケージ「System.Random」を追加

Haskell アクション 超入門」でHaskellの勉強を続けていたら、例題に出てくるパッケージ「System.Random」がありませんでした。Webを検索すると、パッケージ「random」を追加する必要があるようです。そのためにはコマンド「stack」を使う用なのですが、僕が利用しているFreeBSD上にはコマンドが入っていません。


Web上の記事「Haskellのパッケージ管理について調べてみた」によると、コマンド「cabal」を使うとパッケージを追加できるようです。ここで「stack」と「cabal」の関係が不明でしたが、またもやWeb上の記事「Haskellの環境構築2023」によると、どちらのコマンドでも構わないようです。FreeBSDにはパッケージ「hs-cabal-install」があったので追加したら、コマンド「cabal」が使えるようになりました。


さてHaskellのパッケージ「random」をコマンド「cabal」で追加しようと思ったのですが、これを実行するアカウントはどうするのか分かりませんでした。どうやらアカウントごとにパッケージを追加するもののようですが、当初はアカウント「root」で実行したものの、個人用アカウントから参照されず悩みました。


パッケージ「random」を追加するのは簡単でした。

  1. cabal update
  2. cabal install --lib random

名乗り朝臣

平家物語の有名な「祇園精舎」を読んでいたら、以下のような箇所が出てきました。

  1.  六波羅の入道前太政大臣平朝臣清盛公と申し人のありさま
  2. 刑部卿忠盛朝臣の嫡男なり

 

朝臣というのは藤原朝臣とか源朝臣のように姓につくと思っていたので、「忠盛朝臣」のように名前にもつくのかと意外に思いました。ウィキペディアで「朝臣」では、名前(諱)に朝臣をつける場合を「名乗り朝臣」と呼ぶと書かれていました。しかし平家物語は、歴史の教科書でも国文学の辞書でもないので、「忠盛朝臣」というのを「名乗り朝臣」のつもりで書いているのかどうかはわかりません。


名乗り朝臣については、資料を網羅的に調べている「「朝臣(あそん)」の位置について」という記事がWeb上にあるのを見つけました。それはともかく、朝臣というのは八色の姓で制定されたはずですが、真人など朝臣以外が消えていってしまったので、姓につくのか、諱につくのかという、制定された際の目的とは違う使われ方になってしまったという印象です。

2023-12-14

「Haskell超入門」が分かりやすい

以前からHaskellを学んでみたいと思っていて、いろいろと情報を集めていました。Pythonなど人気のある言語ほどではありませんが、書籍やオンラインの入門書が見つかります。

 

新しい言語を学ぶとしても、似ている言語を既に知っているなら、それほど難しくはないと思います。例えば、C言語を知っている場合にPASCALを学ぶとか、AWKを知っている場合にPerlやPythonを学ぶならば、もちろん別の言語なので違いが多々あるかもしれませんが、似ている面も少なくないので、勉強する閾は高くないと思います。


それに比べるとHaskellは、だいぶ雰囲気が違います。関数型言語に分類されていますので、LISPを知っていれば、概念自体は理解できるかもしれませんが、Haskellのプログラムが読めるかというと、そうでもないと思います。

 

Haskellを全く知らないところから入門するとして、オンラインで読めるものを探して見ると「Haskell超入門」が分かりやすいと思いました。入門書によっては、Haskellの構文を「こういうものがあります。ああいうものもあります」と淡々と列挙していくだけのものもあるのですが、それだけではHaskellとしての発想が学べないのです。それに比べると「Haskell超入門」はHaskellの発想が学べるので、とても理解が進みました。

2023-12-10

MOPDの実装:select()かpoll()か

DEC製ワークステーションをネットワークから起動するために必要となるMOPDの実装を調べています。調査をすすめているうちに、横道にそれるという言うか、派生する技術についても把握しておく必要に迫られます。しかも空き時間を見つけながら調査しているので、なかなか先に進みません。


ともかく、MOPDをデーモンとして動作させるための中心部分とおもわれる「Loop()」(mopd-2.5.3/common/loo-bsd.c)を調べてみました。そこではシステムコール「select()」 が使われているのですが、NetBSD版ではシステムコール「poll()」に置き換わっています。他の実装、OpenBSD版、Linux版、FreeBSD版では、select()のままです。


システムコール「select()」と「poll()」は歴史的に見れば成り立ちが異なるようですが、それは2000年以前のUNIX乱立時代の頃の話であって、21世紀に入って20年以上も過ぎた今日では、両システムコールが実装されていないOSの存在を気にする必要はない気がします。


そうであるならば、システムコール「select()」と「poll()」の何れを用いるのが望ましいのでしょうか。select()の方が制限が厳しいようで、よりましなpoll()を使っておく方が良いとも考えられます。しかしMOPDにおいて、その制限が問題になるようなネットワーク的な同時接続数があるのかと言うと、そんな事はないと思います。程度問題なのかもしれませんが、机上の空論のような究極の状況を考慮してロジックを組むのも、やりすぎではないかとも思います。

 

NetBSD版MOPDのようにシステムコール「poll()」に置き換えるのが悪いとは思いませんが、圧倒的なメリットがある訳でもなさそうです。ならば他の実装のようにシステムコール「select()」のままにしておくのも、ひとつの判断でしょう。どちらのシステムコールを採用するのか、判断の決め手のようなものが何かあれば良いのですが。

2023-12-02

プログラミング言語Iconは日本語で「アイコン」なのか「イコン」なのか

先日ふとしたきっかけでIconに再開したので、久しぶりに情報を集めています。公式サイトにはドキュメントなども置かれているようなので、勉強してみようと思っているところです。

 

ところで「Icon」は日本語で発音すると「アイコン」でしょうか、それとも「イコン」でしょうか。公式サイトにあるドキュメントは全て英語なので、日本語で何と発音すれば良いのかは当然ながら書いてありません。しかし『Icon Programming Language Handbook』の「About Icon」には以下のような記述があります。 

The name, Icon, was chosen a long time before graphical user interfaces became popular. It does not refer to “icons,” but probably to iconoclasm, as the developers were excited about how their language diverged from current practices in language design.


「Icon」という名前は、GUIで目にする「アイコン」というつもりではないようです。「iconoclasm」という単語を持ち出してくるのを考えると、日本語で言うところの「イコン」を意識しているのではないかという気がします。