ときどきの雑記帖'

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

一つ前へ 2013年3月(中旬)
一つ後へ 2013年4月(上旬)

ホームへ

2013年03月31日

■_

電子版が。とはいえそうほいほい買ってる余裕も 型システム入門 プログラミング言語と型の理論 | オーム社eStore(β)

短縮URLになること確実なtwitter で、アフィリエイトつきのリンクを貼られていると ちょっとイラッとする。

裁断のみのサービスつーのもあるんですね お客様の声自炊派のための本の裁断サービス 【ブックカットジャパン】 | 自炊派のための本の裁断サービス 【ブックカットジャパン】 業界最安値の本裁断サービス カットブックプロ CBP

powershell で wget やら comm のようなものを書いてみようかなあなどと。

パーツショップ栄枯盛衰(後編):写真で見るアキバ10年史 (1/2) - ITmedia PC USER BGM 「時代」で。

■_

■_ 例外と

いろいろあるんだなあ

■_

すみません。解析機関のblog記事の訳が間に合いませんでした○| ̄|_

って、誰も待ってないかw

■_

そういや昨日(土曜日)、書泉ブックタワーで見かけたなあ。買わなかったけど (原著買ってるし判型大きめの本を買うのは今控えてるし先立つものが以下略)。 Head First C ―頭とからだで覚えるCの基本 - hidemonの日記

Head First C ―頭とからだで覚えるCの基本 - hidemonの日記

「チャート式技術書」とでもいうべき、半分おちゃらけた感じの技術書シリーズの一冊。 「Head First」は
「頭から飛びけむ」ぐらいの意味で、「あまリ考えずにとにかく手を動かせ」というような ニュアンスなの
かと思われる。 アメリカには「XXX for Dummies」というシリーズがあって、およそ考えつく すべてのジャ
ンルをカバーしてたりするのだけど、日本にはあんまりこの種の本はない。なんでだろう。よく考えるとちょ
っと不思議だ。

(略)

実は、この本も縁あって監訳させていただいた。 Windows上でのCygwinやMinWGをサポートした関係で、システ
ムコール周りの説明の 歯切れが悪いのが心残りだったりするのだけど、原著からの逸脱を最小限にしつつ技術
的に間違ってはいない内容にした、つもり。 正直、いまどきC言語の本にどのくらいの 需要があるのかわから
ない気もする。 でも、これまで全然C言語なんか触ったこと無いのに、新年度から何かの間違いでC言語で開発
しなければならなくなってしまった、なんて場合に C言語界隈のパースペクティブ全体を短時間で把握するには、
結構いい本なのではないだろうかと思う。 というわけで、どうかひとつ。

ううむちょっと心が動いた(実は原著途中までしか読んでないw)。 デバッグの理論と実践 ―なぜプログラムはうまく動かないのか - hidemonの日記 この本も監訳された方なのね。

■_

入社式。あれは何年前のことだろうか…w

2013年03月30日

■_

なーんか今日は行きたいイベントが三つも四つも被っててぐぬぬという感じだったのですが x86/x64最適化勉強会5 : ATND に行ってきました。一時間近く遅刻してだけど (セキュリティエリア内で開催されるものでなくて良かった)。 遅刻つーてもいろいろ拠ん所ない事情があってデスね(ry

勉強会の感想などは明日にでも。

■_ なごやこわい

こっちはどうだったんだろう asakusa.rb 花見 2013 - HsbtDiary(2013-03-30)

■_

昨日のこれ ゲームプログラム日記:速いコードが正義

ゲームプログラム日記:お騒がせしました。 だけになって問題のエントリ以外も丸ごと消してしまったようで。

んー、どうなんすかねえ。 自分も消すこたないとは思うんですが、言及していたツイートの数に押されちゃったのかなあ。

■_

2013年03月29日

■_

年度末ということでそこかしこで退職ツイートやら

よつばとひめくりも新しく。 よつばとひめくり2013 ([カレンダー])
よつばとひめくり2013 ([カレンダー])

会社帰りに、桜がたくさん植えられている場所を通り 和菓子屋発見(いやまあ前から知ってたのだけど入ったのは初めて)。 桜餅を買ってみた。 んで、「道明寺」もあったのでそれも一緒に (コンビニだとこっちを「桜餅」として売ってたような?)。 そして道明寺と云えば大坂夏の陣で 道明寺の戦い - Wikipedia 大坂夏の陣と云えばこの人で 毛利勝永 - Wikipedia 最近この毛利勝永を主人公にした小説が出てしまった。 ということでアフィリエイト。
大坂将星伝(上) (星海社FICTIONS) 大坂将星伝(中) (星海社FICTIONS) 大坂将星伝(下) (星海社FICTIONS)
買ったけどまだ読んでない :)

■_ while (2)

なんというかその(ry

C言語なら俺に聞け(入門編)Part 113

413 デフォルトの名無しさん [sage] 2013/03/26(火) 20:09:34.75 ID: Be:
    int* my_life = NULL;
    while(1)
    {
      delete my_life;
    } 

418 デフォルトの名無しさん [sage] 2013/03/26(火) 22:40:26.80 ID: Be:
    >>413 
    無限ループは
    while(1)の方がfor(;;)よりもいいんですかね、やっぱり。
    前者は何かに書き間違えだと思う人はいない、というのがその理由らしいですけど。 

423 デフォルトの名無しさん [sage] 2013/03/26(火) 22:56:11.68 ID: Be:
    while(1)は条件式が定数ですって警告出すコンパイラがある 

428 デフォルトの名無しさん [sage] 2013/03/26(火) 23:50:03.46 ID: Be:
    VC++でも警告レベル4で出る
    http://msdn.microsoft.com/ja-jp/library/6t66728h%28v=vs.80%29.aspx 

429 418 [sage] 2013/03/27(水) 00:03:03.51 ID: Be:
    ありがとうございます。
    無限ループは while(1) と for(;;) のどちらかにするかはコンパイラなどの環境によるということですね。  

430 デフォルトの名無しさん [sage] 2013/03/27(水) 00:23:05.09 ID: Be:
    警告レベル4ってかなりきついけどね
    せいぜいレベル3まで 

431 デフォルトの名無しさん [sage] 2013/03/27(水) 00:26:54.09 ID: Be:
    >>429
    どっちでもいいって事だろ
    使い分ける明確な理由なんて無い
    大体、定数式の無限ループなんて、 組み込み位でしか使わない 

432 デフォルトの名無しさん [sage] 2013/03/27(水) 00:35:01.58 ID: Be:
    そのうち過去の人が書いたコードの移植などで警告うぜーと思ったら
    警告抑止の方法を学んでおくのがいいかもしれない。
    (GCC 4.6.2(Mingw)は警告ださねーな。while(1)) 

434 デフォルトの名無しさん [sage] 2013/03/27(水) 01:50:11.11 ID: Be:
    定番ネタ(本当にやる奴は居まいが)

    #define T_T 1
    #define _ 1

    while (T_T)
    for (;_;) 

435 QZ [sage] 2013/03/27(水) 02:33:17.54 ID: Be:
    for(;;)
    は恒常的にやってるねえ gcc -ansi -pedantic -Wall で警告でないし 

436 デフォルトの名無しさん [sage] 2013/03/27(水) 15:48:44.06 ID: Be:
    whileよりforの方が良い最適化が掛かるとかなかった? 

437 デフォルトの名無しさん [] 2013/03/27(水) 15:54:47.95 ID: Be:
    最適化なんてコンパイラによって違うだろうがゴミ 

438 デフォルトの名無しさん [sage] 2013/03/27(水) 16:55:44.48 ID: Be:
    while(1)もfor(;;)も定型句なんだから普通はどっちも同じ最適化かけるだろ 

439 デフォルトの名無しさん [sage] 2013/03/27(水) 18:52:48.91 ID: Be:
    ネストの二段目はwhile(2)にするとかの時代が樸にもありました 

■_ 速さは力

だっけか?(平成生まれおいてきぼり)

火元の記事はまだ読んでいません :) ゲームプログラム日記:速いコードが正義

