タグ

ブックマーク / kazu-yamamoto.hatenablog.jp (16)

  • Haskell(GHC)での軽量ユーザスレッドの実装方法 - あどけない話

    命令型言語の JavaRuby がユーザスレッドからカーネルスレッドに移行したのとは対照的に、関数型言語の Erlang や Haskell では軽量なユーザスレッドを提供することに成功しています。僕は、この違いが何から生じているのか理解したいと思っています。この記事では、これまで調べたことをまとめます。 軽量なユーザスレッドは Erlang が有名ですが、Haskell (GHC)でも利用できることを重ねて強調しておきます。Haskell の方が Erlang よりも速いようです。追記:フェアな比較ではないようなので、話半分で参照して下さい。 Rubyの場合 Ruby 1.8 まで提供されていたユーザスレッドは、軽量とは言えませんでした。その理由は、ユーザスレッドをコンテキストスイッチさせる際にスタックをコピーしていたからです。Rubyソースコード完全解説の第19章 スレッドによれ

    Haskell(GHC)での軽量ユーザスレッドの実装方法 - あどけない話
    antipop
    antipop 2011/09/02
  • Emacs補完候補の選択を便利に - あどけない話

    今話題のauto-complete.elを使ってみましたが、以下の点が使いづらく、使うのを止めてしまいました。 候補が最大10個しか出ない 10個以上の候補がある場合、次に打つべき文字が分らない バッファの最下部でメニューが表示されると、勝手にスクロールされる 個人的には、Emacsが提供する標準の Completion List モードを拡張する方がいいなぁと思いました。Completion List モードが使いにくいのは、以下の点です。 C-f/C-b/C-n/C-pはカーソルの移動であって、候補間の移動ではない RETで選ぶと、候補のリストを表示する前の状態に戻れない Emacs 22では、カーソルが他のバッファに行ってしまう Emacs 23では、元のバッファにカーソルが戻るが、余計なバッファが表示されたまま という訳で、これらを解決するコードを書いてみました。最後に付けているコ

    Emacs補完候補の選択を便利に - あどけない話
  • Electric な Ruby の end (4) - あどけない話

    という訳で、最新版です。関数呼び出しの括弧の中に if があっても大丈夫なはずです。 (defvar ruby-elect-keyword '("def" "if" "class" "module" "unless" "case" "while" "do" "until" "for" "begin" "end")) (defvar ruby-elect-regex (mapconcat (lambda (x) (format "\\<%s\\>" x)) ruby-elect-keyword "\\|")) (defun ruby-elect-end () (interactive) (insert "d") (when (and (char-equal (char-before (1- (point))) ?n) (char-equal (char-before (- (point) 2

    Electric な Ruby の end (4) - あどけない話
  • Haskellチュートリアル - あどけない話

    先週、僭越ながら Haskell チュートリアルをやりました。その資料を公開します。 Haskell プログラミング 〜 純粋関数型言語への誘い〜

    Haskellチュートリアル - あどけない話
  • Cocoa Emacs - あどけない話

    Emacs CVS に、ついに Cocoa 対応のコードがマージされました。 nextstep というディレクトリができていて、そこで "compile" を実行します。しかし、僕は途中でコンパイルが止まってしまいました。他にも同じような症状になる人がいるようです。

    Cocoa Emacs - あどけない話
  • The Little Schemer - あどけない話

    最近、Scheme がちょっとした流行になっているようです。 Scheme を勉強しようと思っている人に、僕が声を大にして薦めたいは、「The Little Schemer」です。 The Little Schemer (The MIT Press) 作者: Daniel P. Friedman,Matthias Felleisen出版社/メーカー: The MIT Press発売日: 1995/12/21メディア: ペーパーバック購入: 10人 クリック: 137回この商品を含むブログ (91件) を見る 1章から7章にかけて、たくさんの例題とともに「再帰」が説明されています。「再帰の再帰」も勉強できます。実際、「このを読んで人生が変わった」という感想を何回か聞いたことがあります。なぜなら、物事を再帰で考えられるようになるからです。再帰が分らない人は、ぜひ読んで下さい。 8章は、「ク

    The Little Schemer - あどけない話
  • https://kazu-yamamoto.hatenablog.jp/entry/20080401/1207032525

    https://kazu-yamamoto.hatenablog.jp/entry/20080401/1207032525
  • プログラマの壁 - あどけない話

    プログラマに向いている人と向いていない人がいるそうです。 Jeff Atwood さんの「どうしてプログラマに・・・プログラムが書けないのか?」: プログラムを書ける者とプログラムを書けない者の間にある大きな溝についてはよく知られているが、プログラマの職に応募してくる人間は、すでにこの溝を飛び越えているものだとばかり思っていた。明らかにこれは妥当な仮定ではないらしい。プログラムを書けないプログラマの面接で時間を無駄にしないために、FizzBuzzスタイルのふるい分けが必要ということだ。 どんなことでも向き不向きはあるでしょうから、これには納得いきます。しかし、プログラマになれる人の中にも、溝があるようです。 Joel Spolsk さんの「Javaスクールの危険」: 私のささやかな経験から言わせてもらうと、伝統的に大学のコンピュータサイエンスのカリキュラムで教えられているもので、多くの人が

    プログラマの壁 - あどけない話
  • Emacs Lisp のダメなところ - あどけない話

    Emacs Lisp をこよなく愛する僕の目から、Emacs Lisp がダメだと思うところをまとめておきます。 文化的な問題 Emacs Lisper の多くは、Lisp が好きで使っているのではなく、Emacs が好きだからしかたなく使っているのでしょう。当は C で書きたいのに、無理して Lisp を利用している感じです。 そのため、Emacs に付いてくる Emacs Lisp のコードは、Lisp らしくないものがほとんどです。単に C での発想を Lisp で表現しています。 これらのコードは、読みこなせないぐらい関数が大きく、副作用のある部分とない部分が分離されていません。また高階関数を用いて、データ構造を走査するコードと実際に仕事をするコードを分離するという意識も低いようです。 GoogleMapReduceという論文のお陰で、Lisp の写像関数(map)と畳込み

    Emacs Lisp のダメなところ - あどけない話
  • my-defstruct - あどけない話

    Emacs で (require 'cl) とすると defstruct が使えるようになります。ちょっと調べてみました。 大きなマクロで理解するのは困難 Common Lisp の defstruct なので、getter はあるが、setter がない という訳で、自分で実装してみました。 (defun my-keyword-number-pair (spec) (let ((len (length spec)) key ret) (dotimes (i len (nreverse ret)) (setq key (intern (concat ":" (symbol-name (car spec))))) (setq ret (cons (cons key i) ret)) (setq spec (cdr spec))))) (defmacro my-defstruct (type

    my-defstruct - あどけない話
  • Arc のハッシュ - あどけない話

    川合さんのエッセイ「Schemer's way」は面白く、とてもためになります。 ただ一点、フェアな議論なのか気になるところがありました。 多くの言語では、新しいオペレータを追加するのは言語そのものを拡張しなければならないだろう。例えばJavaを拡張してPerlの `x' オペレータを実装するには、構文規則から書き直さねばならない。既存のオペレータに新しい意味を追加するというメカニズムは、これもいくつかの言語では言語そのものに組み込みの機能となっている。 Lisp系の言語では、オペレータと関数呼び出しとの間に区別が無いため、オペレータの機能の拡張ということは議論にならない。新しいオペレータが欲しければ、あるいは既存のオペレータを拡張したければ、いつでも自分で書けるからだ。 Java には構文規則を変えなければいけない例を挙げているのに、Lisp では構文規則を変えなくてよい例を出しています

    Arc のハッシュ - あどけない話
  • Emacs Lisp で FizzBuzz - あどけない話

    Emacs Lisp の習得を目指す誰かの参考になるかもしれないので、僕なりの解答を書いておきます。 アルゴリズムの実装 繰り返しと仕事は分離したいので、まず仕事の部分を定義します。 (defun fizzbuzz (num) (cond ((= (% num 15) 0) "FizzBuzz") ((= (% num 3) 0) "Fizz") ((= (% num 5) 0) "Buzz") (t num))) (fizzbuzz 1) ;; => 1 (fizzbuzz 3) ;; => "Fizz" (fizzbuzz 5) ;; => "Buzz" (fizzbuzz 15) ;; => "FizzBuzz" whileループ Emacs Lisp で一番現実的なのは、while 分による繰り返しです。 (defun fizzbuzz1 (limit) (let ((i 1) r

    Emacs Lisp で FizzBuzz - あどけない話
  • 偉大な習慣 - あどけない話

    「僕は、偉大なプログラマなんかじゃない。偉大な習慣を身につけたプログラマなんだ。」 --- Kent Beck 僕の信じた伝説 この一年間、あまりコードを書かずに、たくさんのを読み、勉強ばかりしていました。そして、自分がかなり時代に取り残されたプログラマであることが身に染みて分りました。 僕の信じていたプログラミングの伝説は、こんな感じです。 初期工程で完全な仕様を作れ 実際問題、完全な仕様なんて作れるはずがありません。仕様は変わります。また、時代の変化やユーザの要望の変化により、要求も変わります。ですから、仕様が変わってもよいように、実装に柔軟性を持たせないといけません。 効率第一 大切なのは、コードの分りやすさです。効率はよいが分りにくい大きな関数を書くのではなく、効率はやや悪いが分りやすい小さな関数を書くべきです。関数呼び出しは遅いという伝説もありますが、最近のコンピュータは高速で

    偉大な習慣 - あどけない話
  • 今日の Emacs 22 on MacOS (Leopard) - あどけない話

    Emacs Icon Collections がリリースされたので、ついでに Emacs 22 をバージョンアップしようと思い、EMACS_22_BASE を cvs update して、コンパイルしてみました。 すると、最後の最後で EmacsInstaller.dmg の作成に失敗します。よく調べてみると、/usr/bin/bc が異常終了していました。 % /usr/bin/bc dyld: Symbol not found: _history Referenced from: /usr/bin/bc Expected in: /usr/lib/libedit.2.dylib libedit.2.dylib の日付は、2007年12月14日でした。セキュリティアップデートか何かで更新されたんでしょうか? しょうがないので、MacPorts で bc を入れて、Emacs 22 をイン

    今日の Emacs 22 on MacOS (Leopard) - あどけない話
  • Emacs Lisp のパターン - あどけない話

    デザイン(設計)パターンという程のことはない、Emacs Lisp のパターンを思いつくままに書きます。心は、 高階関数を書こう マクロを書こう です。 mapcar mapcar は、引数に関数をとる高階関数のよい例です。リストを取り、それぞれの値を加工して、新しいリストを返すパターンのときは、mapcar を使いましょう。 (mapcar '1+ '(1 2 3 4)) ;; => (2 3 4 5) mapcar には、自分のさせたい仕事を実装した関数を渡しましょう。 (defun f(x) (1+ (* x 2))) (mapcar 'f '(1 2 3 4)) ;; => (3 5 7 9) mapcar を連結しましょう。(オブジェクト指向でのメッセージの連結に似ていますね。) (mapcar '1+ (mapcar (lambda(x) (* x 2)) '(1 2 3 4)

    Emacs Lisp のパターン - あどけない話
  • 今日の Emacs - あどけない話

    最近、Mac で CVS Emacs がコンパイルできませんでしたが、ようやく今日できるようになっていました。しかし、キー入力に対する反応が相変わらず遅いままです。multi tty をマージした副作用はまだ解決されていないようですね。リンクされたのも Cocoa ではなく、Carbon でしたし。。。

    今日の Emacs - あどけない話
  • 1