作成日:2004.04.12 更新日:2006.02.19 更新記録 (2004.04.12) 3/6、 3/11、 3/13 の日記をまとめて作成。 (2004.05.07) 文章を修正。サンプルコードを追加。 (2005.01.20) alternative → alterante に修正。 (2005.02.13) 追記を記述。 (2006.02.17) linux_stack_info.cpp の実装に誤りがあったので修正。 (2006.02.19) BSD 系OS でのスタック領域情報の取得の仕方を追加 初めに C/C++ でプログラムをしているとつい忘れてしまうのがスレッドのスタックオーバーフローの問題。 最近の OS はスレッド当たり 2〜8MB のスタック領域を持っているため、よほどのことがない限りスタックが溢れてしまうことはない。 だが、再帰や alloca を積極的に使
有給を駆使し一足早くクリスマス休暇に突入、ヒャッホイ Ingress やるぜーと 意気込んでいた矢先ノロウイルスにやられダウンした。かなしい。鎮まれ俺の胃袋・・・ そんな腹痛日和の気晴らしとして今日は Garbage Collection Advent Calendar に参加してみることにしました。 Advent Calendar 初体験につきよくわかってないけど勝手に参加していいんですよね? GC というとジェネレーショナルだのパラレルコンカレントだのといった話が目立ちがちだけれど、 現実の問題というかブラウザを相手にするとそれ以外の細々とした面倒が目につく。 GC つき言語 (JavaScript) のコードと C++ で書かれたコードとの連携は最たる面倒の1つ。 たとえば WebKit の DOM は C++ で実装されており、 C++ のオブジェクトは JavaScript 処理
話が前後しますが、なんで僕がこんなエントリー(のシリーズかな?)を書こうと思ったかを述べます。その後、高階述語論理に少し触れます。 前回のエントリー:型推論に関わる論理の概念と用語 その1 シリーズ目次: その1 その2 その3 その4 その5 その6 番外(型理論ってば) 型推論の話についていけない事情 型推論について調べたり勉強したりしようとすると、ゴチャゴチャしていてメンドクサイんですよ。同義語/類義語が無闇に多くて、人によって言葉の使い方が違うのです。そうなると、書かれたモノを読むときの負担が大きくてイヤになっちゃう。 きちんとした教科書なら定義もちゃんと書いてあるのでしょうが、僕は教科書は苦手。短めの論説・論文を拾い読みしていると、用語法が錯綜していてなんだかワカラナイ。ウゲウゲ。といった状況なんです。 なんでこうなの? と考えてみると、まずは「型とはなにか?」に対する考え方・方
寒いのがホントに苦手。寒いと活動レベルが下がって、なんもやる気が出ないわ。 これ、一回のエントリーで書こうとした内容なんだけど、途中までなので「その1」を付けました。中途半端なところでブチッと終りますが、続きをたぶん書きます。 [追記 date="2012-01-27"]「論理式の構成法」と「型の論理式」はこのエントリー内に続きを書きました。さらに続きは別なエントリーになるでしょう。[/追記] [追記 date="2012-01-30"]後に続く記事とツジツマをあわせるため、文言をわずかに修正。[/追記] 型推論を備えるプログラミング言語が増えてきましたね。そのうちに、型推論はプログラミング言語の「普通の機能」になるのかもしれません。 型推論と一口にいっても、型システムとか計算モデルによって色々と違いが出るでしょうし、そもそも「型推論」て言葉が何を意味するかもそれほど明らかじゃないです。人
バートランド・メイヤー(Bertrand Meyer)先生は、とにかく偉大です。局所的には、無理筋な例え話や強引な主張で僕らを笑わしてくれるのですが、全体としては実にまったく正しいことを言っています。 メイヤー先生の主張のなかでも、僕がもっとも影響を受けて、はてしなく役立っているのは「Command-Query分離の原則」です。オブジェクトやシステムのインターフェイス&実装を「CommandとQueryに分けろよ」という提案。Commandは値を持たず、副作用(つうか、主作用だけど)だけを持ちます。Queryは副作用を持たず値だけを返します。 Commandとは何であるか、Queryとは何であるか、副作用を持つ/持たないとは何であるか -- これらの概念は、日常直感に頼るだけではなくて、正確に定義することができます。 Queryが副作用を持たないことから、同じQueryを二度発行すると、同
2010年09月30日03:30 カテゴリMath Math - 01者で読んでいないと恥ずかしい必読論文 これは恥ずかしい。 10代で読んでいないと恥ずかしい必読書 - その1 - PictorialConnect 何が恥ずかしいって、なんといってもその分量。 必読っていうなら、なるべく短くなくちゃ。 Binary Lambda Calculus and Combinatory Logic 読むべきなのは、こちら。 John's Combinatory Logic Playground http://homepages.cwi.nl/~tromp/cl/LC.pdf わずか20ページのこの論文は、著者が見いだした Binary lambda calculus (以下BLC)と Binary combinatory logic (以下BCL)の簡潔な説明であると同時に、Binary抜きの
Grand Central DispatchはMac OS X 10.6およびiOS 4に追加された新技術だ。 このGrand Central Dispatch(以下"GCD")は、プログラマー以外にその効用を説明することが難しい技術だ。漠然と「マルチコアプロセッサを効率的に使うための技術」と言っておくこともできるが、それじゃあなんでiOS 4に搭載されてんの?という話になってしまう。 これをプログラマー向けに説明するならば、次のような感じになるかと思う。 GCCを拡張してクロージャ的な機能を追加してみたら、非同期処理とか並列処理とかすげー書きやすくなったんで、ちょっとその辺りまとめてみました。 僕の個人的な意見としては、単にAppleのコンパイラー技術者たちがC言語ファミリー(C/C++/Obj-C)にクロージャを追加したかっただけなんじゃないかな、と考えている。 とりあえずマンデルブロ
About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...ループを使わずに1から100までMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチ
記録を続けます。今週いよいよ Flash 向け自己記述 lisp コンパイラが完成しました。自己記述コンパイラというのは、自分自身の言語で書かれたコンパイラという事で、私のやつは次のように構築しました。 まず、他の人の作った言語で lisp コンパイラを記述します。このコンパイラは lisp プログラムを受取り、flash のバイトコードである abc 形式のファイルを出力します。この abc ファイルは、Flash の VM である Tamarin や、ひと手間かけて普通の Adobe Flash Player で動きます。 出来上がった lisp コンパイラと Tamarin を使って、また lisp コンパイラを記述します。このコンパイラも同じように lisp プログラムを受取り abc ファイルを吐き出します。 するとあら不思議、lisp コンパイラを使って lisp コンパイラを
分散KVS kumofs のコードは、全体で約2万行です*1。 そのうち、ネットワークI/Oやプロトコルに関するコードは約1万行*2で、全体の約半分を占めています。 ロジックは残りの半分*3だけで実装されています。 この実例から分かりますが、kumofsのような分散アプリケーションを開発するにはI/O周りの実装が大変で、とてつもなく大きな障壁になっています。*4 さらに今日では、性能を稼ぐためにマルチスレッド化が必須です。また、多数のクライアントを少ないリソースで効率よく相手にするには、非同期・イベント駆動型のアーキテクチャも必要になります。さらに、究極的な性能を達成すべく GC を利用しない C++ においては、実装のみならず設計も大変です。 これに加えてソケットAPIの難解な挙動に対処にしなければならないため、C言語やC++によるネットワークプログラミングは、vimの使いこなしなどと同
● [Thoughts][Hard] 本物を探せ 機械語はなぜ難しいのか 先日「"割り込み処理" は既に死語と化している」と書きましたが、若い人達はアセンブリ言語や機械語の学習を放棄している訳ではありません。数は少ないかもしれませんが、スクリプト言語からプログラミングに目覚め、やがてコンピュータ内部の仕組みに興味を持ち、ついには機械語を学ぼうとする人達は間違いなく存在します。だからこそ、専門雑誌は定期的に「コンピュータの仕組み」に関する特集を組んできましたし、関連する書籍も多数出版されてきたのでしょう。 それでは、このような特集が組まれ書籍が出版されるたびに、彼らの疑問は解消し、コンピュータ内部への理解は深まったのでしょうか?残念ながら、そうではないようです。"理解" するということは、単純に知識が増えることではありません。ある "閾値" を超える必要がある。閾値を超えて、初めて新しい "
そういえば勉強会の時に、「関数ポインタを返す関数はどうやって書くか?」みたいになったが、僕はそういう時は$ man signal して調べる派である。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/signal.2.html さて、C言語を使い慣れた人には常識ですが、C言語初心者にとって少し難しいのが、変数の宣言です。 例えば、初心者にとって、関数ポインタの配列へのポインタを返す関数の宣言を書くのはあまり簡単ではありません。 C言語の初心者には、以下のようなコードを書くのは少し難しく、また、C言語にあまり慣れていない人は、typedefなどを使ってしまいがちです。 typedef int (*func_t)(int); typedef func_t func_arr_t[10]; extern func_arr_t *x[40]; in
NeverBlock is a fiber-based library that provides I/O concurrency facilities for Ruby programs. It allows developers to write normal blocking Ruby code while handling scheduling transparently. This improves performance over processes and threads by avoiding their overhead, while remaining faster than event loops. NeverBlock uses fibers and event loops under the hood to multiplex I/O operations eff
Impromptu は Andrew Sorensen 氏によって作成されたライブコーディング環境だ。言語としては Scheme をベースとしており,それに映像や音楽を扱うためのライブラリ群と,リアルタイムにコードを記述し実行するためのエディット環境が統合されている。 実際に触ってみると,関数型言語とライブコーディングの親和性が,なかなか良いことが分かってくる。エディターの出来も良く,リアルタイムにコードを書きつつ実行するという作業をスムースに流れるようサポートしてくれる。 上のビデオでは, Impromptu のサンプルプログラムを参考にしつつ,簡単なアルゴリズム作曲のコードを組んでみた。ちなみに,ビデオ中に登場する "my:play" 等の関数は,作業を簡略化するためにあらかじめ用意しておいた関数なので悪しからず。 いくつかのデメリットもあるものの(最大の弱点は Mac OS 版しか存
_ 自然言語プログラミング http://www.kmonos.net/pub/Presen/fltv/FLTV.pdf これは今まで見た kinaba さんの偉業の中でも 最高峰だなぁこれは。 そしてこの偉業に自分の名前が出ててうれしかった。 kinaba さんは詐欺師にむいていると思う。 説明がうますぎて、賛成できなくてもすばらしいと思ってしまう。 賛成できない、というか少しひっかかるのは名前推論の話。 最初見た時はすごいなー面白いなーと思った記憶がある。 でもいつだったかその話をぼんやり思い出してる時に、 微妙にひっかかることがあって、そのひっかかりを今また思い出した。 みんなそうかもだけど、僕こういうのよくあるんだよなぁ。 他の人の発言やら意見を最初ぼんやり流しておいて、 後から replay した時になにかそれに対する考えがまとまってくるみたいな。 で何が賛成できないかというと、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く