■_

なんか面白そうな

これかな?

で、この人と。 フィーリングで読むアセンブラ入門

■_

■_

ふう。

2013年03月28日

■_

値段見て死んだ 日経BP書店|商品詳細 - UX設計技術バイブル

■_

■_

お、岸田さんの招待講演のスライドがあがってる。 JaSSTソフトウェアテストシンポジウム-JaSST'13 Tokyo レポート http://www.jasst.jp/symposium/jasst13tokyo/pdf/A7.pdf

■_

はい。不調です。いろいろ。

2013年03月27日

■_

千里馬常有而伯楽不常有

■_ GCC's move to C++

GCC の記述言語をC++にって話。

Ian Lance Taylorのスライドも併せてどうぞ

GCC's move to C++ [LWN.net]

GCC's move to C++

March 13, 2013

This article was contributed by Linda Jacobson

The GNU Compiler Collection (GCC) was, from its inception, written in C and compiled by a C compiler.
Beginning in 2008, an effort was undertaken to change GCC so that it could be compiled by a C++
compiler and take advantage of a subset of C++ constructs. This effort was jump-started by a
presentation by Ian Lance Taylor [PDF] at the June 2008 GCC summit. As with any major change, this
one had its naysayers and its problems, as well as its proponents and successes.

Reasons

Taylor's slides list the reasons to commit to writing GCC in C++:

    C++ is well-known and popular.

    It's nearly a superset of C90, which GCC was then written in.

    The C subset of C++ is as efficient as C.

    C++ "supports cleaner code in several significant cases." It never requires "uglier" code.

    C++ makes it harder to break interface boundaries, which leads to cleaner interfaces. 

The popularity of C++ and its superset relationship to C speak for themselves. In stating that the C
subset of C++ is as efficient as C, Taylor meant that if developers are concerned about efficiency,
limiting themselves to C constructs will generate code that is just as efficient. Having cleaner
interfaces is one of the main advantages of C++, or any object-oriented language. Saying that C++
never requires "uglier" code is a value judgment. However, saying that it supports
"cleaner code in several significant cases" has a deep history, best demonstrated by gengtype.

According to the GCC Wiki:

(略)

The complexity of a language is in the eye of the beholder. Many GCC developers were primarily, or
exclusively, C programmers, so of necessity there would be a time period in which they would be
less productive, and/or might use C++ in ways that negated all its purported benefits. To combat
that problem, Taylor hoped to develop coding standards that limited development to a subset of C++.

以下略
Copyright © 2013, Eklektix, Inc.

おお、the eye of the beholderという表現が。

■_ ランク付け

Programming languages ranked by expressiveness | Hacker News 図がポイントなので元記事をどうぞ Programming languages ranked by expressiveness ? Donnie Berkholz's Story of Data

Programming languages ranked by expressiveness – Donnie Berkholz's Story of Data

Making sense out of information

Programming languages ranked by expressiveness

Is it possible to rank programming languages by their efficiency, or expressiveness? In other words,
can you compare how simply you can express a concept in them? One proxy for this is how many lines of
code change in each commit. This would provide a view into how expressive each language enables you
to be in the same amount of space. Because the number of bugs in code is proportional to the number of
source lines, not the number of ideas expressed, a more expressive language is always worth
considering for that reason alone (e.g., see Halstead’s complexity measures).

I recently got a hold of a great set of data from Ohloh, which tracks open-source code repositories,
on the use of programming languages over time across all of the codebases they track. After validating
the data against Ohloh’s own graphs, one of the first things I did was try out my idea on
expressiveness of programming languages. Sure enough, it gave me results that made sense and were
surprisingly reasonable.

そして結論部分

Programming languages ranked by expressiveness – Donnie Berkholz's Story of Data

So, what are the best languages by these metrics?

If you pick the top 10 based on ranking by median and by IQR, then take the intersection of them,
here’s what’s left. The median and IQR are listed immediately after the names:

    Augeas (48, 28): A domain-specific languages for configuration files
    Puppet (52, 65): Another DSL for configuration
    REBOL (57, 47): A language designed for distributed computing
    eC (75, 75): Ecere C, a C derivative with object orientation
    CoffeeScript (100, 23): A higher-level language that transcompiles to JavaScript
    Clojure (101, 51): A Lisp dialect for functional, concurrent programming
    Vala (123, 61): An object-oriented language used by GNOME
    Haskell (127, 71): A purely functional, compiled language with strong static typing

Looking at the box plots again, I would tend to rule out eC based on the poor performance of the
upward-reaching whiskers at the 90th percentiles, indicating a real lack of consistency as often as
a quarter of the time (since the 75th percentile is quite good). I would also rule out Puppet and
Augeas because they are DSLs.

Combining those with our RedMonk programming language rankings on popularity, the only highly
expressive, general-purpose languages within the top two popularity tiers are:

    Clojure
    CoffeeScript
    Haskell

If you’re considering learning a new language, it would make a lot of sense to put Clojure,
CoffeeScript, and Haskell on your list, based on expressiveness and current use in communities we’ve
found to be predictive.

面白いしてんだとは思う。 結果にどのくらい説得力を持たせられているかわからんけれども。

■_

■_ hello, world

Hello World Programs in 300 Programming Languages | Hacker News List of Hello World Programs in 300 Programming Languages - C and C++ Programming Resources で。

List of Hello World Programs in 300 Programming Languages - C and C++ Programming Resources

Assembler 68000:

move.l #helloworld,-(A7)
move #9,-(A7)
trap #1
addq.l #6,A7
move #0,-(A7)
trap #1
helloworld:
dc.b "Hello World!",$0d,$0a,0

これ、OSはなんだろう。

List of Hello World Programs in 300 Programming Languages - C and C++ Programming Resources

Basic

10 PRINT "Hello, World!"
20 END

PRINT "Hello, World!"
? "Hello, World!"

PRINT "Hello, World!"
END

BlitzBasic

Print "Hello, world!"
WaitKey

DarkBasic

PRINT "HELLO WORLD"
TEXT 0,0,"Hello, World!"
WAIT KEY

Liberty BASIC

print "Hello, world"

nomainwin
open "Hello, world!" for graphics as #main
print #main, "place 50 50"
print #main, "\Hello, world!"
print #main, "flush"
wait

PBasic

DEBUG "Hello, World!", CR

DO
 HIGH 7 'Make the 7th pin go high (turn the LED on)
 PAUSE 500 'Sleep for half a second
 LOW 7 ' Make the 7th pin go low (turn the LED off)
 PAUSE 500 'Sleep for half a second
LOOP
END

Basic – StarOffice/OpenOffice

sub main
 print "Hello, World!"
end sub

TI-BASIC

:hellowld()
:Prgm
:Disp "Hello, world!"
:EndPrgm

Visual Basic

Sub Main()
 Print "Hello, World!"
End Sub

Visual Basic .Net

Module HelloWorldApp
	Sub Main()
		System.Console.WriteLine("Hello, World!")
	End Sub
End Module

Class HelloWorldApp
	Shared Sub Main()
		System.Console.WriteLine("Hello, World!")
	End Sub
End Class

BASIC がたくさん

2013年03月26日

■_

ありゃ。今日の放送が最終回だったのか さかのぼり日本史|NHK

■_

メモ。買うかどうかはわからん

■_

■_

掲載誌探すのにちょっと手間取ったけど買ってきた ヤマザキマリが描くジョブズの伝記マンガ、Kissで開幕 | ホビー | マイナビニュース

■_ 1.1

あとでじっくり見る(たぶん)



Introduction to Go 1.1

The release of Go version 1 (Go 1 or Go 1.0 for short) in March of 2012 introduced a 
new period of stability in the Go language and libraries. That stability has helped 
nourish a growing community of Go users and systems around the world. Several 
"point" releases since then—1.0.1, 1.0.2, and 1.0.3—have been issued. These 
point releases fixed known bugs but made no non-critical changes to the implementation.

This new release, Go 1.1, keeps the promise of compatibility but adds a couple of 
significant (backwards-compatible, of course) language changes, has a long list of 
(again, compatible) library changes, and includes major work on the implementation of 
the compilers, libraries, and run-time. The focus is on performance. Benchmarking is 
an inexact science at best, but we see significant, sometimes dramatic speedups for 
many of our test programs. We trust that many of our users' programs will also see 
improvements just by updating their Go installation and recompiling.

This document summarizes the changes between Go 1 and Go 1.1. Very little if any code 
will need modification to run with Go 1.1, although a couple of rare error cases 
surface with this release and need to be addressed if they arise. Details appear below; 
see the discussion of 64-bit ints and Unicode literals in particular.

Changes to the language

The Go compatibility document promises that programs written to the Go 1 language 
specification will continue to operate, and those promises are maintained. In the 
interest of firming up the specification, though, there are details about some error 
cases that have been clarified. There are also some new language features.

Integer division by zero

In Go 1, integer division by a constant zero produced a run-time panic:

  func f(x int) int {
  	return x/0
  }

In Go 1.1, an integer division by constant zero is not a legal program, so it is a compile-time error.

以下ざっくり略

へー。>コンパイルエラー

2013年03月25日

■_

小説フランス革命
前巻を買ってすらいないのに新刊が出てしまった (前々巻は一か月くらい前にクリアした) 粛清の嵐 小説フランス革命 X
粛清の嵐 小説フランス革命 X 小説フランス革命 IX ジャコバン派の独裁
小説フランス革命 IX ジャコバン派の独裁 共和政の樹立 (小説フランス革命)
共和政の樹立 (小説フランス革命)

■_

こういうやり方もいいかな。と思った。

■_

■_ 日経ソフトウエア

日経ソフトウエア 2013年 05月号
日経ソフトウエア 2013年 05月号 重箱の隅二点。

「知って得する言語の本質」という連載記事に Thus, programs must be written for people to read, and only incidentally for machine to execute という文です。この文を直訳すると、 「プログラムは、人に読んでもらうために書かれるべきであり、 たまたまそれがマシン(コンピュータ)で実行可能なだけである」 というのがあるんですが、must be writen なんだから、「書かれるべきである」 というのはちと「押しが弱い」んじゃなかろうかと思ったのですが (日本語で「~すべき」はどの程度の押しの強さを持っているかという判断もあるとは思うのですが、 RFC の翻訳推奨を見ると「~でなければならない」という印象ですよね) SICP 日本語版を見ると そこでプログラムは人びとが読むように、そして計算機はたまたま実行するように書くべきである。 …失礼しました ○| ̄|_ 前の版の訳だとどうだったんだろう(問題の一文は「第一版への序文」にあります) 計算機プログラムの構造と解釈
計算機プログラムの構造と解釈 プログラムの構造と実行〈上〉 (COMPUTATION&SOFTWARE SCIENCE)
プログラムの構造と実行〈上〉 (COMPUTATION&SOFTWARE SCIENCE) プログラムの構造と実行〈下〉 (Computation & software science)
プログラムの構造と実行〈下〉 (Computation & software science)

二個目。矢沢さんの連載 「OSとC言語の関係をきちんと学ぶ」 第12回 GDI関数とWYSIWYG で、印刷のコードがあるんですけど Win32 API直叩きするようなご時世でもないよなあと思ったものの、 素のCで書いていたのだった。 やれどっかん。

■_

ああ、まとめようと思っていたあれやこれやが Testing on the Toilet: Testing State vs. Testing Interactions existential type crisis : Zipf your variable names

2013年03月24日

