ときどきの雑記帖'

最新ページへのリンク
目次ページへのリンク

一つ前へ 2013年5月(上旬)
一つ後へ 2013年5月(下旬)

ホームへ

2013年05月20日

■_

いやもーなんというか、咳をするにしてももう少し小さい音でやってくれと(ry

Yさんの新刊見かけなかった。

■_

perl v5.18.0 released! - Islands in the byte stream perl 5.18.0 is now available! : perl 変更点みているとなかなか面白いものが

perl5180delta - perl v5.18.0 での変更点 - perldoc.jp

置換のより厳密なパース

パーサが s///e を以下のようにパースすることを悪用することはもはや できなくなりました:

    %_=(_,"Just another ");
    $_="Perl hacker,\n";
    s//_}->{_/e;print
ヒヤドキュメントのパース

クォート風演算子の内側のヒヤドキュメントの本体は、常に "<<foo" マーカーの 次の行から
始まるようになりました。 以前は、クォート風演算子を含む行の次の行から始まると文書化されていましたが、
これは時々しか正しくありませんでした [perl #114040]。

英数字演算子は正規表現の閉じ区切り文字から分離されなければならなくなりました

もはや以下のようには書けなくなりました:

 m/a/and 1

代わりに以下のように書かなければなりません

 m/a/ and 1

演算子を正規表現の閉じ区切り文字と分けるための空白が必要です。 空白がないと、Perl v5.14.0 から廃止予定
警告が出ます。

qw(...) はもはやかっことして使えなくなりました

qw リストは、常にかっこで囲まれているとパーサが考えるように騙すために 使われていました。 これにより、実
際には foreach $x (qw(a b c)) {...} と書くべきところで foreach $x qw(a b c) {...} のような驚かされる構
文が可能でした。 これは時々構文解析器を間違った状態にするので、完全には動作せず、 許されると想定するか
も知れない似たような foreach qw(a b c) {...} は 全く動作しませんでした。

qw のこの副作用は撤廃されました。 これは Perl v5.13.11 から廃止予定でした。 文法が必要としているところで
はどこでも、実際のかっこを使うことが 必要になりました。

正規表現中の逆スラッシュのある種の稀な使用法は廃止予定になりました

Perl が正規表現パターンのメタ文字として認識する 3 組の文字があります: {}, [], () です。 これらは以下
のように区切り文字としても使えます:

  m{foo}
  s(foo)(bar)

これらはメタ文字なので、正規表現では特別な意味があります; そして これらの文字を区切り文字として使った
パターンの中で使うとき、逆スラッシュを 前置して通常の意味にすることで特別な意味をなくすということがで
きないことが 分かりました。 例えば、以下のものは

  m{foo\{1,3\}}

逆スラッシュは振る舞いを変更せず、これは "f o" に引き続いて 1 から 3 文字の "o" にマッチングします。

なるほどねえ。なんでそういう動作だったのかというのもなんとなくだけど 察しがつきそう。

■_

じっくりと言うほどではないけれども、斜め読みよりは気合い入れて読んでみた。 An Interview with Bjarne Stroustrup | | InformIT

特にここというのを抜き出し。

An Interview with Bjarne Stroustrup | | InformIT

Danny Kalev: Although it may be too early to assess the full impact of C++11 right now, which insights
and conclusions have you reached already regarding C++11? Are there new features that you have grown to
like more than before? Are there features that need further polishing or fixing?

Bjarne Stroustroup: Adding move semantics is a game changer for resource management. It completes what
was started with constructor/destructor pairs, the RAII ("Resource Acquisition Is Initialization")
idiom, and smart pointers to enable safe, simple, and efficient handling of general resources. A
resource is anything that must be acquired and (explicitly or implicitly) released. Examples are memory,
locks, file handles, threads, and sockets.
An Interview with Bjarne Stroustrup | | InformIT

The importance of move semantics is that we can basically eliminate complicated and error-prone explicit
use of pointers and new/delete in most code. Such direct manipulation of memory can disappear into the
implementation of handles, such as vector.

The move semantics is part of my general aim to make simple things simple – without loss of performance,
of course. Other features that support that theme is strongly typed constant (including constexpr
functions that can be evaluated at compile time), general type aliases (to clean up the syntax of generic
code), and uniform and universal initialization (base on the initializer list {} syntax). The code below
has examples. For a list of features, see my C++11 FAQ.

move semantics。と。

An Interview with Bjarne Stroustrup | | InformIT

Danny: Currently, the committee is working on a new C++ standard dubbed C++14. Can you tell us more about
it? Which new features are in line for example?

Bjarne: My definition of the aim of C++14 is “to complete C++11.” That is, to add things we simply
didn’t have time to do before shipping C++11 or things that we didn’t quite know how to design without
the experience of using C++. It is not the job of C++14 to add major new features or support significant
new programming techniques. That’s for C++17. C++14 is a “minor release.”

11→14→17 ですか。

■_

2013年05月19日

■_

プログラマの考え方がおもしろいほど身につく本 問題解決能力を鍛えよう!
プログラマの考え方がおもしろいほど身につく本 問題解決能力を鍛えよう!
第二章まで読んだけどなかなか面白い。すでに書評を書いている人がいるので もっとつっこんだところを知りたいという人はそちらを。 重箱の隅的に気になったところがあったけどそれはまた。 L'eclat des jours(2013-05-06) プログラマの考え方がおもしろいほど身につく本 | OPC Diary - No Code, No Life. プログラマの考え方がおもしろいほど身につく本 問題解決能力を鍛えよう! 感想 V.Anton Spraul - 読書メーター

■_

Windows系からLinux系にスキルチェンジする方法、って本を書いたら売れないかな - ikeike443のブログ The dying platform: .Net | Hacker News この話題には気がつかなかったw そんなに密に見張ってるわけでもないからなあ。 などと言い訳(どこに?

The dying platform: .Net | Hacker News

Microsoft has too many developers and not enough innovation. They encourage a design attitude that
everything has to operate like the flight deck of a 747. Their culture has been incestuous so long
that any change is terribly unlikely.

There are some really, really sharp guys at Microsoft. Not only does the community deserve better
products from such a great company, the developers in many cases have an very unpleasant work
experience.

Google is not too far behind. I think they're pushing a lot of the things they are simply to keep
momentum building. In another 20 years, unless they start building time machines, it'll catch up to
them, too.

Apple is a strange case. They passed the "I wouldn't work for them for a million bucks" point
many years ago, but they're just better at slapping a better marketing image on it than the rest of
them.

Having said all of that, I like .NET, and I think combining it with Mono makes probably the most
full-featured free platform for development anywhere in the world. The effective targeting of the
business market by .NET may be waning, but the platform is nowhere near dying off.

Microsoft is so hit or miss. They're incredibly innovative in the research department, but business
tools are definitely overcomplicated (Dynamics, SharePoint). I use C#.NET daily, and it is the
programming tool I'm most in love with. There is no easier way to make business desktop apps, and
with the new MVC and Entity Framework libraries, there aren't many easier ways to make significant
web applications (i.e. beyond a to-do list or blog). Azure level of functionality makes other cloud
companies look almost archaic.

I think where they're losing is that they've stopped communicating. With customers, with developers,
even internally. They are proceeding down paths they imagined to be important. Some of them are, some
of them aren't, and thus the hit-or-miss nature of their current business. I think a lot of this is
Ballmer. He's trying to be a Jobs and failing miserably, when all he needs to do is allow his people
to actually communicate with the community.

Another part of it is that they can't do anything these days without a bunch of FUD from the media and
Anti-MS sheep. I actually like Windows 8 and appreciate the innovation even if there are some hiccups
to take care of. .NET is great, and I hope they make it easier to move forward and migrate existing
apps to whatever they do next. Will they die anytime soon? Probably not. But if they don't start
communicating soon and often, they'll lose some market share for sure.

747のフライトデッキで云々とは… 元記事もみときますかねー The dying platform: .Net | roundcrisis.Find<Solution>()

■_

情報のソフトウェア工学が学べる大学・大学院一覧 | 大学&大学院.net 通学制の情報のソフトウェア工学が学べる大学・大学院一覧(土日・夜間) | 大学&大学院.net

■_ Metzのルール

最初に Matz のと読んでしまったのはナイショ。 Sandi Metz’ rules for developers

■_

で。その中身

Sandi Metz’ rules for developers
  1. Classes can be no longer than one hundred lines of code. クラスを100行より長くはできない
  2. Methods can be no longer than five lines of code. メソッドは5行より長くはできない
  3. Pass no more than four parameters into a method. Hash options are parameters. 一つのメソッドに4つを超える数のパラメータを渡せない。 ハッシュを使ったオプションもそれぞれパラメータとして扱う
  4. Controllers can instantiate only one object. Therefore, views can only know about one instance variable and views should only send messages to that object (@object.collaborator.value is not allowed). コントローラーはオブジェクトをただ一つだけ instantiate できる。 したがってビューはただ一つだけのインスタンスのみ知り、また、そのオブジェクトに対してのみメッセージを send すべきである (@object.collaboraor.value のような書き方は許されない)

Hash options are がちと不安

各項目の詳細な説明と対処方法などは元記事でよろしく。

■_ Scheme について

なんとなく貼り付けておく

@anohana それは一面の真理ですね。でも、scheme が仮想マシンを持ってないから、そうなったのかも。Java に負けたのは、その辺りかな。

— Shinji Konoさん (@shinji_kono) 2013年5月18日

@shinji_kono JVM程にまで具体的な仮想機械を決めてしまうと新しい言語機能を入れにくい(実際TCOでみんな困ってますし)というダウンサイドがありますね。制限があった方が普及させやすいんですが。抽象的な仮想機械ならば仕様上の意味論定義がそのものだと思います。

— Kilo Kawaiさん (@anohana) 2013年5月18日

@anohana 仮想マシンではなく仕様で規定すれば実装の自由度は高い。そのはずだったんですよね。確かに Dan の言うとおり処理系は多いんだよな。

— Shinji Konoさん (@shinji_kono) 2013年5月18日

@shinji_kono 詰まるところ、ユーザよりも言語実装者向けの言語なのかもしれません。実用的な規模で性能を出そうとすると結局は特定の処理系向けにチューンすることになると思います。

— Kilo Kawaiさん (@anohana) 2013年5月18日

■_

訳されるかな? An Interview with Bjarne Stroustrup | | InformIT

■_

読んでいる時間が 泳ぐやる夫シアター やらない夫が南北戦争を戦いぬくようです 第2回 【東部戦域】ブル・ランの戦い

■_

2013年05月18日

■_

久しぶりに神保町の明倫館書店行ったんですよ。 なんの気なしに数学本の棚を見てたら「計算尺のつかいかた」的な本が十数冊。 どれもまあ結構年代物な雰囲気でしたが(奥付は確認しなかった)、 割に薄いし美品なわけでもないから一冊買ってみるかと発行年が割と新しそうなものを 抜き出して値段を見ると…末尾に0が四つ並んでました…w

放送大学の講座に「ソフトウェア工学」があるというのを知り (放送大学のテキストを扱ってる書店があって、そこで偶然見つけた 財団法人 放送大学教育振興会|詳細説明画面)、 いつ放送してるんだろうと思ってEPGの放送大学のところを一生懸命探しても見つからない (ところで情報科学関係結構ありますよ)。で、いろいろ調べてみると 放送大学 授業科目案内 ソフトウェア工学('13) 放送大学 授業科目案内 情報学プログラム 「ラジオ」番組で、土曜日12時(昼間ね)にやってるらしいことが判明。 で、ラジオて周波数は幾つよ。というとFMだったらしい 放送大学 - Wikipedia

■_ オープンソースとかフリーソフトとか

八田さんとはかなり以前に一、二回だけメールでやり取りしたことがある。はず

■_ release

あれとかこれとか R 3.0.1 is released perl 5.18.0 is now available! - nntp.perl.org

■_ 怖いひと

それ(怖い人はいません)は誇張しすぎではないかと言おうと思ってたら 本人が補足していましたでござるの巻 まつもとゆきひろ( @yukihiro_matz )さんがBKCで講演会をするという噂を聞いて行ってきた - Pastalablog in はてな Twitter / yukihiro_matz: 本当はオープンソース界隈に怖い人はいます。でも、物理的に噛み ...

#rits_matz

■_ Zed

こんどはなんじゃらほい Zed didn't have a good time at Djangocon EU 2013 : programming



Annoucing "The Art Of The Con" And Retiring From Tech Conferences
=================================================================

tl;dr:

I'm retiring from speaking at tech conferences.  My last one will be Bubbleconf
http://blog.phusion.nl/2013/05/16/annoucing-bubbleconf-2013-date-and-venue/ and
I'm going to lay it all out in a talk titled "The Art Of The Con: Memoirs Of A
Conference Trophy Nerd".  If you want to see an epic fucking blowout then come
to Bubbleconf 2013 and watch me set this bitch on fire while I walk out of the
scene with a big "fuck you, and thanks for all fish".  After that I'm putting
*myself* on a blacklist for bad speakers and working to keep abusive or shitty
public speakers out of the conference circuit while starting a training program
for geeks who want to learn public speaking.

以下略

しかし相変わらず危ない単語が並んでいる(ような気がする)

■_

2013年05月17日

■_

某社の機材その他の調達システムなんですが(最近新しくなった)、 CD-R が必要になったので手配しようとデータベースから検索すると 「該当なし」 おっかっしーなあと思いつつ色々試しているうちに事情を把握。 なんとデータベースには「CDーR」で登録されていて、 わたしは「CD-R」で検索かけたものだから見つからなかったという… 「CD」を「CD」と同一視するのはやってたんだからもうちょっとがんばってくれ。 というか誰だよこの入力(とそのベリファイ)やったの ○| ̄|_

いくつか確かめてみたところ、「-」や「-」であるべきところが軒並み「ー」になってましたわよ…

■_ ifdef

Eiffel

■_

この辺については書きたいこともあるんだけどちとまとめづらい。

社内内弁慶を社外勉強会に参加させる方法: ソフトウェアさかば 社内勉強会はヤメだ。自主的はいらん、全員技術発表だ! - Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。 ごく普通の会社で社内勉強会・社内研修みたいのを散々やってきたけど、あまり成果が出てこなかった話でもひとつ。 - DenkiYagi

「若者のコピーレフト離れ」は本当か? GitHub世代に注目してみる - YAMDAS現更新履歴 こっちはまあ ↓に同意というところでしょうか

■_

C ってのは何のかんの言っても int と ポインターのサイズが同じなことを期待している プログラミング言語な気が。 Cプログラマーの十戒にも、この二つを同じサイズとして決めうちするなとかあったけども。

あれ、違った? プログラマーへの訓戒 The Ten Commandments for C Programmers (Annotated Edition)

■_

2013年05月16日

■_

ガルパンの話 (2)が面白かったんだけど転載とかできないしねえ。 押井守の「世界の半分を怒らせる」。第17号:押井守の「世界の半分を怒らせる」。:押井守の「世界の半分を怒らせる」。 - ニコニコチャンネル :社会・言論

信頼度成長曲線のアレ。幾つか見つかったけど課金の壁が○| ̄|_ An Empirical Method for Selecting Software Reliability Growth Models - Springer IEEE Xplore - Selection of Optimal Software Reliability Growth Models Using a Distance Based Approach こういうのも見つかった Software Reliability Testing - Wikipedia, the free encyclopedia

二章の途中で止まってる… 奇妙な「言語」の謎を解く 『白と黒のとびら』 – HONZ

■_ QCC

QCC - A Quick C Compiler This is a tiny C compiler, I wrote it in a very restricted dialect of OCaml. It is in the same family as otcc but will work for the x86_64 architecture. で、見てみたんだけど ↓にある通り「サブセット」とはいえ その短さにびっくり。

QCC - A Quick C Compiler

Supported features
The C subset supported features the following language constructs.

    Local and global functions with clean scoping.
    The statements if, while, for, break and return.
    Nested blocks with proper declaration support.
    Forward references (recursion).
    String literals.
    C unary and binary operators with proper precedence and associativity.
    Shortcutting && and ||.
    Post increment and decrement.
    Type int (caution, it is 64 bits wide).
    Pointer types (through explicit casts).
    Function pointers.
    External function calls and variables (through dynamic linking). 

こっちでダウンロードしないでもコンパイラーのソースが読める qcc.ml こっちもなんか気になるな The Temple Operating System

■_

■_

あれーもーこれーもーもーっと知りたい~♪ 瓶詰妖精 Bottle fairy BOX [DVD]
瓶詰妖精 Bottle fairy BOX [DVD]

2013年05月15日

■_

信頼度成長曲線のはなし。 ふと気になったのですが、 ゴンペルツ曲線やらロジスティック曲線やらS字やら遅延S字やらから 「もっともサンプルに適合する(適合しそう)」なモデルを選択するとは書かれているものの、 どうやって選ぶの? と。 いやまあプロットして「目視」で判断てのはお手軽ですがそれはいくらなんでもひどくはないかと。 んでまあ コルモゴロフ-スミルノフ検定 - Wikipedia コルモゴロフ こういうのがちらほら見えてきたりはしたんですが、 きちんと論文に書かれてるものってあんまりないみたいなんですよねえ。 いたずらに「職人芸」を否定する気はないんだけど、 もうちょっとこう「工学」らしさを見せて欲しいというかその。

ある程度の期間やってたりすると途中でモデルを変える羽目になることも あると思うんだけどどうなんすかねえ。

■_

お、始まった 泳ぐやる夫シアター やらない夫が南北戦争を戦いぬくようです 第1回 素人の軍隊

■_ ー

■_

本日は晴天なり - Wikipedia 本日は晴天なりの由来は? 「本日は晴天なり」となぜマイクのテストでは言うの? - Yahoo!知恵袋 あははっ 語楽 本日は晴天なり 中央気象台がはじめて試験放送をしたときに、担当者が「本日は誠によい天気ですね。それでは気象情報の試験放送を始めます。」 という意味のことを言い、英語にも「It's fine today」というマイクテストの用語があるので、気象情報の放送はこの言葉からはじめようということになったのです。 お? 別の説が。 「音素」云々はなんかアヤシイ気がするんですよね。 少なくとも現在広く使われてると言うことはなさそうですし (Island Life - 本日は晴天なり)

2013年05月14日

■_

Java のイベントがなんやらあったようで

Manningさんからこの本のMEAP半額にするよメールが来まして Manning: The Mikado Method 「Mikado Method」とはなんじゃろな。と。帝?

Manning: The Mikado Method

DESCRIPTION

Technical debt is best understood as the work remaining before job can be considered complete or, put
more colorfully, the cost of kicking the can down the road. The Mikado Method is a process for surfacing
the dependencies in a codebase, so that you can systematically eliminate technical debt and get things done.

It gets its name from a simple game commonly known as "pick-up sticks." You start with a jumbled
pile of sticks. The goal is to remove the Mikado, or Emperor, stick without disturbing the others. Players
carefully remove sticks one at a time, leaving the rest of the heap intact, slowly exposing the Mikado.
The game is a great metaphor for eliminating technical debt—carefully extracting each intertwined
dependency until you're able to successfully resolve the central issue and move on.

The Mikado Method is a book by the creators of this process. It describes a pragmatic, straightforward,
and empirical method to plan and perform non-trivial technical improvements on an existing software
system. The method has simple rules, but the applicability is vast. As you read, you'll practice a
step-by-step system for identifying the scope and nature of your technical debt, mapping the key
dependencies, and determining the safest way to approach the "Mikado"-your goal. A natural
byproduct of this process is the Mikado Graph, a minimalistic, relevant, just-in-time roadmap and
information radiator that reflects deep understanding of how your system works.

ふむ。Technical debt については気になってるから買うかな。半額だし。

■_

■_ D

あんまり情報が流れてこないなあ DConf 2013 Opening Keynote by Walter Bright : programming http://dconf.org/talks/bright.pdf DConf 2013 Day 1 Talk 2: Copy and Move Semantics in D by Ali Cehreli : programming DConf 2013 Day 1 Talk 3: Distributed Caching Compiler for D by Robert Schadek : programming

■_ 気になる新刊・近刊

まあ大半は買わない(買えない)と思いますが。 C11 の本でるんですねえ。向こうでは。

■_

It's fine today でちょっと書こうと思ったけど時間が

2013年05月13日

■_

日曜日にこれの単行本の宣伝ポスター(小さめ)を見かけて ああ連載やってたのねと初めて知った。 時代設定的に「東周英雄伝」的なものかと思ったら違ったらしい。 コミックナタリー - 王欣太新作は古代中国もの、ホラで帝国に挑む男の一代記

某所のSICP読書会に行けなくてぐんにょり。

Head First C とか 21st Century C を含めるのは微妙な部分もあるけれども、 なんか北米でも Cの入門書ってまだそれなりにでているっぽいので、 日本で出版されてるものと比較してみたいなあと思ったり。 にしても R の本たくさんでてるなあ向こうでも。

社員食堂の混雑具合に、必要充分な席数を求めるにはどうやればいいのだろうか などと考えてみたり。 食べるもの乗っけたトレー持って席が空くの待つのってなんつーかめげるよね。という。 G 社とかそういうのないんだろうなあ。げしょ。

■_

2013年05月12日

■_

シェル芸イベントのための準備だろうか Unicode 16進文字列を表示する - jarp, ログファイルを2個だけ残してあとは消す - jarp, 空白を含んだファイル名とIFS - jarp, 最後のN行だけ表示しない - jarp,

■_ gawk 4.1.0

つーことでビルド。

C:\Users\kbk\prog\gawk\gawk-4.1.0\pc>make-config.bat

C:\Users\kbk\prog\gawk\gawk-4.1.0\pc>make
Enter make  target
 where 'target' is chosen from
  djgpp ... DOS 32-bit exe [GNU C, Delorie, v2]
  emx ..... OS/2 32-bit exe [emx/gcc; uses emxlibc.dll]
  emxnt ... NT exe [emx/gcc with RSXNT]
  emxbnd .. OS/2 and DOS 32-bit exe [emx/gcc]
  mingw32 . Windows32 exe [Mingw32 GNU C]
  mingw32-readline . Like mingw32, but with readline
   [You will need to have GNU readline library installed.]
  mingw32-mpfr . Like mingw32, but with MPFR
   [You will need to have GNU MPFR library installed.]
  mingw32-readline-mpfr . mingw32 with readline and MPFR
  -----------------------------------------------------
  test .... Perform tests (see README_d/README.pc)
  install . Install gawk under c:/gnu/
  doc ..... Create documentation

C:\Users\kbk\prog\gawk\gawk-4.1.0\pc>make mingw32
make  all \
CC=gcc O=.o CF="-D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3" \
OBJ=popen.o LNK=LMINGW32 LF="-gdwarf-2 -g3" LF2=-lmsvcp60 RSP=
make[1]: Entering directory `/cygdrive/c/Users/kbk/prog/gawk/gawk-4.1.0/pc'
make[1]: *** No rule to make target `awk.h', needed by `array.o'.  Stop.
make[1]: Leaving directory `/cygdrive/c/Users/kbk/prog/gawk/gawk-4.1.0/pc'
Makefile:159: recipe for target `mingw32' failed
make: *** [mingw32] Error 2

C:\Users\kbk\prog\gawk\gawk-4.1.0\pc>cd..

C:\Users\kbk\prog\gawk\gawk-4.1.0>make mingw32
make  all \
CC=gcc O=.o CF="-D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3" \
OBJ=popen.o LNK=LMINGW32 LF="-gdwarf-2 -g3" LF2=-lmsvcp60 RSP=
make[1]: Entering directory `/cygdrive/c/Users/kbk/prog/gawk/gawk-4.1.0'
make[1]: *** No rule to make target `config.h', needed by `array.o'.  Stop.
make[1]: Leaving directory `/cygdrive/c/Users/kbk/prog/gawk/gawk-4.1.0'
Makefile:159: recipe for target `mingw32' failed
make: *** [mingw32] Error 2

C:\Users\kbk\prog\gawk\gawk-4.1.0>make mingw32
make  all \
CC=gcc O=.o CF="-D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3" \
OBJ=popen.o LNK=LMINGW32 LF="-gdwarf-2 -g3" LF2=-lmsvcp60 RSP=
make[1]: Entering directory `/cygdrive/c/Users/kbk/prog/gawk/gawk-4.1.0'
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" array.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" builtin.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" eval.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" field.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" floatcomp.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" gawkmisc.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" io.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" main.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" ext.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" msg.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" node.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" profile.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" re.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" replace.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" version.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" symbol.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" debug.c
debug.c: In function 'restart':
debug.c:2885:2: warning: passing argument 2 of 'execvp' from incompatible pointer type [enabled by default]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/../../../../include/process.h:120:42: note: expected 'const char * const*' but argument is of type 'char **'
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" cint_array.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" int_array.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" mpfr.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" str_array.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" command.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" gawkapi.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" awkgram.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" getid.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" popen.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" getopt.c
getopt.c: In function '_getopt_internal_r':
getopt.c:577:30: warning: incompatible implicit declaration of built-in function 'malloc' [enabled by default]
getopt.c:641:7: warning: incompatible implicit declaration of built-in function'free' [enabled by default]
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" getopt1.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" dfa.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" regex.c
gcc -c -D__USE_MINGW_ANSI_STDIO -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" random.c
gcc -gdwarf-2 -g3 -o gawk.exe array.o builtin.o eval.o field.o floatcomp.o gawkmisc.o io.o main.o ext.o msg.o node.o profile.o re.o replace.o version.o symbol.o
 debug.o cint_array.o int_array.o mpfr.o str_array.o command.o gawkapi.o awkgram.o getid.o popen.o getopt.o getopt1.o dfa.o regex.o random.o -lmsvcp60
make[1]: Leaving directory `/cygdrive/c/Users/kbk/prog/src/gawk/gawk-4.1.0'

mpgr つきでも

C:\Users\kbk\prog\gawk\gawk-4.1.0>make clean
rm -rf gawk *.exe gawk.map *.o *.obj core a.out gawk.rsp

C:\Users\kbk\prog\gawk\gawk-4.1.0>make mingw32-mpfr
make  all \
CC=gcc O=.o \
CF="-D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3" \
OBJ=popen.o LNK=LMINGW32 LF="-gdwarf-2 -g3" \
LF2="-lmpfr -lgmp -lmsvcp60 -Wl,--enable-auto-import" RSP=
make[1]: Entering directory `/cygdrive/c/Users/kbk/prog/gawk/gawk-4.1.0'
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" array.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" builtin.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" eval.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" field.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" floatcomp.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" gawkmisc.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" io.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" main.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" ext.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" msg.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" node.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" profile.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" re.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" replace.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" version.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" symbol.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" debug.c
debug.c: 関数 'restart' 内:
debug.c:2885:2: 警告: 互換性のないポインタ型から 2 番目の 'execvp' の引数に渡しています [デフォルトで有効]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/../../../../include/process.h:120:42: 備考
: expected 'const char * const*' but argument is of type 'char **'
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" cint_array.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" int_array.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" mpfr.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" str_array.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" command.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" gawkapi.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" awkgram.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" getid.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" popen.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" getopt.c
getopt.c: 関数 '_getopt_internal_r' 内:
getopt.c:577:30: 警告: 組み込み関数 'malloc' の互換性がない暗黙的な宣言です [デフォルトで有効]
getopt.c:641:7: 警告: 組み込み関数 'free' の互換性がない暗黙的な宣言です [デフォルトで有効]
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" getopt1.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" dfa.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" regex.c
gcc -c -D__USE_MINGW_ANSI_STDIO -DHAVE_MPFR -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H -DDEFLIBPATH="\"c:/gnu/lib/gawk\"" -DSHLIBEXT="\"dll\"" random.c
gcc -gdwarf-2 -g3 -o gawk.exe array.o builtin.o eval.o field.o floatcomp.o gawkmisc.o io.o main.o ext.o msg.o node.o profile.o re.o replace.o version.o symbol.o
 debug.o cint_array.o int_array.o mpfr.o str_array.o command.o gawkapi.o awkgram.o getid.o popen.o getopt.o getopt1.o dfa.o regex.o random.o -lmpfr -lgmp -lmsvcp60 -Wl,--enable-auto-import
make[1]: Leaving directory `/cygdrive/c/Users/kbk/prog/gawk/gawk-4.1.0'

C:\Users\kbk\prog\gawk\gawk-4.1.0>

まあ、これだと tcp/ip しゃべれなかったりするんですけどね。 しかしmpfrつきにしたときに出てる警告が気になりますわね

■_ Flowers for Algernon

なんかこういうのが流れてきたんですが

ちょっと検索すると、疑ってる人もいるけどもっと過激なことを言ってる人もいた。

んー、絶版(「廃刊」じゃあないよね)にはなってないと思うんだけどなあ。 Flowers for Algernon: Daniel Keyes: 9780156030304: Amazon.com: Books flowers for algernon | Barnes & Noble Amazon.com: Books

うぃきぺに Since its original publication, the novel has never been out of print.[11] とかあるし。11のリンク先の文も読むと、日本語版とドイツ語版に対してのことかと思えなくもないけど。

Flowers for Algernon - Wikipedia, the free encyclopedia

Publication history

The short story "Flowers for Algernon" was first published as the lead story in the April 1959
issue of The Magazine of Fantasy and Science Fiction.[9] It was later reprinted in The Best from Fantasy
and Science Fiction, 9th series (1960),[4][13] the Fifth Annual of the Year’s Best Science Fiction (1960),
[4][14] Best Articles and Stories (1961),[4] Literary Cavalcade (1961),[4] The Science Fiction Hall of 
Fame, Volume One, 1929-1964 (1970),[15] and The Magazine of Fantasy & Science Fiction: A 30-Year
Retrospective (1980).[13]

The expanded novel was first published in 1966 by Harcourt Brace with the Bantam paperback following in
1968.[4] By 2004, it had been translated into 27 languages, published in 30 countries and sold more than
5 million copies.[16] Since its original publication, the novel has never been out of print.[11]

もとは2ちゃんのどこかかな わーのたんぶらー •   「アルジャーノンに花束を」って小説があるじゃん、   あれ日本じゃめちゃめちゃ増刷されてるけど...

長編化されたのよりも、中編くらいのボリュームの奴が好き。 たしか他の作家の作品と一緒のSF全集あたりに収録されてるやつで、 ダニエル・キースのみの名前で出ている本には収録されてなかったと思う。 「短編」のやつは短編集だかにあるんだけど。

■_

変更点そのものは他にもあるんだけどこれを

Perl 6 changes - 2013W19 | π ** 6

Incompatible changes

Rakudo Perl

    Array references aren’t treated as arrays in regular expressions.

    Following code used to find 1, 2, or 3.

    my $array = [1, 2, 3];
    my $number = prompt 'Give me a number!';
    say "It's in array" if $number ~~ / ^ $array $ /;

    It doesn’t do that anymore, because variables are expected to be stringified inside regexpes. If
    you want the old behavior, be explicit and write @$array instead of $array.

    Please note that currently regular expressions are exception to this rule. This is going to be fixed
    in the future. Lots of code depends on regexpes to be not stringified, and first the warnings will
    have to be implemented. You are expected to use <$regexp> instead of $regexp.

確かにこれはどうするのがよいのかってのは難しい判断かも。 というか、こういう string interpolation (これはstringではないけれどもまあ同類と)自体が よろしくないという意見もあったり。

■_

2013年05月11日

■_

dconf

「本日は晴天なり」は英語でのマイクテストに使われていたフレーズを 意味も分からずそのまま訳しちゃったとか聞いたことがあるけどどうなんだろう (ここでぐぐらないヤツ) 神田明神下交差点で神田祭警備の警官がマイクテスト中なんですが、「本日は晴天なり」連呼で周りの人が不審げに(笑 秋葉原はた... on Twitpic

コンビニに行ったんですが、そのときラジオ番組らしきものが流れてて 「今日はなんの日」的なことをいくつか話してたんですね。んで、 聞き始めたときにいってたのが「新橋-横浜の次の鉄道路線が開業した日」というものだったんですが どこからどこという部分が聞けなかった。 どこだったんだろう。

月イチなので忘れないように 中島みゆきのオールナイトニッポン月イチ|AMラジオ 1242 ニッポン放送

■_

かなり疲れた(この出来でも○| ̄|_)。 もうちょっと日本語にしたり日本語っぽくできるけどこの辺で

Punched Cards » Hummus and Magnets
http://blog.quenta.org/2012/11/punched-cards.html

Punched Cards
by Christian Plesner Hansen Posted on November 28, 2012	

This post is a continuation of analytical programming about the programming model used to program
Babbage's analytical engine. In the previous post I talked about two of the ways programming was
used, the table format used to describe programs and the microcode format used internally within
the engine. The third program format which is what this post is all about is the one used to feed
programs to the engine. (Side note: if this looks familiar it's because it used to be the second half
of that post which you may already have read; I've just pulled it out into a separate post)


今回はバベジの解析機関で使うプログラムのプログラミングモデルに関する analytical programming の続きで
す。前回はプログラムを記述するのに使われていた table format と解析機関内部で使われていた microcode
format という二通りのプログラミング方法についてお話しました。今回お話しする三番目の program format は
解析機関にプログラムを feed するための format です (side note: もしこれに見覚えがあるのなら、それはあ
なたがすでに読んでしまったであろう post の後半で使われていたからです。I've just pulled it out into
separate post)。


In some regards the card format is similar to the bytecode formats we know today. That's one of the
reasons I find it especially interesting, because it's so relatively familiar and relatable for a
modern programmer. However, in one regard is is very different from any modern programming model.
Babbage felt very strongly that there was a fundamental difference between specifying which operation
to perform and which variables to perform the operation on. Modern programming and mathematics has 
generally moved in the opposite direction, seeing operations and function as values of a different
type that can nonetheless be abstracted over much the same way that numeric values can. Babbage would
have disagreed strongly with this.

いくつかの観点で card format は今日わたしたちが知っている bytecode formats に似ています。とても
modern programmer に familiar で relatable であったのが、わたしが興味を持った理由のひとつです。しか
し card format は一つの点においてはいかなる modern programming model ともかけ離れたものです。
operation to perform を specify するのと variable to perform the operation on を specifying するのと
の間には根本的な違いがあるとバベジは強く感じていました。modern programming と modern mathematics は
一般的に言って numeric values で可能なのと同じ手法で abstracted over much できるにもかかわらず、
operation と関数を異なる型の値としてみるという opposite direction に move しました。バベジはこれには
強い不満を持っていました。



Because of this view a punched card program is divided into two distincts parts: one set of cards
containing all the operations to perform and another set specifying the variables to perform them on.
For instance, a program that multiplied three numbers, V1, V2, and V3 and stored the result in V4,
similar the table program from the previous post but using multiplication instead of addition, would
be split from the format where operations and variables are together,

この視点により、punched card program は明確に二つのパートに分割されています。ひとつの cards の set は
all the operations to perform を contain し、もう一つの set はそれらに対して perform する variables
を specify します。たとえば、三つの数 V1、V2、V3 の値を乗算してその結果を V4 に格納するプログラムは
前回の三つあった table program に似ていますが掛け算ではなく乗算を使っていて、operations と variables
が一緒である format は二つのカード群に分割されます。


  V1 × V2 → V4
  V3 × V4 → V4

and into two separate sets of cards, one giving the operations
二つのうちの一つは operations で

  ××

and one giving the column indices
もうひとつは column indices です

  1 2 4 3 4 4

In the following I'll use these colored boxes to represent punched cards. The real punched cards
didn't look anything like this as you've seen from the picture at the beginning. For the variable
cards I'm also omitting the part that indicates whether reads are clearing or restoring, that would
have been there in the original design.

これ以降の部分では、punched cards を表現するのにこれらの colored boxes を使います。本物の punched
cards は picture at the beginning で見たものとは違った何かに見えるでしょう。variable cards に関して
は、オリジナル設計では存在していた indicates whether reads are clearing or restroring のパーツを
omit します。


Besides specifying which operation to perform the operation cards all specified how many times the
operation should be repeated; using this the operations program above could be specified even more
succinctly as

perform する operation を specifying する以外に、the operation cards は repeat すべき operation の
繰り返し回数を all specify します。この operations を使った上記のプログラムは以下のような more
succinctly によってさえ specify 可能です。


  ×2
   1   2   4   3   4   4


To execute an instruction the engine would first read the operations card and store the number of
repeats in a register, the Operation Card Counting Apparatus. Then it would repeatedly perform the
operation, decrementing the O.C.C.A for each and reading the next operation card when it reached
zero. For each operation it would read as many variable cards as were appropriate for that operation.

ある instruction を実行するために解析機関はまず operations card を読み込んで Operation Card Counting
Apparatus である register に繰り返し回数を格納します。それから読み込まれた card の operation を繰り
返し実行し、その繰り返しの一回ごとに O.C.C.A. の decrement を行って decrment の結果がゼロになった場
合に次の operation card を読み込みます。一回の operation に対して実行する operation に応じた複数の
variable cardsを読み込みます。


In the following I'll describe each of the instructions understood by the engine. It's only about a
dozen. The number of variable cards for an operation card depends on the repeat count but I'll show
the variable cards that go with a single repetition. I'll separate the cards representing input and
output with an arrow, just to make it easier to read. It's purely a visual aid though, in practice
you had to keep track what the cards meant yourself.

以下の部分では解析機関によって理解される各 instruction を解説します。その数は高々一ダースほどでしか
ありません(It's only about a dozen)。ひとつの operation に対する variable cards の数はその repeat
count に依存しますが、single repetition の場合の variable cards で説明します。読みやすくするために
入力を表すカード群と出力を表すためのカード群とを矢印で分けます。これは純粋に visula aid ではあるも
のの、実践においてはカードが意味していることをあなた自身が記憶し続けなければなりません。


Basic Operations


The most straightforward arithmetic instructions, instruction format wise, are the multiplicative
ones. We have multiplication of two columns, Vi and Vj:

instruction formats の中でもっとも straightforward な arithmetic instructions は multiplicative
instufuctions です。以下のような、Vi, Vj の二つの colmuns による乗算があります。

  ×n
   Vi Vj → Vh Vm Vt


Wait, you might say, didn't you just show multiplication using just three variable cards? Yes, and
that was a simplification. In reality multiplying two 50-digit numbers can give you up to 100 digits
and as a general principle the analytical wouldn't discard digits. Instead it would store the most
significant 50 digits in one column and the least significant 50 in another. In addition, unlike the
difference engine the analytical engine had built-in support for fixed-precision values by allowed
you to specify an implicit multiplier which would be taken into account during all operations. This
could cause a single multiplication to produce up to 150 digits, hence you need three columns to be
able to store the result of any multiplication, called the head, middle, and tail values. If you
know your output fits within 50 digits you can use scratch columns for the most significant parts
and only use the least significant 50 bits of the output, that's up to you, but you always have to
pass three output variable cards.

ちょっと待って、乗算で使う variable card は三枚だけだと説明していただろうと指摘されるかもしれません。
確かにそうです。実はあれは単純化されたものでした。実際には 50 digits の数値二つの乗算は 100 digits
にまでなる可能性がありますし、general principle として解析機関は digits を discard しません。most
significant 50 digits をある colmun に store するだけでなく、least significant 50 digits も別の
colmun に格納します。加えて、階差機関とは違って解析機関にはすべての operation で account に take into
される implicit multiplier を specify するのを許すことによる fixed-precision values のための built-in
support があります。これは一つの乗算で150digits までの結果が生成される事態を引き起こす可能性がありま
す。したがって、任意の乗算の結果を格納できるようにするには三つの column が必要なのです。その三つはそ
れぞれ、head value、middle value、tail value と呼ばれます。もし出力が 50digits に収まるとわかっている
のならば、most significant parts として scratch colmuns を使い、出力の least siginficant 50 digits し
か格納しないことも可能です。ただし、常に三つの出力 variable cardsを渡さなければなりません。


Symmetric to multiplication the engine also supported division:
解析機関は multiplication の symmetric として division もサポートしていました

  ÷n
  Vi Vj → Vh Vm Vt


The input/output logistics of this operation are the same as multiplication, the result can be up to
150 digits long. The microcode for division is even more complex than multiplication, as you would
probably expect. It's an iterative approach that first approximates the result by looking just at
the most significant digits of both inputs and gradually refines the result by considering more and
more less significant digits. Both operations take time proportional to the number of digits of the
numbers involved.

この operation の入出力の logistics は乗算と同じで、その結果は 150 digits までの長さになる可能性があ
ります。予想していたかもしれませんが、除算のための microcode は乗算のそれよりもさらに複雑なものです。
それは入力両方の most significant digits を見ることによって最初に approximates してからその結果を
less significant digits を順に considering することで gradually refines するという iterartive な
approach です。乗除算どちらの operation も involve された数値の桁数に proportional な時間を必要とし
ます。


Besides arithmetic operations the engine also supported shifting values up and down in base 10,
corresponding to multiplying or dividing by powers of 10. Here is the step down operation, what we
would call right-shifting:

解析機関は算術 operatins とは別に、10のべき乗による乗除算に対応する基数 10 での shifting values up や
shifting values down もサポートしていました。以下に示したのは、わたしたちが right-shifting と呼ぶ
down operation です。


  >n   #a
  Vi      → Vh Vt


This instruction shifts the value in Vi a steps to the right, effectively dividing the value by 10a.
The n as usual specifies how many times to repeat the operation. Like with the multiplicative
operations the shift, sorry stepping, operations are somewhat familiar but also quite different. The
step up operation takes two parameters: the number of times to repeat the operation and how far to
shift the value. Since each operation card only holds one parameter and this one uses two we need to
operation cards, the operation itself and a dummy card that has no function but to hold the amount
to shift by.

この instruction では V1 にある value を右へ effectively dividing the value by 10a だけ shift します。
n には通常、どのくらいの回数その operation を繰り返すのかを指定します。乗算 operation と同じように
shift、sorry stepping are somewhat familiar but also quite diffrent, step up operation は、その
operation の繰り返しの回数と値をどのくらいシフトするのかという二つのパラメータを取ります。各 operation
card はそれぞれひとつのパラメータしか保持できないので、二枚の operation cards が必要となります。その
内訳は operation 自身のものと機能は持たないがシフト量を保持している dummy のcardです。


In modern programming shift operations always discard bits, either high or low bits. As we've seen
Babbage made sure operations never discarded bits. In this case we get two outputs: the shifted value
on one column and the bits that were shifted away on the other. Again, if you really intend to
discard the bits that were shifted away you can just store them in a scratch column.

modern programming の shift operation では high bits か low bits のいずれかが常に discard されます。
わたしたちがすでに見てきたように、バベジは operation が決して bits を discard しないようにしていまし
た。このケースでは shift されて column にある値と、それに伴って shifted away された bits の二つの出
力が得られます。繰り返しますが、shifted away された bits を本当に discard することを意図するのなら、
scratch column にそれを storeできます。


Internally the engine had primitives that could shift by 1 and 2 digits in one cycle and the shift
card was implemented by repeatedly shifting by 1 digit. If you wanted to shift by an even number
there was a separate card that worked the same way as the single shift but repeating the 2-digit
shift primitive:

内部的には解析機関は 1サイクルで 1digit または 2digits シフトできる primitive を持っていて、shift
card は 1digit のシフトの繰り返しによって実装されていました。偶数でシフトを行いたい場合、single
shift と同様に動作するけれども 2-digits の shift を繰り返すような primitive が独立した card として
存在していました。



  >>n    #a
  Vi           → Vh Vt


This instruction shifts by 2a but uses only a cycles to do it where the single step 
down operation would take 2a cycles. Symmetrically there are operations for stepping 
up, what we would call shifting left:

この instruction は 2a だけ shift しますが、その実行に際しては single step down operation が 2a サイ
クル消費するのに対して 1サイクルしか消費しません。これと symmetrically な、わたしたちが shifting
left と呼ぶであろう stepping up という operation が存在します。


  <n #a
  Vi → Vh Vt

 
  <<n #a
  Vi → Vh Vt

There's a few things to note about this set of operations. First of all, the amount to shift by is
always fixed by an operation card so there is no way to shift by a variable or computed amount, only
by a constant. Also, since no values are ever discarded the up/down variants are complementary:
stepping up by 26 gives you the same result as stepping down by 24 except that the head and tail of
the results are swapped. So you would never step more than 25 in any direction because you could get
the same result with fewer cycles by stepping the other way.

この set of operation について特記すべきことがらは多くはありません。第一に、シフト量は常に operation
card によって固定されていますから、variable もしくは computed amount を使ってシフトする方法はありま
せん。constant による指定のみ可能です。また、stepping up by 26 した結果はその head と tail が入れ替わ
っているのを除けば stepping down by 24 したものと同じです。ですからいずれの direction でも 25回を超え
て step することは決してありません。なぜなら、同じ結果を別の方法で stepping することで
より少ないサイクルで求められるからです。

Now we get to addition and subtraction. You might think they were among the simpler operations,
simpler than division surely, but no, the instruction format is really hairy. The thing is, you very
often end up having to perform long sequences of additions and subtractions and if the format was
straightforward like division you would end up constantly writing values out to columns and reading
them back in. What you really want is to add and subtract a sequence of numbers into a running sum
inside the engine's mill and only once you've done store the result in a column. The interface for
doing this changed many times and the final result is clearly a work in progress itself. The basic
form looks like this:

さてこれで加算と減算が手に入りました。加減算は除算よりも格段に単純である operations だとあなたは考え
るかもしれません。しかしそうではなく、この instruction format は本当に複雑 (hairy) なのです。結局の
ところ、あなたは長い sequences の加減算を頻繁に行う必要に迫られます。またもし format が division の
ような starightforward なものであれば、constantly に columns へ writing value してそれらを読み戻す
という動作も頻繁に実行しなければなりません。あなたが本当に求めていることは、a sequence of numbers
の加減算の結果を解析機関内部にある running sum に押し込んでカラムにはただ一度だけ結果を格納するよう
にするということです。このためのインターフェースは何回も変更されていて、最終的な基本形は次のような
形です。

  +a –  b  +
  Vi0 Vi1 … Via Vj0 Vj1 … Vjb → Vo


This instruction first adds a values together, then subtracts b values, and finally stores the
result in Vo. The second addition card seems a bit random; it's not clear why it's even necessary
but in any case it's just an end marker, it doesn't cause any numbers to be added.

この instrucnton は最初に a values を加算し、その後に b values を減算します。そして最後に結果を
Vo に格納します。この二番目の addition card は a bit random に思えます。これが必要な理由は明確では
ありませんが、すべてのケースにおいてこれ(二番目の addition card) は単純に end marker となっていて、
加算対象の数値となることはありません。


You might be thinking to yourself: surely you need two columns to store the result or you may end
up discarding digits? Well yes, sort of. The internal column that stores the running total before
it's transferred out has 3 extra digits of precision so you can safely add and subtract lots of
numbers without overflowing. And as long as you're sure that the final result doesn't exceed 50
digits then you're good. If the result does exceed 50 digits then the machine would stop and notify
the machine's operator, presumably by ringing a bell. What he could do to resolve the issue is
unclear. But that's how it worked.

結果を格納するために必ず二つのカラムが必要になるか、さもなければ結局は何桁か破棄することになるので
はないか? こう考えることがあるかもしれません。 Well yes, sort of。running total を格納する internal
column は 3桁の extra digits を持っていますから、overflow することなく安全にたくさんの数値の加減算
が行えます。そして最終結果が 50桁を超えることはないとあなたが確信している限り、you're good です。
最終結果が 50桁を超えたならば機械は停止し、おそらくはベルを鳴らして機械のオペレーターに知らせます。
オペレーターがその問題を解決するためにできたことは unclear です。しかし、that's how it worked。


Now, Babbage felt that this was a somewhat limited interface: you have to add first, then subtract,
and then you're done. Sometimes you want to subtract first. Other times you want to add, then
subtract, then add some more, and so on. So he experimented with other approaches, like allowing as
many add and subtract cards as you want, in any order, terminated by a special F card. Often you
want just one addition or subtraction so he introduced two new cards, add-once and subtract-once.
Why that's better than a general add card with a repetition count of one is unclear but presumably
they were faster. This was still a work in progress and we don't know how addition would ultimately
have worked if he'd been able to complete his design.

さて、バベジは加算を先に行ってそれから減算を行わなければならないことを limited interface のようなも
のと感じていました。減算を先に行いたい場合もあるでしょう。 Other  times you want to add, then
subtract, then add some more, and so on. そこで彼は、任意の順番で並べられていて special F card で
終端される必要とするだけの数のカードの加算や減算が可能となるような別のアプローチで実験しました。単
なる一つの加減算は頻繁に必要になるので、彼は二つの新しい cards add-once と subtract-once を導入し
ました。なぜそれが repetition count を持った general add card よりも優れているのかは unclear ですが、
たぶんより高速であったのでしょう。これは still a work in progress であり、バベジが設計を完了できる
ようになったときに最終的に加算がどのように行われることになったのかはわかりません。


Special operations


The operations I've covered so far are the most straightforward ones, the arithmetic operations. The
remaining ones are a set of somewhat obscure arithmetic operations and the control structures. I'll
go over the obscure ones first, starting with the operations for counting significant digits.

これまで cover してきた operation は最も straightforward な arithmetic operation のものでした。残っ
ているものは obscure arithmetic operations や control structures のようなものの集まりです。
I'll go over the obscure ones first, starting with the operations for counting significant digits.


  Z1 a
  Vi → Vo
  Z2 a
  Vi Vj → Vo


The one-input version computes the number of significant digits of a single value, the  two-input
version computes the sum of the number of significant digits in two inputs. The one-input operation
is somewhat useful; the two-input one is more puzzling. It could be implemented using the one-input
version and addition, though this would be a lot less efficient. Babbage must have had some use in
mind for both but it's not clear from his notes what it was.

一入力バージョンでは significant digits of a single value の数を計算し、二入力バージョンでは二つの
入力にある significant digits の数の合計を計算します。一入力の operation は somewhat useful で、二
入力のそれは more puzzling です。二入力バージョンは一入力バージョンと加算を使って実装できますが、
それでは効率がかなり悪くなります。バベジは some use in mind for both を持たなければならなかったはず
ですが、彼の notes からはそれがなんなのかははっきりとしません。

  Σn   Ca   T
  Vi0  Vi1   …  Via  → Vo


The analytical engine was a generalization of the difference engine but the goals were much the
same: producing arithmetic tables. Hence it seems natural that the analytical engine should have
“native” support for difference engine style calculations. This operation provides that support.
It performs n iterations of the a-order finite difference tabulation. How finite difference
tabulation works is covered in full detail in my post about the difference engine. This operation,
which is naturally 
repetitive, may be the inspiration for having a repeat count on the other operations.

解析機関は階差機関の genelization でしたが、その目標は much the same、つまり arithmetic tables の
作成でした。したがって、解析機関が階差機関形式の計算を“native”サポートすべきなのはごく自然なこと
でしょう。この operation はそのようなサポートを提供するもので、a-order の finite diffrence
tabulation の iterations を n回実行します。finite difference tabulation がどのように動作するかにつ
いては、わたしの階差機関についての投稿に詳しく書かれています。この naturally repetitie な operation
はおそらく、他の operations に対する repeat count を持つことの inspiration となったでしょう。


For each iteration you specify the set of columns that hold the differences and the output column.
This means that for say 100 iterations you need to specify hundreds of variable cards. It makes
sense to some extent, you probably want the output of each iteration to get its own column rather
than override the previous value difference-engine-style. On the other hand, a modern programmer
would have used a 50-element array and stored the output at successive indexes, rather than
duplicate the code 50 times to store the results in what is essentially 50 global variables. The 
underlying issue is a broader one: the analytical engine only supported what we would call direct
addressing, global variables basically. There was no such thing as writing to or reading from a
column whose index was computed at runtime, so you had no data structures of any kind, not even
flat arrays. Indirect addressing wouldn't actually have been that difficult to implement but
apparently it just hadn't occurred to Babbage and the differences operation is one of the places
where you see the effect.

iteration ごとに differences と output colmun を hold している columns のセットを specify します。
これはたとえば100回 iteration するためには hundreds of variable cards の specify が必要になることを
意味します。そういった動作は some extent には意味がありますが、固有の column を得るためには
difference-engine-style の previous value を override するのではなく iteration ごとの出力を得たく
なるでしょう。一方で、modern programmer は結果を50個のグローバル変数に格納するためには、50回コード
を複製するのではなく 50個の要素を持つ配列を使って出力を successive indexes に格納するでしょう。
underlyng issue はより幅広いものです。基本的に解析機関はわたしたちが直接アドレス指定 (direct
addressing) と呼ぶものやグローバル変数しかサポートしていません。実行時に計算される添え字を持った
colmun に対する書き出しや読み出しは存在しないので一切のデータ構造は使えませんし、flat な配列すら
ありません。間接アドレス指定 (indirect addressing) がなかったのは実装が困難であったからではなく、
単にバベジが思いつかなかったからのようで、diffrences operation はその効果を確認できる箇所の一つです。


The last few operations we don't actually know the instruction format for. The first two are
approximate multiplication and division. You'll remember that multiplication and division take time
proportional to the number of digits. If an approximate result is good enough for a computation you
can use the approximate versions which works essentially the same way as their accurate counterparts
except for a step before the main computation that right-shifts the operands to discard the least
significant digits, and in the case of multiplication a step at the end that left-shifts the result
back to get the right magnitude.

最後のいくつかの operation に関してはそれに対する instruction の formatがよくわかっていません。そう
いった operation の最初の二つは approximate multiplication と approximate division です。乗除算が数
値の桁数に proportional な時間を要することをあなたは思い出すでしょう。もしある近似結果が
computation にgood enough であれば、その accurate counterparts と本質的に同じ方法で worksする近似
バージョンが least significant digits を discard するために operand をright-shifts する main
computation の前の一ステップと乗算の場合の right magnitude を得るための result の left-shifts の最
後の一ステップを除いたステップで使えます。


The last arithmetic operation is double-length addition which is similar to the addition above but
for each operand takes two columns, the head and the tail of a 60-digit value, and produces a
60-digit result. It's pretty straightforward really, the only really notable thing about it is that
Babbage's implementation has a subtle bug which may cause the output to have the wrong sign in some
cases.

最後の arithmetic operation は倍長加算 (double-length addition) です。これは前述した加算と似ていま
すが、こちらではオペランドはそれぞれふたつの colmuns を取り、その head と tail は 60 digits value
で、60-digits の結果を生成します。これはとても straightforward really で、only really notable thing
はバベジの implemmetation には一部のケースにおいて出力が間違った符号で行われる事態を引き起こす可能性
を持つ subtle bug があったということです。


Control

As you may have noticed I've been going from the best to the least well understood operations and now
we get to the control flow operations, the least well understood of all. Babbage does mention them
but spends very little time on them. His focus was on the more challenging operations like the
arithmetic ones and control flow, which would be easy to implement mechanically, he more or less
ignored. He knew at a high level which kind of control flow the engine should support and knew that
it would be easy to implement – so why spend too much time on it at the design phase?

お気づきかもしれませんが、わたしは the best well understood operation から the least well understood
operation へと向かいました。そして control flow operations を理解しました。バベジはそれら (control
flow operations) に言及こそしましたが、そのために割いた時間はわずかでした。彼の focus はもっと
mechanically な implement が容易な arithmetic ones や control flow のような challenging な operations
にあって、he more or less ignored。解析機関がサポートすべき制御の種類とその実装がどのくらい容易である
ものかをバベジは高いレベルで理解していました。であればなぜ design phase で時間をかけすぎたのでしょうか?


The two control operations we do know is branch-if-zero and branch-if-negative:
わたしたちが知っている二つの control operations とは branch-if-zero と branch-if-negative です。


  0?  a
  Vi  b
  –?  a
  Vi  b

The first thing you'll notice is that the variable cards are different – where normally a variable
card specifies a single column, for the control operations they also specify a count. They're also
different in that the argument is not the number of times to repeat the operation because that
doesn't make sense for a branch.

まず気がつくのは variable cards が違うということでしょう。通常 variable card は single colmun を
specify するのに対して、control operation では count も specifies します。意味がないのでbranch では
その引数が operation の繰り返し回数の数値ではないということも異なる点です。

They way both operations work is that first the selected column is checked for whether it's zero or
negative respectively. If the condition is true the operation card stream is moved by a cards and the
variable card stream is moved by b cards. It's not clear which direction the cards are moved but
since we know programs that (at least appear to) branch backward it seems plausible that they're
backward branches. Also, looking at the table programs that were written both by Babbage and others
there can be little doubt that his intention was for the engine to be what we today call Turing
complete. And if the branches go forward it wouldn't be (though the margin is too small for me to
prove that formally).

両方の operations が work する手法は最初に select された colmun がゼロか negative respectively か
どうかチェックされることです。その condition が true であれば operation card stream は a card に
よって move され、variable card stream は b cards によって move されます。cards が move する方向は
明確ではありませんが、わたしたちはプログラムが backward に branch することを知っている (少なくとも
そう見える) ので、cards の move する方向が backward branch だと推測するのは妥当でしょう。同様にバ
ベジが書いた table program と他の人が書いたそれの両方に注目することにより、彼の intention が解析機
関を今日わたしたちが Turing complete (チューリング完全) と呼んでいるものにすることであったことが疑
わしくなる可能性があります。さらにもし branch が forward 方向であればチューリング完全にはならないで
しょう (とはいえそれを証明するには余白は狭すぎます (though the margin is too small for me to prove
that formally))。

Note that since the operation and variable cards are moved independently it's quite possible to run
the same operation cards with different variable cards as input as well as the other way round, by
branching by unaligned amounts. It also makes programming more error prone though.

この operation cards と variable cards は独立して移動するので、異なる variable cards を unaligned
amounts で branching することによって、other way round と同じように入力として扱って同一の operation
cards を実行することが quite possible なことに注意してください。このことはプログラミングをより error
prone なものにもします。


Basically it's clear that the control operations were never fully developed and just because we only
know of a limited doesn't necessarily mean that the finished engine wouldn't have had a full-featured
set of control operations. It's likely that he just never completed the design.

control operations が基本的には fully develop されなかったことは明らかで、それはわたしたちが知って
いるのが full-featured な control operations の setを finished engine が持たなかったのはそれが必要
なかったということに限られているからです。つまりそれは、彼が決して設計を完了していなかったであろう
ということです。


You have now seen the three different ways the analytical engine could be programmed, including the
full instruction set as we know it today. Our understanding of the engine is incomplete though and
it's possible that further research into Babbage's notes will tell us more. But even what we do know
gives a clear sense of the flavor of programming the engine supported. My next post will focus on
one particular program, the famous first program for computing Bernoulli numbers from Ada Lovelace's
notes on the engine. As you've seen the engine is rich in programming and some of it, for instance
Menabrea's small programs above, predate the Bernoulli program. The next post will explain why that
program nonetheless deserves to be singled out and celebrated as the first example of what we today
understand as programming.

ここまでで、今日わたしたちが知る full instruction set を含めた三つの異なる解析機関をプログラムできる
方法を見てきました。解析機関に対するわたしたちの理解はまだ不完全ですが、バベジのノートをより深く探る
further research は可能です。わたしたちが知っていることでさえ、解析機関がサポートしていたプログラミ
ングの flavor の a clear sense を与えるのです。次回の投稿では、Ada Lovelace の解析機関についてのノー
トにあった有名な Bernolli numbers を計算する最初のプログラムに焦点を当てます。すでに見てきたように解
析機関は rich in programming で、たとえば Bernoulli program 以前にも Menabrea の small program があ
りました。なぜその Bernoulli program が、今日わたしたちがプログラミングとして理解しているものの the
first example として celebrate されたのかを次回説明します。

■_

訳語の話

~みなもと太郎「風雲児たち」茶屋 其の四拾壱~

188 名無しんぼ@お腹いっぱい [sage] 2013/05/02(木) 19:45:49.25 ID:abxAggII0 Be:
    bankを「銀行」と日本語訳したのは、福沢諭吉

    お金が行きかうところだから、本来は「金行」と訳すべきなんだろうが
    日本は銀本位制だったので、あえて銀行と訳した 

189 名無しんぼ@お腹いっぱい [sage] 2013/05/02(木) 20:14:43.95 ID:55GvQ7Xg0 Be:
    「経済」も諭吉が訳した新語だっけ 

191 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 00:26:34.45 ID:PTWKntDc0 Be:
    意味が少々おかしくても明治の人たちは一所懸命訳語を作って世に問うた。その中から造語として
    生き残った物が現代も使われている。それに比べて今の学者たちはアホみたいに英語の単語をそのまま
    日本語に混ぜて使って平気でいる。国語審議会なんかも議論にはモデレートした言葉だとかインフラを
    整えろだのとしゃべってる。こいつらに国語を語る資格はないと思う。 

192 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 00:34:29.85 ID:jHE1xqLW0 Be:
    >英語の単語をそのまま日本語に混ぜて使って平気でいる

    いや、インフラとか天麩羅同様既に英語由来の日本語だろ
    元々インフラストラクチャーの略で既に和製英語、つまり日本語なんだから 

193 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 13:04:57.91 ID:5HMApoH50 Be:
    言葉は生き物だからね
    コンピュータも、昔は「電子計算機」と呼ぶのが普通だったけど
    中国語の「電脳」のほうが、いつのまにか定着した

    たとえぱ、外国からピストルが入ってきたとき、これにうまく当てはまる日本語がなく、「ふところ鉄砲」と呼んでいたが
    あるとき、「拳銃(けんじゅう)」という言葉が出来て、それが定着した 

194 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 15:09:18.98 ID:LcSzP/w30 Be:
    イケメンとかツンデレとかすっかり定着してるし 

195 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 15:12:43.89 ID:pvyM4dJn0 Be:
    定着というよりただの流行語じゃないの。
    10年後には死語になってるでしょ。イケメンもツンデレも。 

196 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 18:28:12.76 ID:PTWKntDc0 Be:
    ある程度必要に合わせて造語していくのは言葉の流れだが、アホな学者が英語をそのまま訳さずに
    組み込んでくるのがバカ丸出しだと言ってる、それがよりによって国語審議会の会話なんだから
    なおさらどうしようもないと言う話。言語のドュラビリティは教科書では保証されているが、日常的に読まれる
    コンテンツではフリューディティになっているためエンハンスしなければならない。

    わかるこれ??コピーは公開不可だから嘘だと言われるかもしれないが事実だよ。 

197 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 18:44:27.78 ID:K3pGHX4I0 Be:
    英語のconstitutionに相当する日本語はなく、訳しようがなかった

    仕方がないので、聖徳太子の「十七条憲法」をもちだしてきて、「憲法」と訳すことにした 

198 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 18:57:27.35 ID:jHE1xqLW0 Be:
    >定着というよりただの流行語じゃないの。
    >10年後には死語になってるでしょ。イケメンもツンデレも。

    イケメンもツンデレも既に10年以上前からあるんだが
    今日日10年も流行る流行語なんて皆無、故に既に定着してると言えるだろ 

199 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 19:09:48.75 ID:pvyM4dJn0 Be:
    >>198
    言葉が発生した起源が10年前でも、一般人にその意味が知られるレベルで使われるようになったのは
    そんなに古くはないだろ。
    10年後、意味は分かるけど日常まず使うことはない(=死語)レベルになると思うけどね。あくまで予想だけど。 

200 名無しんぼ@お腹いっぱい [sage] 2013/05/03(金) 20:17:15.23 ID:Kr2E1AA50 Be:
    ちょうど「パソコン」という単語が日本に定着する、まさにその時代に学生生活を送ってきたが、
    当時は用語として「コンピューター(電子計算機)」はあったけど、ホームユースのものをどう表すかで、雑誌が好き勝手に略称作ってたっけ。
    「パソコン」「パーコン」「ミニコン」「マイコン」、あと他にも呼び方があったと思う。

    で、最終的には「パソコン」が生き残っただけでなく、むしろ逆に、「パーソナルコンピューター」よりも知られて現在に至ってるわけだけど。

    >>193
    >中国語の「電脳」のほうが、いつのまにか定着した
    コンピューターの訳としては知られてる方だけど、定着したと言いきれるほどではない気がするが・・・ 

(今のPCのようなものを指す)「ミニコン」はないような気がするけどどうなんだろ

■_

■_


一つ前へ 2013年5月(上旬)
一つ後へ 2013年5月(下旬)

ホームへ


リンクはご自由にどうぞ

メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp