- Amazon.co.jp ・本 (352ページ)
- / ISBN・EAN: 9784822239176
作品紹介・あらすじ
世界中で使われているプログラミング言語「Ruby」の作者、まつもとゆきひろ氏が「言語の作り方」を初めて真正面から解説する本です。
本書のため新言語「Streem」を作りました。2年をかけて新言語を実際にデザイン・実装した取り組みを、試行錯誤の過程も含めて詳しく解説しています。
「今更、言語を作ってどんな意味があるの?」と思う人もいるかもしれません。
まつもと氏は言語を作る価値を本書でこう説明します。
●プログラミング能力の向上
●デザイン能力の向上
●自己ブランド化
●自由の獲得
まずプログラミング言語の実装は、コンピュータサイエンスの総合芸術といえるでしょう。言語処理系の基礎である字句解析や構文解析は、ネットワーク通信のデータプロトコルの実装などにも応用できます。
プログラミング言語はコンピュータと人間をつなぐインタフェースでもあります。そのようなインタフェースをデザインすることは、人間がどのように考え、暗黙のうちに何を期待しているかについての深い考察が求められます。
そのような考察を重ねることは、言語以外のAPIのデザインや、ユーザーインタフェース(UI)、ひいてはユーザーエクスペリエンス(UX)のデザインに役立つでしょう。
こんな言語デザインの世界に皆さんをご案内します。
感想・レビュー・書評
-
まつもとさんの文章は読みやすいです。その読みやすさがRubyの読みやすさにつながっているのかもしれない。
詳細をみるコメント0件をすべて表示 -
”Streem”という新しいプログラミング言語を設計しながら、プログラミング言語を作る手順や、言語仕様を決めるときの注意点などを解説。
-
「高校生からはじめる プログラミング」を読んだ後、ブクログで推奨された本の第2位。
-
Matzさんの『まつもとゆきひろ 言語のしくみ』よみおわた。プログラミング言語を自作するときにどんなふうに進めたらよいか、どんなことを考えればよいかが、実際にStreemという言語をつくっていく過程を書くことで説明されている超ステキ・ブック。自作言語のやりかたわからん全ての人が読むべき。
Matzさんの言語オタク的語りにも注目したい。とくにオブジェクト指向ファンということで、簡易版「オブジェクト指向の歴史」章はとてもおもしろかった。CLOSも登場するしね。あとGCの章もかなりよくまとまっていたと思う。
Matzさんの次回作とても期待しています!!! -
# 書評☆3 まつもとゆきひろ 言語のしくみ | yaccやC言語を使った具体的で意味のあるプログラミング言語の実装手順
## 概要
- 書名: まつもとゆきひろ 言語のしくみ
- 副題:
- 著者: まつもと ゆきひろ
- 出版日: 2016-12-27
- 読了日: 2018-07-05
- 評価: ☆3
- パーマリンク: https://senooken.jp/blog/2018/07/05/
## 評価
日経Linux 2014年4月号から2016年12月号まで連載された「作りながら学ぶプログラミング言語」という記事をまとめて加筆・編集された内容となっている。
プログラミング言語を作るという書籍は既にいくつもあるが,それらは教科書的な内容がほとんどであり,現実に役に立つような発展的な内容が書かれているものはほとんどない。また,実際に世界で広く使われているプログラミング言語の開発経験者により,デザインの仕方を語られた本自体が少ない。その時点で,この本は希少性が高い。
プログラミング言語の開発にはそんなに興味はないが,内部的にどういうことを考えてどうやって作られているかというのには興味があったので読んだ。
言語設計の部分はけっこう小難しくてあまり理解できなかったが,以下のように参考になる箇所もあった。
* 並行プログラミングではどういうことを気にしないといけないのか
* オブジェクト指向での継承パターンの選択
* 構文解析ソフトyaccの使い方
* C言語での各種具体的な実装方法
## 引用
> ### p. 004: はじめに
>
> どのように言語をデザインすべきか経験から語れる人など、そうはいないのです。
> ___
> 数少ない例外としては、C++設計者であるBjarne Stroustrup氏による「The Design and Evolustion of C++」(邦題「C++の設計と進化」、ソフトバンクパブリッシング)があります。この本を読めばC++がなぜこのようになっているのか、何を目指していたのかが分かる貴重な書籍です。
C++の設計について書かれている本があることを知らなかったので参考になった。いずれ読んでみたい。
> ### p. 036: 1-3 バーチャルマシン
>
> 【シンボル】 言語処理系が内部でメソッド名などの識別に使っている値で、任意の文字列に対して異なった値が割り当てられる。
gdbなどでシンボルという単語を見かけるが意味がわからなかった。この解説で意味がわかった。
> ### p. 056: 単純継承の問題
>
> ところが多重継承でクラス関係がDAG (Directed Acyclic Graph) 構造となる場には、探索順序は一意には定まりません。
>
> 単一継承の問題とは、継承のラインを子得てメソッドなどのクラス属性を共有する方法がないことです。共通のスーパークラスが存在しない場合、属性を共有できず、コピーするしかありません。
オブジェクト指向型の単純継承と多重継承で継承時に発生する問題を知れた。
> ### p. 223: 4-2 基本データ構造
>
> ユニオンは同じメモリー領域に対する複数の方での解釈を定義するものです。
> ___
> ユニオンはあまり頻繁に用いられるものではないので、そのようなものをなんに使うのか疑問に持つ人も多いでしょう。ユニオンの 使われ方はいくつかありますが、典型的なものは以下の3種類です。
>
> * 最大サイズの確保
> * 条件付き構造体定義
> * メモリー解釈の操作
C言語のunionは使いどころがよくわからなかったのだが,使うタイミングが少し良くわかった。
> ### p. 293: 5-3 CSV処理機能
>
> 最も都合が良かったものが「semitrivial/csv_parser」というリポジトリーでした。グローバル変数を使っておらず、非常にシンプルで無駄なことをしていません。
実際にGitHubからC言語のCSVパーサーを探して,組み込む手順について解説していて参考になった。
> ### p. 304: 時刻の表現方法
>
> Linuxを含めた多くのUNIXシステムでは、1970年1月1日00:00 (UTC) をエポックとします。
> ___
> 例えば、現在時刻を取り出すシステムコールtime(2) は、以下のようなAPIです。
> ___
> しかし、いつも秒単位で話が済むとは限らず、1秒以下の情報を取り出す必要があるかもしれません。UNIXでもそう思ったのか、より新しいシステムコールgettimeofday(2) が追加されています。こちらは秒以下の時刻がマイクロ秒単位で与えられます。
> ___
> その後、さらにさらに細かい時刻分解能が必要なこともありえると考えたのか、POSIX.1-2008ではより新しいシステムコールclock_gettime(2) が追加されています。
> ___
> MacOSではいまだにclock_gettime()が未実装なのだそうです。
C言語での時刻の取得方法について参考になった。
> ### p. 339: 5-7 ストリームグラフ
>
> CUIはキャラクターで画面表示を行うので、もう何十年も使われてきているターミナルの中で動作できます。今後もターミナルがなくなることは心配しなくてよさそうです。今回はこちらのCUIを使ってグラフを表示する機能を作ります。
>
> そこで参考にできるツールはないかといろいろ探したところ、stag *1 (https://github.com/seenaburns/stag/) というツールを見つけました。
>
> stagは標準入力から数値データを読み込み、それに対して棒グラフを出力するツールです。
CUIでのグラフ作成ツールを知れた。
## 結論
プログラミング言語を自分で作ることというのはあまりないかもしれない。しかし,内部でどういうしくみで,何に気を払って実装されているのか,しっておくと他のことにも役に立つように感じた。
技術者の教養として読むのはいいと思った。 -
請求記号 007.64/Ma 81