■_

花見
東京で有名どころというと、上野公園とか飛鳥山とか目黒川沿いや隅田川沿い、 千鳥ヶ淵なんてのがあがってくるのでしょうが、 そういう人がたくさん集まるところは避けるw

わたしの住んでいる辺りにもこういうところがありまして。

通っていた大学のそばにもわりと良い感じのところがあったんだけど、今はどうなのかなあ。

クラウゼウィッチーズ
クラウゼウィッチーズ
積んでたのを読んだんですがダメ。受け付けない。途中で放り投げた。 なんというか、設定上、一点どうしても受け付けられないところがありました。 まああまり詳しく書く気もないんですが。こういうのって少数派なんすかね。 クラウゼウィッチーズ クラウゼウィッチーズ 感想 巌 百合彦,カスカベ アキラ - 読書メーター

ちょっと前のHNでの話題ですが、リンク先のスライド見てみたら結構面白かった。 Some dark corners of C | Hacker News

BS11で、機動戦士ガンダム 0080 ポケットの中の戦争をやっているんですが(24日放送分は第4話)、 観ていると「うわー、絵に時代を感じる」という。 最初の三部作の方が古いのだけど、むしろこの0080の絵の方に時代を感じてしまうのは なぜなんだろう。 機動戦士ガンダム 0080 ポケットの中の戦争 vol.1 [DVD] 機動戦士ガンダム 0080 ポケットの中の戦争 vol.2 [DVD]

■_ ABI互換性

メモ。

■_ Analytical Programming

図については元記事を参照してください ○| ̄|_

Analytical Programming » Hummus and Magnets

Analytical Programming
by Christian Plesner Hansen Posted on November 25, 2012	

This is my third post about Babbage's calculating engines. The first two were about the difference
engine: why it was important at the time and how it worked. This post is about the analytical engine.
The analytical engine is famously the first programmable computing machine, and there was much
programming involved both in designing and operating it. In this post I'll take a look at the various
ways you could program the engine and the way programs were used to control the engine internally.

この記事はバベジの計算機械に関する三つ目の記事です。先の二つは階差機関についてのもので、階差機関が
当時どれほど重要なものであったかということとその動作原理について説明しました。今回は解析機関につい
ての話です。解析機関は最初のプログラム可能な計算機械として有名で、設計と運用の両面でプログラミング
に大きな進歩がありました。今回の post では解析機関をプログラムできる様々な方式と、解析機関を内部的
に制御するのに使われていたプログラムの手法についてとりあげます。


Programming the analytical engine
解析機関でプログラミング

When the analytical engine is mentioned as the first programmable computer the example you almost
always see is one particular program, the one for calculating Bernoulli numbers that was given in
note G of Ada Lovelace's notes on the engine. But that's only the tip of the iceberg. This post is
about the rest of the iceberg. (Don't worry, I'll give the Bernoulli program a whole post of its
own). The engine could be programmed on roughly three different levels and we'll take a look at
each of them in some detail, but first I'll give an brief overview of each of them.

解析機関が史上初のコンピューターとして言及されたときにはほぼいつもあるプログラムが例に出されます。
それは Ada Lovelace が書いた解析機関についての notes の note G に記載されているもので、Bernoulli
numbers を計算するプログラムです。しかしそれは氷山の一角 (the tip of the iceberg) に過ぎません。
今回はこの氷山の残りの部分について話します (ご心配なく。Bernoulli の program については丸々別の記事
で取り上げます)。解析機関は大まかに言って異なる三つのレベルでプログラムが可能です。それぞれについて
詳しく取り上げますが、まずはそれぞれの概観について触れておきましょう。


At the highest level programs were written as tables like the one here on the right. That one is
taken from Menabrea's 1842 article about the engine. Each row in the table is an instruction, a
mathematical operation to be performed. In modern terms we would call this a register language since
all the operation's inputs and outputs are given explicitly. This is the format that was used in all
contemporary articles about the engine and the format of the Bernoulli program. However, a program
in table form could obviously not be run by the analytical engine directly, it was more like what we
would call pseudocode today. It describes the program you want to execute but it's not executable
itself.

最高位レベルにあるプログラムは右図にあるような table として書かれたものです。この図は1842年の Menbrea
による解析機関に関する文献から引用しました。table の各行は instruction であり、実行される mathematical
operation です。すべての operation の入力と出力が explicitly に与えられているので、これは modern terms
で言えば register language と呼べるものでしょう。この format は解析機関に関するすべての contenporary
articles で使われているものであり、また Bernoulli program で使われている format でもあります。しかし
ながら table form になっているプログラムは解析機関が直接実行するものでないのは明らかで、それは今日わ
たしたちが擬似コード (pseudo code)と呼んでいるものに近いものでした。つまり、何を行いたいプログラムな
のかを記述するものであって、それ自体を実行するためのものではありませんでした。


The way you made executable programs was using punched cards. To run a program written in the table
format you would have to translate it into a stack of cards that could be interpreted by the machine.
You might think of the cards as a type of bytecode. Babbage seems to have considered this mostly an
implementation detail so it's not super well described, but we still know enough to get a pretty good
sense for how card-based programming would have worked.

実行可能プログラムを作る手段はパンチカード (punced cards) を使うものでした。table format で書かれた
プログラムを実行するにはそれを、機械が解釈可能な card の stack へと変換する必要がありました。この
cards をバイトコードのようなものと考える人もいるかもしれませんが、バベジはこれを mostly an
implementaion detail とみなしていたようで、not super well described でした。しかしそれでも、わたした
ちは card-based プログラミングがどのように行われるかについては十分理解できました。


At the bottom layer there was an internal “microcode” format that controlled how the engine executed
each of the punched-card encoded instructions. The microcode programs were encoded as rows of pegs on
the side of rotating barrels, like the pins on a music box. The pins controlled operations and data
flow within the engine and the control flow of the microprograms themselves. Some of the more complex
instructions such as multiplication and division had very elaborate implementations of more than a
hundred verticals, Babbage's name for a single micro-instruction.

解析機関の bottom layer には、instruction が encode された punched-card のそれぞれを解析機関がどの
ように実行するのか制御する内部的な「マイクロコード」format が存在していました。この microcode
program は music box の pin のように、rotating barrels の side にある pegs の raw として encode さ
れていました。このpin は解析機関内部で operations と data flow を制御していましたが micro program
そのものの flow も制御していました。乗除算のようなもっと複雑な instruction の一部は vertical 100個
を超える非常に elaborate (精密、精巧)な implementaions です。この verticalとはバベジがひとつの
micro-instruction につけた名前です。


