はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

メモ 2020-06

2020-06-04

コルーチンの多様性

Erlangの「メッセージを受け取って引数を変更しながら再帰呼び出しする関数」は他の言語ではコルーチンを使って実現できるのではないかと考えてコルーチンについて調べたところ次のような記述を発見しました。

処理の中断は『yield return <処理を待つ時間>』のように記述します。<処理を待つ時間>はフレーム単位であったり、秒だったりと、割と柔軟に指定できるので便利です。

【Unity】コルーチンってなんなのなの? って時に読む記事【解説】 │ エクスプラボ

えっ、自分の知っているコルーチンとは違う…と思って調べたら次のページを発見しました。

自分の知っているのは非対称コルーチンで、その他にもたくさんの種類がありました。 コルーチンは奥が深いんですね。

ところで英語版WikipediaのCoroutineのページの参考文献1のKnuth, Donald Ervin (1997). Fundamental Algorithms(PDF)を見たら、ドナルド・クヌース氏がMIXという自作のアセンブリ原語でサンプルコードを記述していてびっくり。

2020-06-21

Wordの差し込み印刷についてのメモ

Microsoft Word(ワード)の使い方 完全マスター  - 教えて!HELPDESK

  • カーソル下のフィールドのコードを表示・非表示するには Shift+F9
  • すべてのフィールドのコードを表示・非表示するには Alt+F9
  • フィールドコードを挿入するには Ctrl+F9
  • 計算式は { = 10 + 20 } のように入力
  • フィールドコードの入力後に更新するには F9
  • 複数明細行を表示するには明細の2行目以降の左端に {NEXTIF ~} を入れる
    • 実例: {NEXTIF { MERGEFIELD 取引先名 <> "" }} { MERGEFIELD 件名 }
    • 取引先名が空白でない間、続くレコードの件名を表示する
    • 実際の動作としては、取引先名が空白の間、そのレコードを表示し続ける
  • 表の合計を表示するには { = sum(A1:A3) }
    • セルの行列はExcelと同様
    • sumの中身は ABOVE(上)、LEFT(左) などが指定できる
  • 3桁区切りで表示するには { MERGEFIELD 金額 \# "#,##0" }
  • 日付をフォーマット表示するには { MERGEFIELD 日付 \@ yyyy年M月d日 }

2020-06-23

IntelMotorolaが採用しなかったXerox Altoのアーキテクチャ

未来を発明する方法 2 - FoundX Review - 起業家とスタートアップのためのノウハウ情報

review.foundx.jp

上記のページに次のような文があります。

Altoのアーキテクチャ、それは革命的なものでとても高度な言語を非常に効率よく実行しいつでもとっさに変更をもたらすことができました。IntelMotorolaにチップのためにこれらのアーキテクチャーを採用してもらおうとしましたが、結果はゼロでした。

IntelMotorolaが採用しなかったAltoのアーキテクチャとは何でしょう?

次のページで答えと思われる情報を見つけました。

Fuji Xerox 1121、Smalltalk-80、Interlisp-Dの話 - スティルハウスの書庫の書庫

kazunori279.hatenablog.com

Dマシン最大の特徴は、マイクロコードプログラミング可能なビットスライスプロセッサを採用していたことでしょう。

私たちが普段使っているPowerPCPentiumなどのCPUはチップ自体に命令セットが組み込まれており、これを変更することはできません。これに対して、Dマシンは起動時に命令セット自体をロードすることが可能でした。

ALTO: A Personal Computer System Hardware Manual (pdf) を見てみたところ、次の部分が該当するようです。

f:id:paz3:20200623092836p:plain

Control ROMがマイクロコードが入っている部分です。

f:id:paz3:20200623092907p:plain

ここでのポイントはNEXTフィールドに次に実行するマイクロコードのアドレスが入っていることだと思います。 これによりCPUの1命令で複数ステップのマイクロコードが実行できるようになります。

2020-06-30

Xerox DandelionのALUとマイクロコード

Am2901のWikipediaを見ていたらXeroxのDandelionで使われたと書かれていました。 というわけで Dandelion Hardware Manual を見たところ確かに2901と書いてありました。

f:id:paz3:20200701233136p:plain

AltoはALUが 74181 でマイクロコードが32ビットでしたが、DandelionはAm2901で48ビットです。 Altoの開発は1970年代初頭、Dandelionは1981年にXerox Start 8010として発売されています。

History of ALU 74181 in commercial minicomputers に次のように書かれています。

The AM2901 and AM2903 were probably the main competitors of the more economic but significantly less powerful SN74181 chip.

74181よりもAm2901の方がパワフルとのことです。