サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
世界禁煙デー
practical-scheme.net
プロセッサ = CPUの基本的なデバッグサポートについて紹介しています。 基本的なアーキテクチャブレークポイントプロセッサを1命令ずつ実行させる特別なモードデータブレークポイント(ウォッチポイント)ときには、特殊なデバッグ用レジスタマルチスレッド、マルチプロセッサのサポート 基本的なアーキテクチャ CPUの種類によらない基本的なアーキテクチャです。 ブレークポイント ブレークポイントを実現することはデバッガを作る上で欠かせないものですが、最近のCPUではこれが二通りのやり方でサポートされています。 ハードウェアブレークポイント ハードウェアが持つデバッグレジスタとプログラムカウンタとの比較によってブレークを実現します。デバッグレジスタに値を設定するだけでトラップが行えるため、下記のソフトウェアブレークと比べて非常に簡単です。また、この機能を使うとソフトウェアブレークポイントにあるいくつかの
Shiro: SchemeでMonadを書こう、という話はちょくちょくある。 OlegさんのMonadic Programming in Scheme Neelakantan KrishnaswamiのMonads in Scheme teranishiさんのページ howm wiki - モナド 実用的な見地からは、Monadが便利なのはモナド則を満たす基本演算を定義 しておけば他の色々な操作がジェネリックに行えることだ。 (call-with-iteratorsさえ定義しておけばgauche.collectionの色んな ジェネリック関数が使えるようになりますよ、というのに似ている)。 ただ、Schemeのような実行時型判定を行う言語でMonadを使おうとすると どうもすっきりいかない。というのは、Monadの基本演算が引数の型だけでなく 戻り値の型でディスパッチする必要があるからだ。
略歴 大学時代にC言語をはじめるが、よくわからず挫折。 その後、Rubyを知り簡単なスクリプトを書くようになる。 関数型言語を勉強したくなりHaskellをやったが、よくわからず。 ;Haskellも勉強し直し中 その後、たまたま本屋でみょーに口と目が大きい魚の表紙のオライリー本を見かける。その本はプログラミングGaucheというらしい。 自宅に帰って、wikiで調べると何か凄いらしいとわかり、後日購入。 その後は、ほとんどGaucheでコードを書くようになる。 コンピュータ関係は本当に勉強することが一杯あるなー。 これだけでも一生やっていけそうだ。 perl perl入門してみる。 cpanが楽しみ。 C言語 プログラミング言語Cとプログラミング作法を読み終えた。 Cは良い言語。 そういえば、どっかで読んだけどCのインデントが8なのは、ネストを深くしてはいけないという教訓から来ていると書
Schemeの名前づけの慣習には、一応こんなのがある。 a. 破壊的操作を行う手続き、構文には!をつける (set-car! etc) a'. !のついた手続きの返り値は未定義(portableには利用できない) b. 真偽値を返す手続きには ? をつける b'. ?のついた手続きの返り値は真偽の判断のみに使える(#t以外の有用な 値を返すことはあてにできない) a, bについてはほとんどの場合守られているといえるだろう。 ただ、よりきつい縛りであるa', b' については、srfiやライブラリレベルでは 守られていないこともあり、混乱を生じやすい。 ちょっとまとめてみる。 !の返り値!の返り値が「利用できてしまう」もの!の返り値を「利用せざるを得ない」もの?の返り値#f, #t以外を返す?-関数述語としてもよく使われるが、#f, #t以外を返すために?がついていないものその他の記号/*$
Shiro(2010/03/25 02:58:10 PDT): 既にあるプログラムに対して、後つけで 「この手続きの間だけプロファイラをon/offできないか」という話。 http://practical-scheme.net/chaton/gauche/a/2010/03/25#entry-4bab1039-2c8af 特定の式の実行中だけプロファイリング プロファイラはScheme側からon/offできるので、コードが書き換えられるなら こんなことができる。 (define-macro (profiling expr) `(dynamic-wind profiler-start (lambda () ,expr) profiler-stop)) (profiling 式) とすれば式の実行中だけプロファイルがとれる。 例えば、適当に重い計算をでっちあげといて: (define (fib
元の質問は YukiWiki:プログラマーへ64の質問 にあります。 突っ込み歓迎。突っ込みはハイフン三つ(---)で書いてくことにしましょう。 0.プログラマは何事も0からスタートするべきだと思いますか? 内部表現はそれでいいですが、外部表現は相手に合わせましょう。 入力には寛容を。出力には厳格を。nobsun なるほど。いい言葉だ。Shiro でも、0 vs 1 みたいな排他的なものに、どうやって寛容を導入するのやら 戯 1.プログラマの定義は何でしょうか? 人に使ってもらえるプログラムを書く人。 2.あなたがいつもやることとは? C-x C-s (作業途中のセーブ) あるある。そして、 mew を使ってると、無意識に i を連発。yari 今使おうとするツールのSave手段をまず「身に付けて」から作業開始。命綱は最初に確認するっしょ。 戯 3.あなたが絶対やらないことは? ログを書
windowsでデバッグ情報を扱う場合には、このdbghelpというライブラリを使います。シンボル情報の読み込みや型情報の取得などはすべてこのライブラリが担っています。 dbghelp注意事項1注意事項2典型的な使い方型情報について図表の見方基本型ポインタ型配列型関数型pdbdump代表的なAPI このライブラリには多少扱いづらいところがあるため、一番最初にはまりやすい注意事項について書いてあります。 参考 msdn: Debug Help Library .NET & Windowsプログラマのためのデバッグテクニック徹底解説 dbghelp 注意事項1 実は、似たようなライブラリとしてimagehlpというのもあるのですが、これは古いバージョンのdbghelpだと考えていいでしょう。昔はimagehlpといえばデバッグ情報やイメージ情報を統合的に扱うライブラリだったのですが、ちょっと巨
プログラミングClojure プログラミングClojure書誌情報正誤(第1版第1刷)確認済み未確認紹介・書評コメントなど 書誌情報 プログラミングClojure http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06789-1 Stuart Halloway著 川合史朗訳 A5判 320ページ ISBN:978-4-274-06789-1 第1版第1刷 2010-01-25発行 原書: Programming Clojure http://www.pragprog.com/titles/shcloj/programming-clojure (本文中のコードをダウンロード可能) 正誤(第1版第1刷) 確認済み 未確認 p.5 homoiconic 変更前 Lispは同図像性(homoiconic)を持つ言語だ 変更後 Lispは
Schemeで書くかCで書くか Scheme処理系をSchemeで書くのは、evalを使うという反則技無しでも、 Cで書くより楽である。その快適さを知っているSchemeインプリメンテータは、 Cで処理系を書く場合でも、最低限のプリミティブだけをCで書いておいて残りはSchemeで… という誘惑にどうしてもかられてしまう。 それに、そのアプローチはエンジニアリング的にも悪いことではない。 なるべく基本的な部分や性能が必要な部分だけをCで書いたいわばmicro-Scheme処理系を まずしっかりと作り、処理系の残りの部分はmicro-Schemeを使って書く。そうしておけば、 処理系自体の保守が楽だし、拡張する場合もmicro-Scheme処理系をリコンパイルしたり する手間が無くて良い。多くのScheme処理系はこのアプローチを取っているようである。 Gaucheでは、しかし、Scheme
よく、ディレクトリを再帰的になめてごちゃごちゃやりたいことがある。 簡単なものならfind使ってone linerで済ませるんだが、 ちょっとややこしい処理だとスクリプトにしたくなる。 そういう時に書いた使い捨てスクリプトを貯めておくページ。 ソースファイルの行数カウント まあ、処理自体は find . -name '*.scm' | xargs wc -l で済むことなんですが、 良く出てきそうなパターンなんで書いときます。 port-foldの中でごにょごにょすれば、コメントは飛ばすとか色々できますし。 #!/usr/bin/gosh (use gauche.parseopt) (use file.util) (use srfi-13) (define matcher #/\.scm$/) ;default (define (main args) (let* ((arg (parse-
0.8.12までのsys-globはPOSIX.2のglob()関数を使っていたが、windows portでも同じ動作を保証したいのと、'**' とか '{a,b,c}' などの拡張機能も盛りこみたいので、Schemeで実装することにした。 で、globのパターンをregexpに変えてツリーに再帰的にマッチかけてけばいいとたかをくくっていたら、 案外面倒だったのでメモしておく。 面倒なのはパスコンポーネントの先頭に現れる '.' へのマッチだ。これは「パターンのパスコンポーネントの最初に現れる'.'」にしかマッチしない。つまり、 パターン '*' は空の文字列にもマッチ可能なんだけど、パターン '*.' は 名前 "." にはマッチしない。パターン中に現れる '.' がコンポーネントの先頭にないから。 なので普通は '*' -> #/.*/ '?' -> #/./ '.' -> #/\.
ここでは既存の環境や言語におけるデバッグAPIの実例について紹介します。 SquirrelのデバッグAPIAPI一覧sq_setdebughooksq_stackinfossq_getlocalsq_enabledebuginfoSQStackInfosLuaのデバッグAPIAPI一覧debug.sethook debug.getinfo debug.getlocallua_Debugサンプル実装RubyのデバッグAPIAPI一覧set_trace_funccallerlocal_variablestrace_varevalサンプル実装 SquirrelのデバッグAPI SquirrelとはLuaから派生したC++やJavascriptなどに似たLL言語です。 スクエニのとあるゲームで使われています。 スタック言語なので、少し分かりずらいところがあるかもしれません。 HSQUIRRELVM
Y Combinatorを始めた理由 ---Why YC--- Paul Graham, March 2006 (Rev. August 2009).[訳註1] Copyright 2009 by Paul Graham. これは、Paul Graham:Why YC を、原著者の許可を得て翻訳・公開するものです。 <版権表示> 本和訳テキストの複製、変更、再配布は、この版権表示を残す限り、自由に行って結構です。 (「この版権表示」には上の文も含まれます。すなわち、再配布を禁止してはいけません)。 Copyright 2009 by Paul Graham 原文: http://www.paulgraham.com/whyyc.html 日本語訳:Shiro Kawai (shiro @ acm.org) <版権表示終り> Paul Graham氏のエッセイをまとめた『ハッカーと画家』の
R5RSのevalは、第二引数に「環境指定子(environment specifier)」を 取ると定義されている。 (eval form environment-specifier) しかし、環境指定子の具体的な実装は処理系に任されている。 処理系によっては、レキシカルスコープを含めた環境を ファーストクラスオブジェクトとして取り出せるものがあるから、 そういう処理系独自の拡張を念頭に置いた仕様だろう。 Gaucheでも将来はそういう拡張をするかもしれないが、 現在のところは、単なるモジュールを環境指定子として使っている。 モジュールはトップレベルの名前空間を規定するものだ。 evalは、form内の自由変数を、第二引数に渡されたモジュール内で 解決する。 ;; デフォルトではプログラムはuserモジュールで実行される。 ;; R5RSのinteraction-environmentは
Shiro(2009/07/07 02:59:40 PDT): Shibuya.lisp TT#3の懇親会にて、gauche.testの機能追加の話がちょっと出たので考えてみた。 使い勝手が良くなるなら機能を足すこと自体は問題ない。ただ、やたらにAPIを増やすのは却ってわかりづらいので、組み合わせで済むものなら(よっぽど便利にならない限りは)足さないんじゃないかな、というのはある。 なので、私があまり積極的でない機能を足してほしいという方は、「こういう理由で便利なんだよ!」と私を説得してくださいな。 入れたいな、という機能 異常系のテストで、想定したconditionが上がっていることを簡単にテストしたい 0.8.14までは<test-error>オブジェクトのひとつのインスタンスが*test-error* に束縛されてて、結果として上がってくるものが<test-error>かどうかを 調
Chaton (pronounced like [sha-ton], a 'kitten' in French) is a simple Comet-based Webchat server written in Gauche. Originally it is developed to host a successor of Gauche chat room on Lingr ( http://www.lingr.com ), when Lingr announced to terminate its service. Although Chaton never aims at serving in such a large scale and with tons of features like Lingr, the "look and feel" of the interface s
NSISはnullsoftによるWindowsインストーラコンパイラ。 http://nsis.sourceforge.net/ 方針NSISのインストールディレクトリをPATHに追加Gauche-mingwのビルドNSISスクリプトテンプレートデスクトップへのショートカット登録スタートメニューへの登録拡張子.scmをgosh.exeに関連付けるアンインストールでのショートカット削除アンインストールでの関連付け削除Gaucheのバージョン埋め込み../Gauche-mingw-dist/Gauche配下のファイル一覧を得るアンインストールでのファイル削除スクリプトジェネレータNSISスクリプトの生成NSISによるコンパイルインストーラー実行今後の課題日本語版以外のWindowsへGauche-win32-<version>.exeをインストールしたときの挙動?Gaucheboxへの発展PA
Shiro(2009/02/23 01:52:32 PST): AOBenchベンチマークSchemeレベルでのチューニングコメント、議論 AOBench ambient occlusionとかpath tracerをいろいろな言語でやってみるというのが はやっていたらしい: AO bench 少し出遅れた感もあるが、以前から延ばし延ばしにしてきた最適化を仕込むちょうどいい 機会なのでGaucheにポートしてみた。 なお既に(R6RS) Schemeへは .mjt さんの手によってポートされている。 Schemeでもパストレース AO bench yharaさんによるGaucheへのポートもあるが、今回は.mjtさんのコードを出発点に、Gauche特有のオプティマイズをかけてゆくことにした。 最終的なコードはこちら→aobench.scm。 下にも掲載する。 ambient occlusi
高水準スレッドライブラリ java.util.concurrentのような高水準スレッドライブラリを作ってみようと思います。ここに書いているAPIはまだ決定ではありません。 Rui:ThreadLibrary:Future Rui:ThreadLibrary:BlockingQueue Rui:ThreadLibrary:Executor Rui:ThreadLibrary:Latch Rui:ThreadLibrary:NonBlockingHashTable ほかに書くつもりになっているもの: アトミック変数 ほかロックフリーなデータ構造(気が向けば) 最新のソースコードはこちら: http://gauche.svn.sourceforge.net/viewvc/gauche/Gauche-threadlib/trunk/
Lispboxと同様に、Emacs等を含んだGaucheの配布物を作ろうとする試み。 Gauche:NSISと重複する部分は割愛。 ダウンロードインストール開発方針リポジトリ開発時のソース構成スクリプトジェネレータ.emacsscheme-program-namegosh.exeのフルパス埋め込みGauche-glの取り込み課題既存のMeadow環境への影響gosh.exeでの日本語表示MeadowでのUTF-8対応Meadowでの日本語入力コメント ダウンロード http://sourceforge.net/project/showfiles.php?group_id=25227 インストール Gauchebox-<version>.exeをダブルクリックしてインストーラを実行する インストールの最後に黒い背景の画面が表示される。 Enter the directory which Me
あるいは、なぜcall/ccがプリミティブなのか、に関する一考察 (Shiro: 「なんでも継続」に入れようかと思ってたネタだけど、 あっちがいつ書けるかわからんので、忘れないようにこっちにまとめとく) (話の流れがあるので、誤りの修正以外のコメントは途中ではなく、一番下にお願いします) returnはどこだ? Aliceは、リストlisと述語手続きpredを取り、lisの各要素に順にpredを適用して、 predが真の値を返したら直ちにその要素を返すような関数findを 書くことを考えた。 (findは便利なので、実はsrfi-1に定義されてるけど、 Aliceはまあ自分の勉強のために書いてみることにしたと思いねえ)。 AliceはPerlなら良く知っている。Perlならこんな感じで書けるはず。 sub find { ($pred, $lis) = @_; foreach $elt (@
(2008/12/21 15:04:15 PST) きっかけはひとつのバグレポート。小数点以下の桁数が309桁を越える浮動小数点数をGauche (0.8.14) に読ませるとinf.0が返る。 gosh> 1.098612288668109691395245236922525704647490557822749451734694333637494293218608966873615754813732088787970029065957865742368004225930519821052801870767277410603162769183381367179373698844360959903742570316795911521145591917750671347054940166775580222203170252946897560690106521505642868138036317
ここはschemeでのデバッグ手法を紹介するページとなります。 以前の内容はGauche:デバッガに移しました。 ページの移行に伴いコメントは削除しました。内容はhistoryに残しましたので、見たい方はそちらを参照してください。
emeitchさんのリクエストより。元ネタは Perlプログラマのレベル10。 私家版、Schemeプログラマのレベル10 くれぐれも本気にしないように。 レベル0 SchemeとかLispとかいうカッコだらけですごくわかりにくい言語があることは知っているが、 最強とか主張する信者がいるらしいのでなるべく関わらないようにしている。 EmacsLisp?もその親戚らしいけどコードを見ただけでくらくらする。 でも便利なマクロは自分の.emacsにコピペしている。 レベル1 Schemeに関するwebサイトを見たり、大学の講義での説明とかを聞いて、 factorialとかappendとかreverseとかを書いたり、 ネストした木構造のノードの数を数えたりできる。 でもそれが何の役に立つかわからない。こんな言語で実用的な プログラムが書けるなんて信じられない。 カッコの位置を間違えて動かないプロ
Gauche on Rails Gauche on Rails とは Gauche on Rails は yuumi3 が gauche.night の ライトニングトークgauche.gong で発表した Ruby on Rails 風の Gauche の Web Framework です。 発表資料 : http://www.ey-office.com/public/GaucheOnRails.pdf ソースコード : http://ey-office.net/svn/rails/trunk/GaucheRails/ Seminar:Gauche/Kahua Gauche/Kahuaセミナー2008 Fallで Gauche on Rails の内部の話をしました 発表資料 : http://www.kahua.org/download/kahua/2008Fall/WayToGauc
循環や共有構造を持つS式 循環や共有構造を持つS式の表現は、srfi-38で決められている。 この表記はCommon Lispから取ったもので、たとえば次の2つの式: (let ((x (list a))) (set-cdr! x x) x) (let ((x (cons 'a 'b))) (cons x x)) によって作られる構造は、それぞれ次のように記される。 #0=(a . #0#) (#0=(a . b) . #0#) #n= でもってオブジェクトにラベルをつけ、 #n# で参照する Gaucheは、version 0.7.1現在、write* による表示のみサポートしているが、 読み込みはサポートしていない。 近いうちにサポートしたいので、ここで色々考えてみる。 問題点 - srfi-10 vs srfi-38 循環リストの読み込みは、使えるデータ型が決まっていれば難しくない。
RSSMix: Recent Entries[What's This?][Sources]2024/03/07 13:46:59 UTCWiLiKi: Shiro:AuditionRecords2024/03/07 11:25:13 UTCChaton Common-lisp-jp: 新着Lisp記事: 『実用Common Lisp』読書会(142) ...2024/03/02 11:51:08 UTCChaton Common-lisp-jp: 新着Lisp記事: コンピューティング史見聞録(13) ...2024/02/24 21:05:28 UTCWiLiKi: Scheme:初心者の質問箱2024/02/23 14:34:54 UTCChaton Common-lisp-jp: 新着Lisp記事: 信号の包絡線を計算する (Common ...2024/02/22 21:31:15
(leaf-envというのは、JITされる手続きが(1)内部でクロージャを作らない (2)内部で環境を積まない、という条件の時に可能になる最適化を有効にしたもの。 本来、jitルーチンでそういう手続きを判別して最適化を切り替えるべきだが、 今は外部からパラメータで切り替えている) Schemeのソース (define (fib n) (if (< n 2) 1 (+ (fib (- n 2)) (fib (- n 1))))) JITなし版の実行 gosh> (time (fib 39)) JITあり版の実行 gosh> (use gauche.vm.jit) #<undef> gosh> (define (fib n) (if (< n 2) 1 (+ (fib (- n 2)) (fib (- n 1))))) fib gosh> fib #<closure fib> gosh> (d
たらいまわし関数Haskell (hugs December 2001版)Ruby (1.8.0-preview2)Gauche (0.6.8)クロージャ版delay/force版クロージャでは何故計算量が減らないか議論 たらいまわし関数 tarai(x, y, z) := y if x <= y tarai(tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y)) otherwise eagerに評価すると、不要な枝の先の先まで計算してしまって大いなる無駄となる。 lazy evaluationの利点が光る一品である。 参考: 竹内郁雄 どう転んでもLisp WikipediaJa:竹内関数(WikipediaEn:Tak (function)) たらいまわし関数 たらいまわしべんち Haskell vs Ruby たらいまわしべんち最終
次のページ
このページを最初にブックマークしてみませんか?
『Practical Scheme』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く