In the rest of this post I'll describe two of these formats, tables and microcode. The punched card
format has a separate post which is linked at the end. First though, a quick note on sources. My
source for most of this post is some excellent articles by Allan Bromley: The Evolution of Babbage's
Calculating Engines from 1987 and Babbage's Analytical Engine Plans 28 and 28a – The Programmer's
Interface from 2000. If you want more information these are the articles to read. (Obscenely they
are both behind IEEE's paywall which I suspect is one reason they're not as widely read as they 
deserve to be.)

この投稿の残りでは、これらの format の二つ tables と microcode の説明をします。punched card format
については分割した投稿にしてこの投稿の末尾にリンクをはっておきますが、情報源について簡単な覚書を書い
ておきましょう。この投稿でわたしが使った情報の大部分は Allan Bromley による excellent articles の幾
つかから得たものです。


With that let's get on to the first language level: tables.


Tables

The basic model of the analytical engine is similar to the difference engine but generalized along
several dimensions. The difference engine had 8 columns, what we would call registers, with 31
decimal digits of precision (roughly 103 bits). These could be added together in a fixed pattern,
right to left. The analytical engine had a much larger number of columns, Babbage considered 1000 to
be realistic, and it could add, subtract, multiply, and divide them in any pattern. The columns also
had more precision, 50 decimal digits (roughly 166 bits). Each column had an index, i; the i'th
column is written as Vi. The V stands for variable which I'll use interchangeably with the word column.

解析機関の基本的なmodelは階差機関と似ていますが、several dimensions において一般化されています。階
差機関は8つのカラムを持ち、カラムはそれぞれ十進31桁の精度があります (おおよそ103ビット分)。
これらのカラムは右から左に固定されたパターンで足し合わせることができました。解析機関はもっと大きな
数のカラムを持っていて、バベジは1000個を to be realistic な数と考えていました。また、階差機関のそれ
よりも大きな精度を持っていて十進50桁(おおよそ166ビット)ありました。各カラムにはそれぞれ i という
index があって、i番目のカラムは Vi のように記述します。この V は word column と交換して使う variable
を表しています。


The table format for programming the engine, the most high-level format, represents a sequence of
instructions as rows in a table. Each row specifies an operation along with the input and output
columns. For instance, to calculate (V1 + V2 + V3) and store the result in V4 you would do
something like:

解析機関のプログラミングをするための table format は最上位レベルの format であり、instrcutions の並
びを表現しています。table の各行は入出力のほかに operation を spefify します。たとえば (V1 + V2 + V3)
を計算してその結果を V4 へ格納するには次のようにします。


	# 	op 	in 		out
	1 	+ 	V1 + V2 	V4
	2 	+ 	V3 + V4 	V4


The first instruction adds V1 and V2, storing the result in V4, and the second adds V3 to V4. It's
pretty straightforward really – but in this simple example I've cheated and omitted a few details.
We'll be adding those back now.

最初の instruction は V1 と V2 を加算してその結果を V4 に格納します。二番目の instruction は V3 を
V4 に加えます。これは実際、とても straightforward です。しかしこの simple example では cheat して
a few detail を省略します。


In modern programming languages we're used to being able to read a variable as many times as we want
with no side-effects. With the analytical engine on the other hand when you read a column what
you're actually doing is transferring the value mechanically from the column to the processing unit,
the mill, which causes the column to be cleared. It's obviously inconvenient if you can't read a
column more than once. To solve this the engine supported two kinds of reads: the simple read where
the column is cleared in the process and a the restoring read where the column retains its value. A
restoring read works by simultaneously transferring the value to the mill and a temporary storage
column and then immediately transferring the value back from temporary storage to the column.

modern なプログラミング言語では、変数の読み出しは副作用なしに好きな回数だけを行えます。一方解析機関
で  column を読み出したときに実際に行われることは column から processing unit への値の transferring
であり読み出された column はクリアされてしまいます。これはその column を複数回読み出したい場合に明ら
かに不便です。これを解決するために解析機関は simple read と restoring read という二種類の読み出しを
サポートしています。restoring read は simultamepisly に値を mil と temporary stroage column に転送し
たあと即座にその temporary storage から column に値を書き戻すという動作をします。


To indicate which kind of read to do there's an extra field in the table indicating column value
changes. If we go back to the program from before, let's say that we don't mind that V2 and V3 are
cleared but we need to retain V1. We would express that as

table には読み出しの種類を indicate するための extra  field があります。先ほどのプログラムに話を戻
すと、V2 と V3 がクリアされることを気にする必要はないけれども、V1 についてはその値を retain する必
要があります。We would express that as


	# 	op 	in 		out 	vars
	1 	+ 	V1 + V2 	V4 	V1 = V1
	V2 = 0
	2 	+ 	V3 + V4 	V4 	V3 = 0

In the first operation we want to restore V1 after it's been read but let V2 get cleared. In the
second instruction we let V3 get cleared and we don't need to specify what happens when we read V4
because that's where the result is stored.

最初の operation では V1 を読みだした後に restore を行いたいのですが、V2 はクリアしても問題ありませ
ん。二番目の instruction では V3 はクリアしますが V4 は結果が格納されるところなので V4 を読み出した
ときに起こることを指定する必要はありません。


This program contains the full information you would need to be able to run it on the engine. The
original tables annotate programs some more but anything beyond this is more like comments, it
doesn't change the behavior of the program.

このプログラムにはあなたが解析機関で実行できるようにするのに必要になるであろう full information が
あります。original tables はプログラムを some more annotate しますが、anything beyond this はよりコ
メントに近いもので、プログラムの振る舞いを変えません。


One additional piece of information you'll see in most of the original programs, the one on the
right here is another of Menabrea's, is that all the column names have a second index in
superscript. So where I've written V1 one of the original tables would have something like 1V1. The
second index indicates how many times the variable has changed. So 1V1 means “the first value
stored in V1“, 2V1 means “the second value stored in V1, after it had been overwritten once”.
This doesn't mean that you can recover old values of a variable, it's just for the programmer to
keep track of what the current value is of each variable. You can also write 0V1 which means the
original 0 stored in V1 in the case where we haven't written to that column at all yet. If we add
in these indices the program will look like this:

