■_
いやもーなんというか、咳をするにしてももう少し小さい音でやってくれと(ry
Yさんの新刊見かけなかった。
一つ前へ
2013年5月(上旬)
一つ後へ
2013年5月(下旬)
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 ですか。
プログラマの考え方がおもしろいほど身につく本 問題解決能力を鍛えよう!
第二章まで読んだけどなかなか面白い。すでに書評を書いている人がいるので
もっとつっこんだところを知りたいという人はそちらを。
重箱の隅的に気になったところがあったけどそれはまた。
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>()
最初に Matz のと読んでしまったのはナイショ。 Sandi Metz’ rules for developers
で。その中身
Sandi Metz’ rules for developers
- Classes can be no longer than one hundred lines of code. クラスを100行より長くはできない
- Methods can be no longer than five lines of code. メソッドは5行より長くはできない
- Pass no more than four parameters into a method. Hash options are parameters. 一つのメソッドに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 は好きな言語だが、処理系に恵まれてない。その原因の一つは call/cc だろうな。あれを維持するために、いろいろな最適化が犠牲になっている。
— Shinji Konoさん (@shinji_kono) 2013年5月18日
@shinji_kono call/ccが最適化戦略に大きな影響を及ぼしているのは確かですが、Schemeには「新たな言語機能の提案を記述する言語」という役割もあり、新たな制御プリミティブを「こういうものです」と書いて見せるのにcall/ccはしばしば不可欠なのですよね。
— Kilo Kawaiさん (@anohana) 2013年5月18日
@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日
久しぶりに神保町の明倫館書店行ったんですよ。 なんの気なしに数学本の棚を見てたら「計算尺のつかいかた」的な本が十数冊。 どれもまあ結構年代物な雰囲気でしたが(奥付は確認しなかった)、 割に薄いし美品なわけでもないから一冊買ってみるかと発行年が割と新しそうなものを 抜き出して値段を見ると…末尾に0が四つ並んでました…w
放送大学の講座に「ソフトウェア工学」があるというのを知り (放送大学のテキストを扱ってる書店があって、そこで偶然見つけた 財団法人 放送大学教育振興会|詳細説明画面)、 いつ放送してるんだろうと思ってEPGの放送大学のところを一生懸命探しても見つからない (ところで情報科学関係結構ありますよ)。で、いろいろ調べてみると 放送大学 授業科目案内 ソフトウェア工学('13) 放送大学 授業科目案内 情報学プログラム 「ラジオ」番組で、土曜日12時(昼間ね)にやってるらしいことが判明。 で、ラジオて周波数は幾つよ。というとFMだったらしい 放送大学 - Wikipedia
八田さんとはかなり以前に一、二回だけメールでやり取りしたことがある。はず
なんかずいぶん昔に書いたものが @yomoyomo 効果でまた読まれているのか:Free At Last japan.zdnet.com/blog/mhatta/20…
— Masayuki Hattaさん (@mhatta) 2013年5月18日
まあ特に今付け加えることはないというか、オープンソースにするのが当然であるという理解がこのまま主流ならそれで俺はかまわないよ(わらい
— Masayuki Hattaさん (@mhatta) 2013年5月18日
お前ら覚えていないのかもしれんが昔はフリーソフトウェアだのオープンソースだの言うだけでコミュニスト扱いですよ。それに比べれば今は夢のようだよ(わらい
— Masayuki Hattaさん (@mhatta) 2013年5月18日
世間には小賢しい奴が多いので、オープンソースにはデメリットがあります、やはりプロプライエタリにしないととか言い出す奴が増えてまたオープンソースがマイノリティに追いやられれば(そろそろモバイルやクラウドとかでそういう傾向が出てきている)、どっちみちコピーレフトは蘇るでしょうよ
— Masayuki Hattaさん (@mhatta) 2013年5月18日
今のところはまあオープンソースにしない奴は頭おかしいくらいのところが基本線になってるから安心だな。むしろ問題はオープンデータだよ
— Masayuki Hattaさん (@mhatta) 2013年5月18日
コピーレフトとは、全員協力してオープンにすればみんなハッピーなのに他人に出し抜かれるのが怖くて出来ないという囚人のジレンマっぽい状況を脱出するための一手段である、というような話を書いたのが2002年なので、お前らはようやく2002年の俺に追いついたということだな(わらい
— Masayuki Hattaさん (@mhatta) 2013年5月18日
そもそも俺が最初にGPLについて書いた文章のタイトルは確か「GPLなんかどうでもいい」だったしな(わらい あの原稿どこいっちゃったんだろう
— Masayuki Hattaさん (@mhatta) 2013年5月18日
まあウェブサービス分野に関しては状況がやや面白くないというか、全然フリーでもオープンでも無い状況が続いているわけで、OSSDへの準拠やAGPLの利用は推進すべきだろうな
— Masayuki Hattaさん (@mhatta) 2013年5月18日
ソフトウェア特許やビジネスモデル特許に関しても、まあアメリカは相変わらずアレな部分はあるものの、ああいうものがいかにくだらないかという共通認識的なものは世界的に共有されてきたからまあ成功の部類じゃないんですかね
— Masayuki Hattaさん (@mhatta) 2013年5月18日
しかしいまだにフリーソフトウェア=GPLが適用されたソフトウェアだと思い込んでいる奴がいるのは嘆かわしいことである
— Masayuki Hattaさん (@mhatta) 2013年5月18日
昨今ではソフトウェアライセンスの問題よりも、リアル世界の法律の問題のほうがオープンソースには影響でかいね
— Masayuki Hattaさん (@mhatta) 2013年5月18日
つまりそれって結局OSSが使われるようになったからなんじゃないかな。夢のある話からただの憂鬱な現実になったというか twitter.com/mhatta/status/…
— しゅううさん@はいよらないさん (@syuu1228) 2013年5月18日
それ(怖い人はいません)は誇張しすぎではないかと言おうと思ってたら 本人が補足していましたでござるの巻 まつもとゆきひろ( @yukihiro_matz )さんがBKCで講演会をするという噂を聞いて行ってきた - Pastalablog in はてな Twitter / yukihiro_matz: 本当はオープンソース界隈に怖い人はいます。でも、物理的に噛み ...
本当はオープンソース界隈に怖い人はいます。でも、物理的に噛み付いたり、暴力を振るわれたりはしません。ちょっとおっかないだけ。そういう芸風だと思って付き合いましょう
— Yukihiro Matsumotoさん (@yukihiro_matz) 2013年5月18日
.@twitter why can't we have a 'Translate' feature, so that I can read what @yukihiro_matz posts. Or any other of the non-english posts.
— Rupak Gangulyさん (@rupakg) 2013年5月18日
こんどはなんじゃらほい 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. 以下略
しかし相変わらず危ない単語が並んでいる(ような気がする)
Added complete Windows-386/MinGW runtime support. Thanks, Jean-Marc Lienher!
某社の機材その他の調達システムなんですが(最近新しくなった)、 CD-R が必要になったので手配しようとデータベースから検索すると 「該当なし」 おっかっしーなあと思いつつ色々試しているうちに事情を把握。 なんとデータベースには「CDーR」で登録されていて、 わたしは「CD-R」で検索かけたものだから見つからなかったという… 「CD」を「CD」と同一視するのはやってたんだからもうちょっとがんばってくれ。 というか誰だよこの入力(とそのベリファイ)やったの ○| ̄|_
いくつか確かめてみたところ、「-」や「-」であるべきところが軒並み「ー」になってましたわよ…
Eiffel
この辺については書きたいこともあるんだけどちとまとめづらい。
社内内弁慶を社外勉強会に参加させる方法: ソフトウェアさかば 社内勉強会はヤメだ。自主的はいらん、全員技術発表だ! - Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。 ごく普通の会社で社内勉強会・社内研修みたいのを散々やってきたけど、あまり成果が出てこなかった話でもひとつ。 - DenkiYagi
「若者のコピーレフト離れ」は本当か? GitHub世代に注目してみる - YAMDAS現更新履歴 こっちはまあ ↓に同意というところでしょうか
コピーレフトより緩いライセンスになってても困ることって特に無いのだから、歓迎すべきでは:「若者のコピーレフト離れ」は本当か? GitHub世代に注目してみる - YAMDAS現更新履歴 d.hatena.ne.jp/yomoyomo/20130…
— しゅううさん@はいよらないさん (@syuu1228) 2013年5月17日
C ってのは何のかんの言っても int と ポインターのサイズが同じなことを期待している プログラミング言語な気が。 Cプログラマーの十戒にも、この二つを同じサイズとして決めうちするなとかあったけども。
あれ、違った? プログラマーへの訓戒 The Ten Commandments for C Programmers (Annotated Edition)
うわあああああ#include <caml/alloc.h>して caml_copy_double() の宣言引きこんだら SEGV らない。include 省略して暗黙宣言に頼ってしまうと SEGV る。何だこれ! 何っだこれ!
— Jun Inoueさん (@jun0inoue) 2013年5月15日
( ゚д゚)ハッ! そうか、OCaml の value 型は long だから、64 bit マシンで暗黙宣言に頼ると関数の返り値の value が int に切り詰められるんだ!!!C 言語って最悪だ!!!!!!#今更
— Jun Inoueさん (@jun0inoue) 2013年5月15日
ガルパンの話 (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 - 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
★4軸クレーンを作って体験することで制御と機械設計を学べる!!
あれーもーこれーもーもーっと知りたい~♪
瓶詰妖精 Bottle fairy BOX [DVD]
信頼度成長曲線のはなし。 ふと気になったのですが、 ゴンペルツ曲線やらロジスティック曲線やらS字やら遅延S字やらから 「もっともサンプルに適合する(適合しそう)」なモデルを選択するとは書かれているものの、 どうやって選ぶの? と。 いやまあプロットして「目視」で判断てのはお手軽ですがそれはいくらなんでもひどくはないかと。 んでまあ コルモゴロフ-スミルノフ検定 - Wikipedia コルモゴロフ こういうのがちらほら見えてきたりはしたんですが、 きちんと論文に書かれてるものってあんまりないみたいなんですよねえ。 いたずらに「職人芸」を否定する気はないんだけど、 もうちょっとこう「工学」らしさを見せて欲しいというかその。
ある程度の期間やってたりすると途中でモデルを変える羽目になることも あると思うんだけどどうなんすかねえ。
本日は晴天なり - Wikipedia
本日は晴天なりの由来は?
「本日は晴天なり」となぜマイクのテストでは言うの? - Yahoo!知恵袋
あははっ 語楽 本日は晴天なり
中央気象台がはじめて試験放送をしたときに、担当者が「本日は誠によい天気ですね。それでは気象情報の試験放送を始めます。」
という意味のことを言い、英語にも「It's fine today」というマイクテストの用語があるので、気象情報の放送はこの言葉からはじめようということになったのです。
お? 別の説が。
「音素」云々はなんかアヤシイ気がするんですよね。
少なくとも現在広く使われてると言うことはなさそうですし
(Island Life - 本日は晴天なり)
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 については気になってるから買うかな。半額だし。
あんまり情報が流れてこないなあ 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 でちょっと書こうと思ったけど時間が
日曜日にこれの単行本の宣伝ポスター(小さめ)を見かけて ああ連載やってたのねと初めて知った。 時代設定的に「東周英雄伝」的なものかと思ったら違ったらしい。 コミックナタリー - 王欣太新作は古代中国もの、ホラで帝国に挑む男の一代記
某所のSICP読書会に行けなくてぐんにょり。
Head First C とか 21st Century C を含めるのは微妙な部分もあるけれども、 なんか北米でも Cの入門書ってまだそれなりにでているっぽいので、 日本で出版されてるものと比較してみたいなあと思ったり。 にしても R の本たくさんでてるなあ向こうでも。
社員食堂の混雑具合に、必要充分な席数を求めるにはどうやればいいのだろうか などと考えてみたり。 食べるもの乗っけたトレー持って席が空くの待つのってなんつーかめげるよね。という。 G 社とかそういうのないんだろうなあ。げしょ。
シェル芸イベントのための準備だろうか Unicode 16進文字列を表示する - jarp, ログファイルを2個だけ残してあとは消す - jarp, 空白を含んだファイル名とIFS - jarp, 最後のN行だけ表示しない - jarp,
gawk 4.1.0 がリリースされました。頑なに拒んでいた inplace とかが含まれています。 RT Gawk 4.1.0 released - Google グループ groups.google.com/forum/?fromgro…
— Hirofumi Saitoさん (@hi_saito) 2013年5月11日
つーことでビルド。
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つきにしたときに出てる警告が気になりますわね
なんかこういうのが流れてきたんですが
" 「アルジャーノンに花束を」って小説があるじゃん、 あれ日本じゃめちゃめちゃ増刷されてるけど アメリカじゃ廃刊なんだぜ。 日本でヒットした理由は..." tmblr.co/Zh0IbyknDIkb
— IKENO Naokiさん (@nao550) 2013年5月12日
" 「アルジャーノンに花束を」って小説があるじゃん、 あれ日本じゃめちゃめちゃ増刷されてるけど アメリカじゃ廃刊なんだぜ。 日本でヒットした理由は..." tmblr.co/Z_xEXwkniu5s
— わーさん (@wanderland1124) 2013年5月12日
ちょっと検索すると、疑ってる人もいるけどもっと過激なことを言ってる人もいた。
『アルジャーノンに花束を』ってアメリカじゃ廃刊というのは真実なのかしら。なんかちょっとデマくさい気もするんだけど。
— たぬき庵さん (@tanukian) 2013年5月12日
小説「アルジャーノンに花束を」はアメリカで1959年に発表されててとっくに廃刊になっている。なぜか日本でブレイクしたのは和訳の過程で生まれた一つの「演出の巧み」によるものだと思う。読んだことないひとは是非!おすすめだ。古本屋で100円で買える
— にーさんさん (@takur23) 2013年5月12日
んー、絶版(「廃刊」じゃあないよね)にはなってないと思うんだけどなあ。 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ではないけれどもまあ同類と)自体が よろしくないという意見もあったり。
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月(下旬)
リンクはご自由にどうぞ
メールの宛先はこちら