プログラミング

Concurrent Clean : TODO

とりあえず、CGIアプリケーションを作ろう。Wiki的なCMSがよさそう。必要な道具は次のようなところだ。 DBアクセス CGI+HTTPヘッダ操作(含 セッション管理) HTMLテンプレート 文字列操作(含 正規表現、ハッシュ関数) MVCフレームワーク いくつかは着手し…

Concurrent Clean : MVCフレームワーク

MVCフレームワークを持つということは、適当な型クラスを定義してやることでよいのか? http://www.jac-net.com/~tarzan/smalltalkers/mvc/mvc.htmlのプラガブルMVCをよく見直すこと。 http://heim.ifi.uio.no/~trygver/2003/javazone-jaoo/HM1A93.htmlも見…

Concurrent Clean : 命名センス

発想をちょっと変えて、次のような関数群に matches 文字列全体と一致matches/matches_from/matches_to/matches_betweeen matches_head 文字列の先頭と一致matches_head/matches_head_from/matches_head_to/matches_head_between matches_tail 文字列の末尾…

Concurrent Clean : 正規表現

"[a-z][0-9]*"が"([a-z][0-9])*"のように解釈されているバグを発見。 というか、早くパーサを見直したほうがよい。 - そういえば、パーサなのかパーザなのかどっちだろう? - とりあえず、バグは直した。

SQL : 変数, XML

SQLは変数も使えますよ。let構文が用意されていないだけです。 select a, b, c from (select a, b, a+b as c from table) where a * b = cあと、最近のSQLはXMLの取り扱いも上手いです。URLは適当に探してください。

C-- : インストール 失敗

cygwin環境でc--をインストールしてみようとしたのですが、はまりポイント大杉で失敗しました。 とりあえず、いろいろ試行錯誤するうちに、まとめサイトを見つけて、結構いい線までいったのですが、 http://wiki.ittc.ku.edu/csdl/C-- 結局ダメでした。 てか…

Concurrent Clean : svnに登録しました。

最近作っていたもろもろをsourceforge.netのsvnに登録しました。 http://cleanoptenv.svn.sourceforge.net/viewvc/cleanoptenv/trunk/ ちなみに、正規表現のやつはこれです。 http://cleanoptenv.svn.sourceforge.net/viewvc/cleanoptenv/trunk/OptEnv/OptRe…

Erlang : Mnesia

Mnesiaってなんて読むんだろう?「メシア」?「ネシア」?「エムネシア」? Mnesiaを見ると、amnesiaを連想するのだけど、そういう意図なのかなぁ? データベースだけにね。

fish

というシェルを見つけた。 http://fishshell.org/ http://ja.wikipedia.org/wiki/Friendly_interactive_shell

C言語でCGI

ググって見たら結構ある。CleanでCGIの参考にするので、いくつかピックアップ。 http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/ http://www.kinet.or.jp/hiromin/cgi_introduction/index.html http://www.st.rim.or.jp/~phinloda/cgi.html あと…

Concurrent Clean : 正規表現

実装してみて思ったのだけれど、正規表現のコンパイルは実行時まで遅延する必要なんてないわけで、プリプロセッサでコンパイルしてしまうと速度が稼げるし、エラーも早期に発見できるのでよい。 そういう意味で、Cleanで再実装してあるということは、メリッ…

SQL

なにか、SQLの好き嫌いで炎上しているようですが・・・ SQLって論理型の高級言語だと思うので、SQLで論理的な構造を記述するのは分かりやすくなりこそすれ、逆はないと思うのですけどね。 SQLの文法は、リストの内包表記とほとんど同じなので、リストの内包…

Concurrent Clean : sourceforge.net

最近、自作ライブラリやプリプロセッサやらを作り始めたので、場所が欲しくなったので、もう一つプロジェクト申請をしておいた。 http://sourceforge.net/projects/cleanoptenv 明確なリリースはなくて、スナップショットを適宜公開する感じになると思われる…

Concurrent Clean : 命名センス