original programs の大部分で見ることになるであろう information の one additional piece が、すべての
カラム名は superscript に二番目の index を持っているということです。
ここで、わたしは original tables にある V1 を 1V1 のように書くことにします。
この second index はその変数が何回変更されたのかを indicate します。
ですから、1V1 の意味は V1 に格納された最初の値であり、2V1 の意味は V1 に格納された二番目の値です。
これはある変数の古い値を recover できるという意味ではありません。単に、プログラマーのために各変数の
current value を track させるためだけのものです。0V1という記述もできて、これはカラムにまだ書き込み
を行っていない状態のV1にあるオリジナルの0という意味です。これらの添え字群を使って加算を行うとプログ
ラムは以下のようになります。


	# 	op 	in 	out 	vars
	1 	+ 	1V1 + 1V2 	1V4 	1V1 = 1V1
	1V2 = 0V2
	2 	+ 	1V3 + 1V4 	2V4 	1V3 = 0V3

(The 0V2 assignment is just a convention, it means the same as resetting V2 to its initial state
where it contained 0).

(0V2 の代入は単なる convention であり、意味としては V2 をリセットして 0 を保持している初期状態に
するのと同じです).


This is the language used to write the first computer programs. Even though it's unusual it will
look familiar to any modern programmer familiar with assembly programming. There is no way to
specify control flow even though there is some indication in the Bernoulli program that it had been
considered. These are basically straight-line sequences of mathematical operations on a set of
variables. And being pseudocode the conventions weren't fixed, they were changed and adapted by
the authors to fit the programs they were writing.

これが最初のコンピュータープログラムを書くのに使われた言語です。それは unusual ではありましたがアセ
ンブリ言語でのプログラミングに慣れた modern プログラマーにとってはなじみのあるものです。Bernoulli
program にはいくつか indication するものはあるのですが、フローを制御する方法はありません。プログラム
は基本的に変数の集まりに対して行われる mathematical operation の stratight-line sequence です。また、
being pseudocode the convention は固定されていなかったので、彼らが書いたプログラムに fit させるため
に authors によって変更されたり adapt されたりしています。


The microprogram format is at the other end of the spectrum; where the tables were high-level and
meant for communicating programs clearly the microprograms where low-level and written and
understood only by Babbage, at least until recently.

このマイクロプログラムの format は spectrum の other end にあります。talbes が high-level に位置して
commuicating program を明確に意図していたものであったのに対して、マイクロプログラムは low-level にし
ており少なくとも最近まではバベジのみが理解し、書かれていたものでした。


Microprograms


The analytical engine could perform a number of complex operations including multiplication and
division. To give a sense for how complex I'll give an example of how the engine would multiply two
numbers.

解析機関は乗除算を含むたくさんの複雑な operations を行うことが可能でした。
sense for how complex を示すために、解析機関がどのように二つの数値の乗算を行うかの例を出します。


Say we instruct the engine to multiply 17932 with 2379. The multiplication logic would first
determine which of the operands had the fewest digits and put that in one register. (The computing
mill had a number of internal storage columns that were used to hold partial results during
individual operations. I'll call those registers to distinguish them from the user-accessible
columns). The other number, the one with most digits would be used to generate a table of all the
multiples of that number from 2 to 9, using addition. In this case that's 17932:

では解析機関に17932×2379を計算させてみましょう。解析機関が行う乗算のロジックでは最初にオペランドのい
ずれが fewest digits であるかを決定し、その短いほうをレジスターに格納します (computing mill は独立し
た演算の中間結果を保持するのに使われた internal storage colmuns をたくさん持っています)。もう一方の
桁の長いオペランドは2から9までを乗じた積の table を加算によって生成するのに使われます。今回の例で使
われるのは17932 です:


  factor 	value
     1 		 17932
     2 		 35864
     3 		 53796
     4 		 71728
     5 		 89660
     6 		107592
     7 		125524
     8 		143456
     9 		161388


