This document contains code snippets in Python, Perl, and C++. It also contains text about Marcus Tullius Cicero and Otto von Bismarck.

id:NyaRuRu:20080127:p1 続き. 私自身,系統だってこの筋の学問を学んだわけではないので,自分の考え方を整理しながら考えてみます. プログラミングの世界では,決まった動作をする小さなモジュールをパイプライン状につなげていって,何か役に立つ大きなものを作ることがしばしばあります.しかし,一口にパイプラインと言っても色々な実装があることに気付きます.代表的なパイプラインとして,まずは UNIX Pipe について見てみましょう. UNIX-pile-like-pipeline UNIX Pipe 流のパイプラインは,BlockingQueue や BlockingStream で連結されたマルチスレッドプログラムとみなすことができます. Java BlockingQueueで遊ぶ: パイプラインごっこ - 檜山正幸のキマイラ飼育記 Java BlockingQueueでもっ
GCアルゴリズム詳細解説 日本語の資料がすくないGCアルゴリズムについて詳細に解説します トップページページ一覧メンバー編集 × GC 最終更新: author_nari 2010年03月14日(日) 20:47:11履歴 Tweet このWikiが目指す所 GCとは? GCを学ぶ前に知っておく事 実行時メモリ構造 基本アルゴリズム編 Reference Counter Mark&Sweep Copying 応用アルゴリズム編 IncrementalGC 世代別GC スナップショット型GC LazySweep TwoFinger Lisp2 Partial Mark and Sweep -Cycle Collection- Mostly Parallel GC train gc MostlyCopyingGC(Bartlett 1989) TreadmillGC(Barker 1992)
鳥人間 郷田まり子 2009/9/10 非プログラマのためのプログラミング講座。MITが作った「Scratch」を使って、ねとらぼのITちゃんに枕投げをさせるまでを解説する ITちゃんに枕投げの相手をしてもらうまで 「プログラミング」というと、皆さんはどのようなイメージをお持ちでしょうか。 便利そうだけど専門知識が必要なうえに英語だらけで、自分には無理。そう思われている方は下の図を見てください。 これはイギリスの小学生が、今回解説する「Scratch」というソフトで作った、立派な「目覚ましプログラム」です。 この短いプログラムには、どのプログラムにも共通する基礎が詰まっているのですが、全く予備知識のない方でも、これがどのような機能を持つか大体見当がつくと思います。 プログラムの基礎を理解し、コンピュータをより自由に操れるようになるということは、すべての人にとってとても大きな力となります。絵
調査/作業の依頼とその報告が、恐ろしくガラス張りなことになっているんだけど: 調査報告と問題点 対処のヒントと懸念 さらなる調査と実験 NNDAスタイルってのはこういう事だから、まーいいや。背景として、僕がKuwataさんに「考えて欲しい」と言っていることを記しましょう。 テンプレートエンジンの構造 基本的な要求は、Webサイト/Webアプリケーション/Webサービスを作成する作業を比較的細かいタスクに分割して、それらを最適に(できるだけ最適に近く)配分・配置したい、ということ。配分・配置とは、人と時間のリソース空間における計画のことです。配分・配置の自由度を高めるには、タスクどおしの依存性が少なくて、並行的に作業できるのが望ましいですよね。打ち合わせや報告の負担も少なくしたい(どうせゼロにはできませんけど)。 こんな要求に対する基本原理となるのが、テレンス・パーの厳密分離(Strict
http://return0.dyndns.org/log/2009/09/06#s_1 : 最近ちょっと仕事し過ぎで ... 困ったもんだ。でもまー、Kuwataさんの最近のハードワークのおかげで、CatyもWebフレームワークらしくなってきて、簡単なサンプルサイトが動き出しました。とはいえ、まだまだ仕様が固まってなかったり、暫定仕様/実装でお茶を濁していたり、問題があるのにホッカブリしているところがたくさんあります。 サンプルサイトは、当然にCatyスクリプトで実装しています。 http://d.hatena.ne.jp/m-hiyama/20090810/1249861926 より: 「数十文字のスクリプトファイルが数個」で実現できる動的Webサイトでも、相当に広範囲の要求に応えられるだろうと踏んでいます。 と書いたので、短いスクリプトで動的サイトが出来ないと公約が守れないのですが、
だいぶ前に、クロージャ(閉包)って言葉の意味がわからないと書いたことがあります(「クロージャ、それなに?」)。最近また「クロージャ」って言葉を聞いたのですが、やっぱり何を意味しているのかわかんなくて(詮索する余裕もなくて)落ち着かない気分になりました。これはどうも精神衛生上よくない。 「クロージャ」と「ラムダ式」はまったく同義に扱ってもいいんじゃないのかな。例えばラムダ式 λx.(a*x + b) があるとき、自由変数a, bを具体化するための環境(変数束縛)をラムダ式と一緒にした (λx.(a*x + b), {a : 2, b : 1}) が古典的な意味のクロージャでしょ、たぶん。letを使えば、(let a = 2 b = 1; λx.(a*x + b)) みたく書けるけど、これも結局 (λa.λb.(λx.(a*x + b)))(2)(1) だから1個のラムダ式ですよね。 「クロー
今日までに理解した Haskell とモナドについて、まとめてみます。間違っているところもあると思いますので、コメントを期待しています。(_ _) Haskell の特徴 純粋関数型言語です。 参照透過性 変数は初期化できますが、一旦決まった値は変更できません。関数の返す結果は、引数の値だけで決まります。 遅延評価 データの処理は、本当にデータが必要になったときに実行されます。UNIX のパイプみたいなものだと考えるといいでしょう。 Haskell にも副作用はあります。 よい Lisper は、副作用のある関数とない関数を分けて実装します。しかし、そうでない Lisper が分けてくれるとは限りません。 Haskell を使うと、副作用のある部分とない部分を必然的に分けて書くことになります。 変数の値は変更できない たとえば、有名な quicksort を例にとりましょう。 quicks
…という類<たぐい>の質問に答えるのはちょっと面倒なんですけど、とりあえず1つだけ具体例を挙げておきましょう。テンプレート処理が、もろにモナドになっている、ってハナシ。今回はテキスト処理について説明。次回(いつになるかまったく不明)はXML処理の予定。 テキスト処理だけでも長ーい説明(最長記録かも)なのだけど、分割すると“勢い”がなくなるから一挙掲載。読むときはユックリ・ジックリ読んでくださいね。プログラミング課題も、実際にコーディングしないまでも、「こうやればいいな」という方針くらいは考えてください。 ※印刷のときはサイドバーが消えます。 内容: ネストしたテキスト テンプレート処理 ブロック、文字列、名前 フラット・テキストとテンプレート・テキスト 多段階のテンプレート処理 蛇足 素材を整理しよう モナドに向かって突っ走れ!! バッチリ、モナドだぜぇ 残りは脱兎のごとく 最後に言ってお
Coq † http://coq.inria.fr/ Coq は、INRIA にて開発されている対話的定理証明支援系です。 Calculus of Inductive Construction (CIC) を基礎とし、Tactics と呼ばれるコマンドを駆使することにより証明を行います。 ↑ メモ † インストールする Coq 本体 Proofgeneral 証明をやってみる 簡単なものから Tactics リスト 証明の裏で何が起こっているのか 証明の実例 理論的 background Dependently Typed Lambda Calculus Curry-Howard Isomorphism ぼちぼち書いていきます。 ↑
COINS はいろいろと微妙な気がするので,別のコンパイラインフラストラクチャ LLVM (Low-Level Virtual Machine) を見てみた. The LLVM Compiler Infrastructure Project LLVM ってのは,仮想マシンなんだけど,例えば Java の JVM,Perl の parrot,Ruby の TVM (旧旧 Rite,旧 YARV) みたいに,特定のプログラミング言語に向けたものではない (ってまぁ,みんな言うんだけど) なので,C-- のように,GC みたいな高級で,なおかつ言語に強く依存するような機能は提供しない (オプションとしては提供されているらしい) 単純な RISC-like な命令セットを持つ VM で,STL を駆使した C++ で書かれているらしい. GCC のバックエンドを持っているので,C/C++ からバイ
ここ数日、LLVMについて少し勉強している。そもそもなんでLLVMを触り始めたかというと、Twitter上で「今コンパイル欲求に駆られている」と(割と何も考えずに)つぶやいたところ、 「じゃあDTコンパイルしようぜ」 srd! でもあれコンパイラとは名ばかりでぶっちゃけ文字列をRubyコードにtranslateしてるだけだったりするね 「DTパーサを改良してLLVMにブリッジして、クロスプラットフォーム環境で高速に動作するDT処理系にするといいよ」 何その無駄に敷居高いお仕事!誰得!でもなんか面白そう! というやりとりがあって、じゃあ本当に誰が得するのかわからないけど面白そうだからLLVMをバックエンドで使ってesotericがサポートしてるコードからバイナリを生成するコンパイラ作ろうぜ、という流れになったから。実にLLVMの無駄遣いですね。この記事ブクマするときは「LLVMの無駄遣い」っ
Last released Mozart is 1.4.0 The Mozart Programming System is an advanced development platform for intelligent, distributed applications. The system is the result of a decade of research in programming language design and implementation, constraint-based inference, distributed computing, and human-computer interfaces. As a result, Mozart is unequalled in expressive power and functionality. Mozart
D では、 他の言語(例えばC++)ではライブラリとして実装されているような機能も、 言語そのものの機能として組み込んでいるものがいくつかあります: 動的配列 文字列 連想配列 これを有用な特徴ではなく、 言語の肥大化の証拠と考える方もいらっしゃるようです。 何故、これらそれぞれを標準ライブラリの型として実装しなかったのでしょうか? まず一般的な観点から幾つか理由をあげます: どれも非常によく使われています。従って、例え小さくても、 使い勝手の改善は実現するだけの価値があります。 言語のコア機能とするということは、その型が不正に使用されていたときに、 コンパイラによって より適切なエラーメッセージを出すことが可能になります。 ライブラリによる実装では、 実装の内部詳細にもとづいたなんだかよくわからないメッセージになる傾向があります。 ライブラリによる実装では、新しい構文や新しい演算子、 新
ブログ(iiyu.asablo.jpの検索) ホットコーナー内の検索 でもASAHIネット(asahi-net.or.jp)全体の検索です。 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。 例 中村(show) ki4s-nkmr ウェブ全体の検索 ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。 --- http://iiyu.asablo.jp/blog/2008/01/02/2541270 Erlang, Oz/Mozart, Prolog, 単一化 で書くといった補足。 プログラミング言語Ozについては、 http://ja.wikipedia.org/wiki/Oz_(プログラミング言
ブログ(iiyu.asablo.jpの検索) ホットコーナー内の検索 でもASAHIネット(asahi-net.or.jp)全体の検索です。 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。 例 中村(show) ki4s-nkmr ウェブ全体の検索 ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。 --- 書き忘れたものを、年末なのであわてて、 Daniel P. Friedman, William E. Byrd, Oleg Kiselyov著「The Reasoned Schemer」を、アフィリエイトで買ってくださった人がいて、この本の存在を 知りました。 以下は、某氏に送ったメールの一部
論文CiNii - Lazy Stack Copying fDr First-class Continuationsのメモ。 動作原理 (call/cc ) の 呼び出し中には呼び出し側の関数フレームは破壊されない事を利用する この段階ではスタックポインタを記憶するだけでコピーする必要がない(不完全継続オブジェクト) からリターンすると壊れてしまう可能性があるので、そのタイミングで継続を「昇格」させる 特定のリターン時に特別処理を行う事を「リターンバリア」と呼ぶ 昇格が必要な場合 以前にキャプチャされた継続が呼び出された場合 実行中に継続が「将来決して呼び出されない」と分かる事がある。参照がないなど。 この場合、リターンバリアで昇格する必要がない スタックコピーの遅延で効率が良くなる 昇格が不要なケース に渡された継続が使われない場合 の大域脱出で使われる場合 不完全継続を呼び出す場合は
現在大学1年生の人で3年後には NAIST に (というか松本研に) 来たいという人から「どんなプログラミング言語やっておくといいですか」と質問されたりするのだが、なかなか答えるのは難しい。自分は Perl → Python がメインでときどき C++/C# を使ったりするのだが、どれが一番いいかはなんとも言えないので、自然言語処理以外に転向する可能性も考えると、C とか C++ とか Java とか(授業でそちらをやるのであれば)を最初の武器に選んだ方がいいのでは、と思ってはいる。 そんなこんなで最近 Hal Daume III (機械学習を用いた自然言語処理では非常に有名な人) のブログで Language of Choice というタイムリーなエントリーが出ていたので、紹介すると、「それなりに大きな自然言語処理のプロジェクトでどのプログラミング言語を使うのか」というアンケート結果が出
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く