matchesForEnd/searchesForEndとmatches4end/searches4endのどちらの方がセンスがよいか。 というか、ここはforでいいのかという問題も。 ちなみに、 let text = "aa11b2cc33" res = re "[a-z][0-9]*" matchesForEnd text in map ((%) text) resならば、 ["c…

Concurrent Clean : 配列の更新

配列の更新が一意配列のみに限定されていることを考えると、下の仕様はやや驚きだが、便利だ。 http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap4.html#sc19 Swap:: !Int !Int !*(a e) ->.(a e) | Array a e Swap i j a=:{[i]=ai,[…

Concurrent Clean : abortはstrict

ついさっきまで、abortが正格性解析で特殊な振る舞いをすることに気づきませんでした。 f b a | b = a = abort "error"と書いたとき、fの型は、大体、次のように推論されるのです。 f :: !Bool !.a -> .aで、なぜ、「!.a」のように正格性注釈がついてしまう…

Concurrent Clean : 正規表現

なんか、参考ページのパーザの書き方が間違ってるくさいんですけど・・・ "([A)]\()"見たいなのが通らない気がする。 そうでなくても、ちょっとアレなので、後でいろいろ直していかないとダメっぽいな。 - そして、正規表現文字列のコンパイル処理の記述を完…

オープンソースソフトウェアライセンス

オープンソースソフトウェアライセンスについての見解を書きたくなったので。 アプリケーションプログラム の場合は、迷うことなくGPLで。何も失うものはないです。 ただし、利用するライブラリがGPLと互換性がなければ、検討の必要があります。 動的リンク…

Concurrent Clean : テンプレートエンジン

言い忘れていましたが、あれから少々修正して、テンプレートエンジンは一応の完成を見ました。

Concurrent Clean : 正規表現ライブラリ

テンプレートエンジンができたら、正規表現ライブラリが欲しくなるのが人情です。いちいちパーザコンビネータなんてやってられません(暴言) PCREを外部ライブラリにして呼び出せばそれで終わりとも言えますが、誘惑にかられて自作しようと思います。とりあ…

Concurrent Clean : 破壊的更新と関数的更新のバッドノウハウ

Cleanの配列は、次のように更新できる。この更新は破壊的更新なので、配列 arr は一意性属性を持つ必要がある。 {arr & [i] = e}Cleanのレコードは、次のように更新できる。この更新は関数的更新なので、レコードはコピーされる。 {rec & fld = e}

Concurrent Clean : シンタックスハイライト

http://g.hatena.ne.jp/help#syntaxhighlight に含まれているcleanって、あのcleanのことでよいですか?

Concurrent Clean : 部分文字列比較の速度チェック

(注)この記事は、嘘をつきまくりです。上の訂正記事をお読みください。 次の2つの速度を比較してみた。 f = lst % (0,2) == "aaa"f = lst startswith "aaa" (startswith) infix 9 :: !String !String -> Bool (startswith) ss tt = lss >= ltt && check 0…

文字列検索アルゴリズム

http://www2.starcat.ne.jp/~fussy/algo/index.htm 後で使う。

Concurrent Clean : HTML

http://page.freett.com/shelarcy/log/2006/diary_11.html#where_is_stdhtml shelarcyさんから突っ込みが入っていますが、私がやろうとしているのはそんな繊細なものでもなくて、泥臭いテンプレートライブラリです。でも、そういう泥臭いことをするにもClean…

Concurrent Clean : 訂正記事 : 部分文字列と文字列コピー

[id:lethevert:20061102:p1]と[id:lethevert:20061103:p3]でつきまくった嘘を訂正します。 まず、[id:lethevert:20061102:p1]をちゃんと読むと、 rep movslとか書いてありやがりますです。 私の認識では、これはまさしく文字列コピー。 - で、[id:lethevert:…

プリプロセスとIDE

とまあ、こんな具合に、200行未満のプチプログラミングで結構便利なプリプロセッサを作ることができるのですが、さてこれをIDEと組み合わせようとすると面倒なことになるわけで。 GUIのプログラミングをするには、フォームデザイナが欲しくなるわけなのです…

Concurrent Clean : 文字列

せっかく副作用がないのだから、部分文字列の切り出しは、メモリコピーなしに実装してあるんだよね、ということを確認したくなった。 該当ソース。 empty_string: movl $zero_length_string,a0 ret section (sliceAC) sliceAC: mov 4(a0),a2 test d1,d1 jns …

Concurrent Clean : ライブラリ化

HTMLの取り扱いをライブラリ化しようとしています。これにプリプロセッサをかませて簡単な組み込みテンプレートエンジンにしてしまおうと画策中。 module PageIndex import StdEnv, OptEnv, Html Start w # (f,w) = stdio w f = f --> printHttpHeader ["Con…

Concurrent Clean : WindowsとLinuxのリンカ

は、どうも仕様が違うような気がする。 WindowsのStaticLinker.exeは、ファイルを作成して、その中にオプションを記述するので、実行後にテンポラリフォルダにファイルが残るのだけれど、Linuxの方はそういう形跡がない。 - Linuxのlinkerのほうは、 linker …