Once this table had been built the engine would scan through the other number, in this case 2379.
For each digit it would look up the corresponding multiple in the table, shift it left by an amount
corresponding to the significance of the digit (that's base 10 shift), and add the resulting values
as it went:

この table を構築すると解析機関は別の数値、この例では 2379 を scan します。この数値の各桁の数字につ
いて table で対応する multiple を検索し、それを該当する(十進数における) significance of the digit の
量だけ左へシフトします。そして、as it went として resulting values を加算します。


  digit 	 product
      9		  161388
     70		 1255240
    300		 5379600
   2000		35864000


Adding those four values together you get 42660228, the product of 17932 and 2379, calculated using
the primitive operations of addition and multiplication by 10. The whole operation took time
proportional to the number of digits of the shortest of the input numbers. Unlike the difference
engine which stored numbers as tens complement the analytical engine stored the sign of the number
as a separate bit. That way the multiplication could be unsigned and the sign could be computed
separately. This meant that the engine had two zeroes, plus and minus.

これら四つの値を加算すると 17932×2379の結果である 42660228 となります。加算と×10という primitive
operations を使って計算した operation 全体では、入力された数値のうち短いほうの桁数に比例した時間を要
します。数値が十の補数として格納される階差機関とは異なり、解析機関では数値の符号は独立したビットとし
て格納されます。この方式では乗算を無符号にでき、符号は別途計算できるようになります。これは解析機関が
プラスのゼロとマイナスのゼロという二種類のゼロを持っていたということを意味しています。


Back to multiplication. The engine needed an internal control mechanism to take it through this
complex process and what it used was a microprogram encoded by pegs on a rotating barrel. You can
see a simplified diagram of the barrel here on the right. Each “cycle” of the microprogram
proceeds in the same way.

乗算に戻りましょう。解析機関は take it through this complex process のために内部制御機構と
routating barrel 上の pegs によって encode された microprogramを必要とします。単純化された barrel
の diagram を右にある図で確認できます。microprogram の各“サイクル”は同じ方法で proceeds されます。


First the barrel is pushed left and the pegs along the vertical edge press against a row of levers
which causes them to engage or disengage other parts of the engine. Because of the way the pegs
are aligned with the vertical edge of the barrel Babbage called a single such instruction a vertical.

まず barrel が pushed left され、engine のほかの parts の engage か disengage を引き起こす levers
の row に対して pegs along the vertical edge が press します。その pegs が vertical edge of the
barrel と align されているやり方から、バベジはそのような single を instructcion a vertical と呼び
ました。


Second, the barrel is pushed to the right and connects to the big gear you see to the right of it in
the diagram. That gear, and the gears connected with it, Babbage called the reducing apparatus.
That's what controls the flow of the program. The reducing apparatus rotates the barrel some amount
in either direction to select the next vertical to apply. At the same time any other components that
were engaged by the current vertical perform their operation, for instance a single step of building
the multiplication table. The reducing apparatus takes input from those other components so for
instance it may move the barrel different amounts depending on whether the last addition overflowed.
That's the arm on the far right (Babbage called overflow “running up”). The reducing apparatus is
controlled by the barrel itself so each vertical explicitly specifies how the reducing apparatus
should rotate it to the next vertical. You'll notice that the three gears you see near the reducing
apparatus' main gear have 1, 2, and 4 teeth respectively. By engaging a combination of them one 
vertical could have the reducing apparatus rotate the barrel any number of steps between 1 to 7. In
modern terms, each micro-instruction contains an explicit relative branch, conditional or
unconditional, to the next microinstruction. As you can see this is a highly sophisticated and
general mechanism. The only disadvantage is that it's slow – a single cycle takes a few seconds so
a multiplication can take several 
minutes.

次に、barrel が diagram 中の右側に見られるように right に push され、そして big gear に connetct さ
れます。この gear とそれに connect している gears をバベジは reducing apparatus と呼びました。これは
プログラムの flow を制御するものです。この reducing apparatus は barrel を apply すべき next vertical
を選択するためにいずれかの方向に some amount だけ rotate します。同時に、current vertical によって
engage されている any other compnents はたとえば multiplication table の building の single step の
ような their operation を実行します。reducing appartus は最後の加算がオーバーフローしたかどうかによっ
て barrel を diffrent amount で move する可能性のある instance のために those other components から
input を take します。それが arm on the far right です (バベジはこれを overflow running upo と呼びま
した)。reducing appartus は barrel 自身によって control されるので、各 vertical は reducing apparatus
が next vertical へどのくらい rotate すべきなのかを explicitly に specify します。あなたは reducing
apparatus の main gear のそばにあってそれぞれ1、2、4個の teeth を持った三つのgear を notice できるで
しょう。これら三つの gear の combination を engaging することにより one vertical は1から7までの任意の
ステップ数だけ barrel を roate する reducing apparatus を持てるようになります。modern terms で言えば、
各 micro-instruction は next microinstruction への conditioal よび unconditioal な explicit relative
branch を保持します。見てわかる通りこれは高度に sophiscated され、かつ general な mechanism です。その
disadvantage は、一サイクルに数秒かかるので乗算一回に数分を要するほど遅いということだけです。


As you would expect the diagram above is simplified, in practice there were multiple barrels and
they were much larger both in the number of pegs for each vertical and number of verticals per drum.
I haven't been able to find any of Babbage's actual microprograms unfortunately so for now all I
know are the basic principles, and we know that designing them was one of Babbage's main interests
in designing the engine.

想像がつくでしょうが、上記の diagram は単純化したものであり、実際には複数の barrel があって、number
of pegs for each vertical と number of vertical of drum のどちらももっと大きなものです。残念ながらバ
ベジによる実際の microprogram は今もって発見されていません。したがって現状わたしが知っているのは
basic principles がすべてであり、またわたしたちはそれらの設計がバベジの階差機関の設計における main
interests のひとつであることを理解しています。


The third program format is the punched cards which is what would have been used by an operator of
the engine. I'll look at those in some detail because they give a good sense of what it would have
been like to work with the engine in practice. To keep this post to a reasonable length I've broken
that out into its own post called punched cards.

三番目の program formt は解析機関の operator によって使われていた punched cards (パンチカード)です。
engine がどのように動作しているのかを知るのに具合がよいので、この先は punched card という別の投稿に
分けることにします。

いやー、英語のままになってる言い回し多いなあ ○| ̄|_

■_ もしも

Larry に質問できたなら

What question would you ask Larry Wall, if he was talking to your Perl class? : perl

What question would you ask Larry Wall, if he was talking to your Perl class? (self.perl)

Ah he's here.

Asked a question basically about how perl can capture mind share from (or back from) python and other
languages, especially given people start with a language and tend to base their work on that. He said
that that was largely why Google is a python culture. He talked about making the perl language easy
to get started with without knowing all of it, (note: he said 5 was easy, perl 6 will be easier) like
a 5 year old can speak english, but not as well as an adult. That's the technical part, making a
language where you can figure it out from use.

The social part: He talks about how the perl 6 community is consciously acknowledging an existing
misogyny in coder culture and trying to change that, and trying to change the community, so that they
aren't missing out on half of potential programmers. He mentioned specifically the butterfly logo. He
talks about making code easier to read even when it's short, short not terse.

"Need to redesign the community, as well as the technology." Avoiding flame wars.

edit 2: he was very humble, a good speaker.

What changes (if any) happened to the Benevolent Dictator for Life model between the early days of
Perl 5 and Perl 6 that lead to the differences in the lifecycles of the software? (Perl 5 being fairly
widely used in its heyday, while Perl 6 has been unable to get off the ground as far as widespread
use is concerned)


"Can you take Guido in a fist fight? Why haven't you?"


Ask him what mistakes were made w regards to Perl 6

If he had it to do all over again, what would he change.


Asked my question already :/. He's spoken to this to some extent though. He said he sees Perl6 as
an experiment... perl 5 was stable enough, and there was no company selling it, that the perl 6
community was free to try to fix the whole system instead of trying to interate.

experiments could fail, but they'd still have learned a lot.


Perl 6 is the answer he gave for this question Regarding perl 5, btw.


Asked him about one thing he learned from doing perl 6, and he said that maybe he should have payed
more attention to computer science literature, but in a sense perl 6 is his attempt to do that. You
can't change the past, only the future.

■_

■_

この本、発売前にはチェックしてて店頭で見かけたときにはざっと見てみたんですが 急いで買うこともないかなあとスルーしたんですが なんか色々と IVS本に容赦なく突っ込みまくるNAOIさん - Togetter

■_

2013年03月23日

■_

おー、伸びてるなー NASA Java Coding Standard : programming

下北沢駅通過した。 しかし、今回地下化された三つの駅の両側は高架になってるわけで 上がったり下がったり忙しないというか(ry

■_

コーディネーターとは… Amazon.co.jp: ITコーディネータ実践力ガイドラインVer.2.1: 特定非営利活動法人 ITコーディネータ協会: 本

■_

■_

お、これはなかなか面白そう 泳ぐやる夫シアター やる夫と学ぶホビーパソコンの歴史 第一話 すべてははじめのbitから

■_

なんとgdgdな本日分。

2013年03月22日

■_

なんかもう色々ダメ。

■_ coding standard

今度は NASA のとか NASA Java Coding Standard : programming http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_Java.pdf

NASA Java Coding Standard : programming

    Field and class names should not be redefined.

    Packages and classes should not be dependent on each other in a cyclic manner.

    The clone() method should never be overridden or even called.

    One should not reassign values to parameters. Use local variables instead.

    All if-else constructs should be terminated with an else clause.

    In compound expressions with multiple sub-expressions the intended grouping of expressions should
    be made explicit with parentheses. Operator precedence should not be relied upon as commonly
    mastered by all programmers.

    Do not use octal values

    a class should contain no more than 10 fields

    a class should contain no more than 20 methods

    a method should contain no more than 75 lines of code

    a method should have no more than 7 parameters

    a method body should a cyclomatic complexity of no more than 10. More precisely, the cyclomatic
    complexity is the number of branching statements (if, while, do, for, switch, case, catch) plus
    the number of branching expressions (?:, && and ||) plus one. Methods with a high
    cyclomatic complexity (> 10) are hard to test and maintain, given their large number of
    possible execution paths. One may, however, have comprehensible control flow despite high numbers.
    For example, one large switch statement can be clear to understand, but can dramatically increase
    the count.

    an expression should contain no more than 5 operators

This is a collection of the ones I thought were more open for discussion or dispute. There is a lot
of untested ideology and magical thinking in this area.

tl;dr: Read Effective Java

EDIT: To the downvoters; take a look at the guide. Almost every point references some item in book Effective Java.

C のもあるのね http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf

■_ 今日の新言語

The Copper Programming Language : programming Copper - Home Copper - Overview Windows用バイナリも用意してるのね。

Copper - Home

Copper is another experimental programming language. I'm releasing it because Code Browser 4 is
developed with it and some people might want to hack it.

It is based on Zinc with some improvements such as genericity, multiple return values or variadic
arguments. It does not generate intermediary C code anymore, it has two backends: a x86 COFF
generator and LLVM (version 2.9).

If you want to see what it looks like, go to the overview page. For more complete information, you
can have a look at the documentation.

License

All the source code of the compiler is released in the public domain. Anyone is free to copy, modify
or redistribute it without restrictions.

© 2012 Marc Kerbiquet - Last updated: 2012-11-01

Copper - Overview

Overview

Copper is a simple imperative language statically typed with type inference and genericity.

What it looks like:

  struct Point
      attr x : Int32
      attr y : Int32

      method initialize (x, y)
          self x = x
          self y = y
          return self
        
      method translate (dx, dy)
          self x += dx
          self y += dy

  function main
      var pt = {Point} initialize (3, 5)
      pt translate (1, 0)

Structures, methods and functions have no end delimiters. It works without significant indentation,
it is not required as elements can not be nested:

    Starting a new method terminates automatically the previous one.
    The function terminates the previous structure definition. 

Multiple Return Values

  function sort (x, y)
      if x > y
          return y, x
      else
          return x, y
      end

  function main
      var min, max = sort (51, 15)

Returning multiple values is often useful to return an error code and a value:

  var error, file = open (...)

This way you don't need to use a special value to say that there is an error and retrieving the error
in a second call forcing the callee to store a state.

Another advantage is to swap values, no need to use temporary variable:

  x, y = y, x

以下略

Copper - Documentation

■_

2013年03月21日

■_

こいつが翻訳されるとはねえ O'Reilly Japan - Head First C これもでると。 テスト駆動開発による組み込みプログラミング C言語とオブジェクト指向によるアジャイルな設計|Ohmsha

■_

Rails Hub情報局: 「20年後も現役プログラマでいたい」、まつもと氏がRuby20周年で語る 20年後のまつもとさんは大体今のこの方と同じ年齢ですね。

Box's 65-Year-Old Android Engineer Gives Your Startup Some Unsentimental Advice ⚙ Co.Labs ⚙ code + community

Box's 65-Year-Old Android Engineer Gives Your Startup Some Unsentimental Advice

There are precious few people who have seen and comprehended enough of the rise of computing, and
then mobile computing, to have some perspective. "I have seen this curve over and over, and lots
of startups fail in that gap because they don't keep at it long enough," says Maynard. "I
think we have lost the idea of the software artist."

By: Ciara Byrne

David Maynard is a 65-year-old Android engineering manager at Box who still codes every day. ”It's
not always easy," he says. "Sometimes I have to leave a company when I get promoted to the
stage when I can't code anymore.”

(略)

As enthusiastic about software as he ever was, Maynard is currently learning HTML5 at home, since he
doesn't use it at work. But he's not sentimental about software. "I've been very lucky in timing,
surfing the wave since 1969," he says. "I got a degree in computer science the first year
that Berkeley gave a degree in it. But if I had to do it over again today, I might choose
bio-informatics or nanotechnology.”

もし現在から始めるとしたら、bio-informatics か nanotechnology を選ぶかも。と。

■_

【お蔵出し】コンピュータ書紹介:高い本編 - 思っているよりもずっとずっと人生は短い。 に対する補足的な

D. Knuth『The Art of Computer Programming』(第1巻、第2巻、第3巻) いかにも古典らしい古典であり、プログラミング方面ではこういう風に読める本はなかなかないので、プログラミングでご飯を食べようという人なら一度は本気で取り組みたい。というか正直いつまで手に入るか分からないので今のうちに買っておきたい。 そういやあ1巻を店頭で見なくなりましたねえ。 ところで4巻をあげていないのは時期的な問題でしょうか? The Art of Computer Programming,Volume 4, Fascicle 0 Introduction to Combinatorial Algorithms and Boolean Functions 日本語版 (ASCII Addison Wesley Programming Se) The Art of Computer Programming Volume 4, Fascicle 1 Bitwise Tricks & Techniques; Binary Decision Diagarms 日本語版 (ASCII Addison Wesley Programming Se) The Art of Computer Programming,Volume 4, Fascicle 2: Generating All Tuples and Permutations[日本語版] (アスキー・アジソンウェスレイシリーズ) The Art of Computer Programming,Volume 4, Fascicle 3: Generating All Combinations and Partitions【日本語版】 (ASCII Addison Wesley Programming Se) The Art of Computer Programming Volume 4, Fascicle 4 Generating All Trees -- History of Combinatorial Generation 日本語版 (ASCII Addison Wesley Programming Series)

「ケン・ランディ『CJKV日中韓越情報処理』」ですが、 この日本語版の後に原著は第二版がでています。 内容がどの程度変わったのか覚えていませんが、 初版の日本語版を買うよりは原著の二版の方を買った方が良いと思います CJKV Information Processing

■_


一つ前へ 2013年3月(中旬)
一つ後へ 2013年4月(上旬)

ホームへ


リンクはご自由にどうぞ

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