kiyokaのブログアーカイブ

Archive of old blog posts

「プログラミング」カテゴリの記事

コードゴルフならぬシステムゴルフ

ふと、自分のプログラミングに対する趣味・趣向について振り返ってみた。 今まで自分の作ってきた作品には、共通項があるんじゃないか。 その結果「なるべく短いコードでシステムを作ろうとしている」という共通項が見えてきた。 いうなれば、コードゴルフならぬ「システムゴルフ」。

頭の中にプログラムを入れる

  Creative Commons|Attribution Photo by Mario Pleitez

ビューティフルアーキテクチャを読む

図書館にあったので借りて読んだ。 ビューティフルアーキテクチャ 著者: Diomidis Spinellis, Georgios Gousios, 久野 禎子, 久野 靖 Amazonで見る

Internetがない環境での生産性は高いか

答えは、『どんな作業をするかによって変わる』だと思う。 最近、子供を託児所に預けている数時間の間にカフェで[Nendo]の開発を行っているけれども、Internetが接続されていない環境では割り込みが入らないため、コーディングやデバッグの生産性は非常に高い。   ただ、他の言語処理系のコードや設計方針なんかを参考にしようとすると、Internetから情報が得られないため部分的に非常に生産性が低い。 Internetは諸刃の剣だと思う。 Internetに繋った環境と繋ってない環境を1日おきとか、午前と午後で分けるとかにするとか工夫するとうまく生産性を上げれるかも。 今Twitterがはやっているけれども、みんなどうやってそのノイズに負けず生産性の維持をしているのだろうか。

屋外でプログラミング

最近家では10分も集中することができない(というか、子供が無いたらすぐになんとかしないといけないので、集中することを禁止されている) というわけで、1週間に2時間くらいは開放させてもらって、プログラミングに集中するようにしてみた。 子供がいない時([Sumibi.org]を作っていた時)は土日に8時間くらいは集中する時間があったので、えらく使える時間は減ったなぁと思う。

Key-Value Store勉強会に行きたかった...

Key-Value Store勉強会に行ってきました - blog.katsuma.tv greeさんで開催されたKey Value Store勉強会に行ってきました。時間にして 4時間超え、内容も国内のKey-Value Storeなソフトウェアの最前線の話ばかり で相当なボリューム。以下、メモってたのを残しておきたいと思います。 それにしても、このメモすごい情報量。

コマンドラインを投稿するサイト Command-line Fu を発見

一行野郎を集めるサイト。 Redditみたいに投稿したコマンドラインをみんなで評価しあえるようだ。 Command-line Fu < The best UNIX commands on the web Command-Line-Fu is the place to record those command-line gems that you return to again and again.

]

[perl.TMTOWTDIの謎を探る]について オリジナルは2002/05/10に書いた文書を[OldType]に移してリンク切れ等をメンテナンスした。 実は、このエントリはPerlの話かと思えば[Gauche]の話に終始している。Perl Loveの人はごめんなさい。

文字コードを自動認識するgrepが欲しい

LVというフリーソフトウェアに複数の日本語エンコードを自動認識するlgrepというプログラムが付属している。 が、-r ( –recursive ) オプションをサポートしていない。 zshの “*/.java” 形式のワイルドカードを使えば -r を代用できるが、展開後のファイル数が爆発すると問題が発生する。 (1行の長さ制限に捕まると、エラーが出てgrepの実行前に止められる) Gaucheでgrepを書いてみようかなとも思うが、そこまでするほどでも無い気がするんだよな。 こういうのを許容時間内に書けるスキルが必要だなーと思う今日この頃。

RESTベースの関数型言語ライブラリ

Tomcatハンドブック Amazonで見る を[Kahua]と見比べながら読んだり、ricollab Web Tech Blog » REST 入門(1 Web アプリケーションのアーキテクチャ)を読んだりした。 そうすると、なぜか頭の中で変な風に配線が繋がった。関数型言語でいうところの関数なら、1関数=1URLで表現できるんじゃないか。 RESTの基本はステートレスサーバ、つまりクライアントの状態をサーバーが管理せず、サーバが計算するために必要な全ての情報を毎回クライアントからもらう。 これって、関数型言語のimmutableな関数の考えかたじゃないか。 REST APIを数珠つなぎにすれば関数型プログラミングもできる。 RESTでSchemeの関数を実装した例 例えば、S式のリストをソートする関数は次のURLで実行できるとすれば、 http://func.example.com/lib/sort 次のようなコードが書けると面白いのでは? (use-rest-function "http://func.example.com/lib") (sort '(1 5 2 4 7 6 8 9...

関数型プログラミングの用語を使わずに関数型のメリットを説明する

この記事にはラムダ式というキーワード以外は関数型プログラミングの専門用語は出てこない。 第1回 ラムダ式 − @IT ##(thumb http://www.atmarkit.co.jp/fdotnet/csharp30/csharp30_01/csharp30_01_01.html) この記事で言いたいことは、『ラムダ式はリスト内包表記、高階関数と組み合せるとコードが驚くほど簡潔になる』という一言で表現できると思う。 ところで、川俣氏は関数型プログラミング言語でコードを書かれたことがあるんだろうか。 もし有るなら、確信犯的によく書かれた記事だと思う。 逆に、もし無いならかなりお気の毒な記事だと思う。さすがにプロのライターの方なので前者であると思うけど。 これくらい分かりやすい記事が書けないと仕事として成立しないんだなぁ。

見ため重要、マーケティング重要

この記事は必読。デベロッパーズ・サミット2008で講演するジョエル・スポルスキー氏の講演 すばらしいソフトを作るには、カリスマが講演 − @IT ##(thumb http://www.atmarkit.co.jp/news/200802/14/joel.html) 私が以前から思っている事を分かりやすく言ってくれている。 そう、『見ため重要、マーケティング重要』 技術が凄い、深いっていうだけでも分かる人には分かる。でも、分かる人は少ない。 そのソフトウェアはコミュニティーが濃いので価値は高いという考えかたもある。 でも、それだけではNo1にはなれない。ここではNo1とは知名度、ブランド、マインドシェアで見た場合のNo1の事を指す。 RubyとかRuby on Railsはそのへんうまくいっている例だと思う。 Rubyは楽しくプログラミングするというマーケティングがうまく成功している。 Ruby on Railsはかっこ良さと生産性の高さがうまく合わさって(必要以上に)うまくいっている。 [Sumibi.org]はそのへんマーケティングとかにはかなり頑張ったんだけど、[OldType]でも頑張ってみる価値アリだと思った。

最もタメになる「初心者用言語」はScheme!

これおもしろいね。 日記を書くはやみずさん:最もタメになる「初心者用言語」はScheme! 半分ネタ、半分本気な空気感がいい。 この部分は本気で共感出来るよ。 Schemeは勉強したがりなみんなの見方だね!

Dave Thomasの講演を観て思ったこと

この有名な講演を、Gaucheユーザから見て思うことを中心に。 プログラミング関連のブログをグルっとひと巡りしてみるとRubyを愛している人は多いことに気づくだろう。 この講演の中で、(Haskell and Ruby) or (Ocaml and Python) という話が出てくる。 真中が ‘or’ ではなく ‘and’ の人は少数で、これは何でだろうという話。 Dave Thomasは、これはペットの趣向で例えると犬派、猫派が有るようなものでRuby派、Python派が有ると説明している。 なんか分かる気がする。 さて、無理矢理ここにLisp系を入れてみよう。 『(Haskell and Ruby) or (Ocaml and Python) or (CommonLisp and Scheme)』(笑)...

flymakeでPHPのリアルタイム文法チェック

ブログではいつも関数型言語の記事ばっかり書いているが、実は仕事ではPHPを使うこともある。 言語は自分では選べないというのはITの世界ではもはや常識である。 言語選択の自由を唱えるRubyのまつもとさんでもその辺は御存知でしょう(笑) というわけで、少しでもPHPの開発効率の悪さを軽減すべく、flymake modoの設定をおこなってみた。

kahua.elに機能追加した

kahua.elの改善パッチを[Kahua]プロジェクトのメーリングリストに送った。 久々にオープンソースプロジェクトにコードをフィードバックした。 オープンソースを自分の作りたいものに利用させてもらっているのでもっと貢献しないとね。 もっと[Kahua]フレームワーク本体も改善したい所があるが、ちょっとレベル高いので手が出そうにない。 今一番欲しい機能は、高階タグでエラーが出た時にバックトレースを表示してくれる機能かな。 [Kahua]はまだまだデバッグの為の機能が不足している。

Haskellも面白そう

LiveCoding#5に参加して、実際にHaskellをコーディングしている所を見るとHaskellも面白そうに感じた。 コーディングをしてコンパイルが通ればほぼ動く、型安全なプログラミングというものを体験してみたいと思った。 私は実際にHaskellで実用的な物を作った事が無いのでまだ、Haskellの良さが分からないレベルだ。 日本語処理に問題があるとか、ライブラリが足りないとか処理系はまだまだこれからと聞いているが今からやっとくのもいいだろう。

LiveCoding#5に参加した

LiveCoding#5に参加した。参加と言ってもオーディエンスとしてだけど。 oxyさん凄かったね。C++のコード書くの早っ!『世界』を見れた気がする。 次回はLiveCoderになれる様にネタを考えておこう。 見栄えのするプログラムが作れた方が良いのでJavaScriptとかを練習しとくかな。 そうそう、こういうイベントで実際に手を動かして何かを作りだしている人達から創作の力をもらう事が多い。 関西でもこういうイベントを企画してくれた氏久さん(rubyneko)に感謝。

bashで高階関数のアイデア

bashで高階関数が使えたらどんだけプログラミングが楽になるか。最近そう考えるようになった。 欲しい高階関数は、こんな感じかな。

全生物の8割が昆虫、全プログラムコードの8割がループ

『全生物の8割が昆虫』これは事実かどうかは不明だが、よく言われる。 『全プログラムコードの8割がループ』は私が勝手に作った言葉だ。 最近、業務向けアプリケーションのコード(JavaとかPHP)を読むことが多い。 関数型スタイルのプログラミングに慣れた脳味噌で見るとほとんどがイテレータを回すループだと気づいた。 特に、コレクションやリストなどを操作するループが至るところにある。ループ、ループ、ループのオンパレード。 さらに、残念なことにイテレータのインスタンスやループ変数の宣言もループの数だけある。 全て高階関数に置き換えたらどんなに読みやすく簡潔になることか… 未来のC#、C++、Pythonが関数型スタイルをサポートする様だが、そうすれば業務向けコードの風景も様変わりしていくのだろうか。 個人的にはそう思う。 後はそれをどのくらい早めることができるか、かな。

RubyかHaskellのバイリンガルが迷うとき

sshi.Continual - 「同一のもの」をつかんだ気になれる記述ができるかどうか?より rubyとhaskellを双方手足のように扱える人にとって、ある問題を解くときにrubyで書くかhaskellで書くかを選ぶ基準を考えてみると思考実験になるだろうか? (略) 双方を使えるんだから、その人は双方の脳内モデルのスイッチはできる。ではその人はその問題をどちらで解こうとするのか? 個人的にはある問題、作ろうとしているプログラムを考えた時に、「あ、これはRubyのほうが書きやすそうだ」とか「あ、これはhaskellだと楽だな」とか思うことはある。 これを読んで思いだしたが、OnLisp読書会に出た時に、同様にRuybとHaskellのバイリンガルな人がけっこういた。 どちらも一部では流行の言語ではあるが、理由はそれだけでは無いだろう。 それぞれ、オブジェクト指向と関数型の脳内モデルをコードで表現するのには現存する言語では、おそらく一番理想に近い言語だと思う。 OCamlのユーザーとGaucheのユーザーは、それには同意せず、これ一つだけ覚えればOKだよというかも知れない。 私もそのGacuheユーザーの方だ。 もっとも、Gaucheでコードを書いている間も、局面次第で手続き型、オブジェクト指向型、関数型の脳内モデルをスイッチしているわけではあるが。 Ruby+Haskellの二刀流とGaucheの1刀流と最終的にどちらがパフォーマンスが良いのかに興味がある。 もっとも、人生は1度きりなので両方経験することはできないんだが。

RubyのリハビリでFizzBuzz問題

同僚からRubyの質問を受けることが多くなりました。 というわけで、RubyのリハビリがてらにFizzBuzz問題をやってみました。 ええ?Rubyに見えないって? Ruby on Railsやる人はこれくらいのコードは書けないといけないようです。^^ P.S. 関係ないですが、それにしてもtDiaryのソース貼りつけは落とし穴いっぱいですね。空行はダメなんですね。ちょっとハマりました。

Schemeのlambdaがようやく分かってきた

なんでもλを前に何度も読んだけど、自分のモノになってなかったようです。 最近、named letと継続渡しオンパレードなWiLiKiのパーサをいじることで、ようやく全部同じだという感覚が掴めました。 何なんでしょう。こういう質の高いチュートリアルを読んでも掴めなかった感覚が実際に自分でやってみると掴めるというのは。 なんでも経験ですね。 誰か『なんでも経験』ていう文章書いて下さいませ。

On Lisp読書会#1に参加した

On Lisp読書会#1に参加しました。 新しい隠れLisperの方は見つかりませんでしたが、これからLisperになりそうな方はいらっしゃいましたよ。個人的にはGauche本が出ればLisperが増えそうな予感です。(ちなみに、以前からLisperだった方は一人来られてました。) ところで、Extreme Readingはいいですね。一人で読むよりもいろいろな疑問点が挙がるので勉強になります。 今回の収穫は『複数言語を扱うメンバーの共通語(公用語?)はRubyが良い』こと、『Rubyの関数をfirst classにしたければ lambda で関数定義すればいい』こと、『関数型プログラミングのメリットは体験してみないと本の説明だけでは伝わりにくい』ことです。 特に、最後の件はSumibiの開発を例に補足させてもらいました。 興味のある方は是非次回から参加してみて下さい。もちろん、私は次回も参加する予定です。 追記: 中本さんがまとめをブログ記事にされています。ありがとうございます。本当に助かります。

On Lisp読書会#1に参加する予定

On Lisp読書会#1に参加します。日程は8月19日(日曜日)です。 関西の隠れLisperを探しに行くという別の目的もあります。 On Lispを持っているけど読めてない方は参加してみてはいかがでしょうか。

一つの言語を習得しても,やはり他の言語を学ぶのは難しい

一つの言語を習得しても,やはり他の言語を学ぶのは難しい - カレーなる辛口Javaな転職日記 言語を知らない人ほど「井の中の蛙」になりやすく,「他の言語は簡単にマス ターできる」なんて暴言を吐くのではないだろうか.

Lisperとそれ以外の人とが見ているものの違い

このイメージよく出来てます。 そうなんです。 まわりの non-Lipserと話しをするとみんなこんなイメージを持っているようです。括弧ばっかりやん。と。 でも、いつのまにか括弧は見えなくなります。(↑のイメージと同じように括弧が薄くなる感じ) なので、PythonとLispの両方をやっている私にはPythonのコードとLispのコードはかなり近い見た目に思えるのです。 LispをやったことないPythonプログラマの方がいらっしゃったら、この意見に賛成されるんでしょうか。その辺が知りたいです。

『郷に入れば郷に従え』とPredocのプレゼン

プログラミング 郷に入れば郷に従え EmacsLispをGaucheの方言にあわせたい。 単なる思いつきです。 例えば、map、 filter、string-catなどの関数は頻繁に使うので同じ関数名であればコードを書くときにストレスが無いだろうなと思います。 思うだけで実際にはやりません。 そんな変な方言で書いたソースコードはEmacsLispに慣れた人にとってはメリットが薄いだろうと思うからです。 あなたも、Perlっぽい記述ができるLispマクロを作ったり、Pascalっぽい構文をCプリプロセッサで定義する等、一度はやった事があるはずです。 しかし、そんなことをしなくてもある程度人間が慣れてしまえばどうってことは無くなります。 この場合は『郷に入れば郷に従え』という諺通り行動したほうがよさそうです。

Lispの真実

Lispの真実を読んで極端過ぎる意見だとは思いながら、Lispを一度も試したことが無いというのはあまりに残念なプログラミング人生だと思います。 Lispの真実 Lispを学ぶことはあなたの人生を変える。 あなたの脳はすごく大きくなり、そんなに大きくなるものだとは思わなかったほどになるだろう。 あなたは自分のアプリケーションをすべて、ほんの一握りのコードで書き換えるだろう。 社会はあなたを避けるようになる。あなたも社会を避けるようになる。 あなたは自分のまわりの物やまわりの人すべてに不満を感じるようになる。

驚愕、元LiperのPythonコード

Spelling Corrector このコードすごいですね。集合演算使いまくりですね。 オブジェクト指向でさえないし… 私の普段のPythonコードも徐々にこれに近づいているんですけど。 リスト内包表記の嵐です。 これ以上lambdaとか内包表記を使いすぎるとチームメンバに読んでもらえないコードが量産されそうです。 やりすぎに気を付けよう。

バベル案内

バベル案内について。 このエッセイは、C、C++、Lisp、Java、Perl、Ruby、Pythonの言語の紹介になっています。 多少乱暴だけど、言っていることは説得力があり概ね賛同できます。

Joyベースのシェルスクリプトなんかどう?

再びOverview of the language JOY関連のチュートリアルやFAQを読み直しました。 今度はちゃんと理解できたと思います。 さて、以前これを『なでしこ』の様に日本語プログラミングに応用したら良いんじゃないかと書きましたが、撤回します。 日本語プログラミング言語の想定ユーザーとしては、『これからプログラミングを覚えたいという人』に設定するのが良いと思いますが、Joyはそういう人たちにとって難易度高すぎです。 関数型言語として設定されており、手続き型言語でおなじみのforループなどがなくmapやfilterというコンビネーターを使うことが前提となっています。 Joyの構文を日本語の文脈にうまく当てはめたとしても、プログラミングの初学者に向けて易しい解説をする自信はありません。^_^; むしろ、もっとハッカー向けの用途に適用したほうがいいと感じました。(ハッカーには日本語プログラミングは必要無さそうですので。日本語変換するのめんどくさそうとか言いそう。) 例えば、shellスクリプトなんかに適用すると良いのではないかと思います。 下記は、Joyで未定義の関数を外部コマンドから探して実行することを想定したコードになっています。

Gaucheをもっと気軽に使おう

Matzさんところ、Danさんところの関連エントリーを読んで。 私も、Lisp系方言の一つSchemeでプログラミングをする『にわかな奴』です。さらに、Common Lispに至っては使ったことがありません。 SchemeとEmacs LispばっかりなのでLisp選民ではなく、落ちこぼれに分類されると思われます。 でも、こう感じてしまうLispという言語はなんなんでしょうね。 皆が皆、ジェダイマスターになる必要はないのです。( ジェダイマスターで無くても作れるSumibi.org。) そういえば、Schemeの人達とチャットをしていると『にわか』な人はあまりいません。 私の様に読解いやな法則: にわかな奴ほど語りたがるに該当する人にもっと頻繁に出会えてもいいのになぁ。

RubyのまつもとさんのPodCastingを聞く

まつもとさんのプレゼンのPodCastingを聞きました。 英語ですが大変わかりやすいプレゼンですね。音声だけでも会場の笑い声からどんなスライドが出ているのかだいたいわかるのが不思議です。 ここではこんなPerlコードが表示されているんだろうなとか。 このプレゼンではどんな哲学でもって言語をデザインすれば良いかが語られています。 プログラミング言語のユーザビリティーとは、という内容ですが、言語のデザイン以外にも使える本質的な話なので一度聞いてみてはいかがでしょうか。

Schemeが流行ってほしいかどうか

最近LingrというチャットサイトでGaucheとScheme言語の話題に参加しています。 そこで出た話なのですが、『Schemeがもっと流行って欲しいか?』という質問に対して、そこにいた人達は『そこそこ流行ってほしいけどRubyほどにははやって欲しくないなぁ』という意見でした。 理由としては、みんながScheme使ってしまうと、今Schemeを使っている開発スピードのアドバンテージが無くなってしまうからです。 Paul Grahamも言っていますが([1]|[2])、わざとLisp(Scheme含む)を使っている事を内緒にしてアドバンテージを維持しつづける。というのが戦略ですね。 ここで書いても私に影響力無いので問題ないですよね。^_^;

GaucheFestで時計アプリを作る

Gauche関連のハックをする集まりであるGaucheFestに参加しました。 最近GaucheFestではLingrというWebブラウザ上で動くチャットを使うようになりました。 というわけで、Lingr上で使用する時計アプリを作っています。 チャットルームに来る人は住んでいる国が違うことが多く、相手が朝なのか夜なのか、はたまたもう寝ないといけない時間なのか分かりません。 そこで、同時に複数のタイムゾーンの時間が表示される時計を作っています。 この時計は画像になっており、Lingrの発言欄に貼りつけることができます。 また、内部はCGIになっており、貼りつけた時刻だけでなく現在時刻も同時に表示されます。 過去ログをたどって行った時に、複数のタイムゾーンでその発言時刻が分かるというわけです。 ゆっくり作っているので、実際に使えるようになるのは来週位の予定です。おたのしみに。 開発中の時計の画像も貼っておきます。(ここに貼った時計画像はCGIではないので時刻が変化しません。悪からず。^_^;) 開発中のTzWatchの画面

Rubyの生産性の高さはどこまで本当か?

私も何度も生産性の議論を書いていますが、生産性の議論は本当に難しいと思います。 このエントリーでも、やっぱり純粋に自由度と生産性と気持ちよさを考えると最後には、S式macroとMOP最強論に吸いこまれていますね。 やっぱりJavaの発明者から言語界のブラックホールといわれるだけあるLispです。 もし、括弧に対するアレルギーが無いのだったら、Lisp系言語は最高ですよ。 例えば、Gaucheを使えば、メタプログラミングは当然できますし、ブロック構文とソックリのイディオムを提供する関数も標準で沢山あります。 (with-input-from-file ‘filename’ …)など。 細かい話は置いておくとして、もしLisp系言語のパワーそのままで、ソースコードの外観もPythonやRuby程度の普通っぽさを持っていたら、もうちょっと普及の方向に動くと思います。 誰か作りませんか?GaucheベースのRubyスキンとか。 Schemeハッカーは言語の拡張にいそしんで、普通のハッカーは、PythonとかRuby構文でプログラミングを行うという分業体制ができます。 これが将来ほとんどの言語が辿り着く姿なんじゃないかと予言します。外れると思いますが。

作りたい物がいっぱいあって困る

最近、作りたい物があって困ります。 プログラミングの練習で作ってみたい物から、自分が毎日使いたいツールまで色々です。 例えば、今練習で作ってみたい物はWikiですね。 日本のWikiだけでも日本発の wiki クローンリスト、日本発の wiki クローンリスト2の様にたくさん有るのにまだ作るんですか、と思われるかも知れません。 でも、Wikiはプログラミングの練習には良い題材だと思います。 簡単にできるし、あたらしいアイデアを短時間で試しやすいのでは無いかと思います。 『どれだけ短いコードで書けるか』とか『どれだけ読みやすく書けるか』とかにも挑戦してみたくなります。 そう考えると、My言語も沢山有るけど、MyWikiもたくさんある理由が分かりますね。

Pythonとschemeの役割分担

Pythonは仕事でscheme(Gauche)はプライベートでという役割分担になっています。 Red Hat Enterpriseに最初から入っている、言語仕様が安定している、という理由でPythonを仕事で使っています。 Rubyもいいのですが、それらの条件をクリアできません。 また、プライベートでscheme(Gauche)を使っている身としては、RubyよりもPythonの方がschemeに似ているという感じがあってスイッチしやすいです。 schemeの小括弧を全て取ったらPythonに見えなくもないような…

LL Ringの感想など

LL Ringに参加しました。LL系のイベント参加は初めてです。 私は発表者で参加したので、ゆっくり見れないプレゼンもあったのですが、 全体的にプレゼンと発表内容のクオリティーが高く、本当に有意義な一日となりました。 また、普段IRC等でしか出会えない人とお話しできて楽しかったです。 全部ちゃんと見れていませんので、見れたところだけ感想を書きます。 ちなみに、今はやりのWebアプリケーションフレームワークにひっかけてAsahi SUPER ‘DRY’を飲んでいます。^_^;

色々見たけどやっぱりGauche

Perl/Ruby/Python/Guile/Gaucheをやっみたけど、一番書きやすいのはやっぱりGaucheです。 でも、さすがに仕事では自分一人でコードを書くわけにはいかないのでLisp系言語処理系であるGaucheは無しになってしまいます。本当にもったいないです。 プライベートなプログラミングは今の所はGauche一本になっていますが、このまま行く積もりです。 もっとSchemeの定石を増やして美しいコードを書く為にも、そろそろGaucheのコミュニティーにコード還元しないとなーと思っています。 DBD SQLiteくらいから始めるかな。

温故知新の newLisp

newLispという言語を見つけました。 newLispというぐらいなので、新しいのかと思ったら、1991年からある言語なのですね。 かといって、停滞しているわけでもなく、最近のLisp系言語の盛りあがりも手伝ってか継続的に新しいバージョンがリリースされています。 で、どこが他のLispと違うのでしょう。ざっと見た感じでは、Common LispやScehemeの仕様を簡略化したような感じです。 実際にプログラミングしてみないとわかりませんが、簡略化した部分で私が困る様な所は無さそうです。 Gaucheと比べると、ライブラリの豊富さと日本語サポートの面でGaucheに軍配が上がるので、乗りかえる事はないですが。 少々制限が増えても、言語をシンプルにしようとする方向性は賛成です。ただ、そのバランスは難しいですね。 一応、『何が違うの?』という部分を引用しておきます。

EmacsのSchemeモードを拡張する quack.el

quack.elをEmacsに追加すると、lambdaがλ記号で表示されます。 他にも、キーワードの色付けが標準よりも見易くなります。(小括弧が赤、文字列や#fなどが緑、コメントが水色等) Gaucheプログラマの皆さん、試してみましょう。なかなかいいですよ。

Pythonをちょっと試す

Pythonをちょっとだけ使ってみています。 ファーストインプレッションとしてはBetter Lispと言って良いと思います。そして、書きやすさはRubyと大差ない気がします。 関数型言語風味な所は沢山ありますが、完全な関数型言語ではないので幾つか気に入らない所があります。 一つ目は、reutrnを書かないと行けない所です。関数の最後の評価値がreturnの値になればよいのにと思います。 二つ目は、lambda の関数本体に式が1つしか書けない所です。 どちらも致命的という程ではありません。慣れれば普通になるのだと思います。 また、Python食わず嫌いの人の議論の的になりやすいインデントによるブロックの表現は意外といいです。

Cleanが面白い

最近純粋関数型言語を順番に見てまわっています。 Cleanという言語も面白いですね。 純粋遅延関数型言語Concurrent Clean Haskellと同じで、キーワードは『参照透明性』と『遅延評価』でしょうか。 インデントが構文上の意味を持つというのも同じですね。 まだちゃんと見ていませんが、Haskellと共通点が多そうです。逆にどこが違うのでしょうか。

高速CPUの使い道

Paul Grahamのこのエッセーを読んだ時には、次の様な富豪な言語設計は大分先にならないと受入れられないだろうと思っていました。

Joyが面白そう

大昔にstackベースの言語でなんか面白そうな言語が作れるのではないかと妄想したことがありました。 最近のForth言語関連でなんか動きは無いのかと調べていたら、Joyが見付かりました。 ぱっと見た限りでは、stackベースの言語Forthに強く影響を受けているみたいです。 しかも関数型プログラミングができると来たもんだ。 schemeやperlでおなじみのmap関数も書けるという… 僕が瞬間に思いついたアイデアとしてはこのJoyという言語の特徴をひまわりのように日本語プログラムに応用するというものです。 どうです?題材としては、楽しそうでしょ? これをHaskellでちょいちょいっと作ってみるというのも楽しいかも知れません。 僕にはそんな能力はありませんので誰かトライしてみてください。但し、クロスプラットフォームで動くようにしといてくださいね。

言語の学習コストと生産性

最近色んなブログでPerlの学習コストの話題が持ち上がっています。 ( Danさんの所 を出発点にしてもらえらば沢山たどれます。) 僕は、Perlの学習コストは高いと思っている派です。そして、もうひとつ学習コストが高いと思っている言語が有ります。Schemeです。 これだけでは何のコストか良く分からないので、もうちょっと突っ込んで書いてみます。 Perlのコスト高の原因は色んな書きかたが用意されていて、その量に圧倒されてしまうという所にあると思います。モジュールを使って言語機能を拡張できます。 例えば、このエントリーを読むと、覚えることが多いせいでPerl5以降のperlの学習コストが、かなり高いと感じられるでしょう。 逆に、Schemeのコスト高の原因はマクロなどを使って、ドメインスペシフィックな記法が編み出せてしまうので、他人のコードを読む時のコストが高いのではないかと思います。 それぞれ、学習コストは高いですがコスト高の原因が違います。 しかし、どちらも言語の学習コストは高いですが、一度深くその言語を使いこなせると、そのぶん生産性が何倍にもなって返ってくるという気がします。 同じ処理を書いてもより短いコードで多くの事が表現できる。 生産性のためなら学習コストは厭わない。それがプログラマーというものです。 そして、さらなる生産性を求めてHaskellへの興味が湧いてきています。

何でもGauche

Gaucheという処理系は使えます。 僕のプライベートなプログラミングは全てGaucheになってきました。まさに、なんでもGaucheです。 何がそんなに良いのか。 今日はその辺りを書いてみたいと思います。 それでは、箇条書きで。

S式暗号

もし、貴方の書いたソフトウェアをオープンソースにしたいが、ソースコードを暗号化したいという複雑な要求があったとします。 僕はその解決方法を知っています。それはS式で書くことです。 そうしておけば、JavaやPHPしか分からない人にとっては、強力な暗号となります。 その人たちはあまりの小括弧の多さに『うへぇーダメだー』となります。 …というのは冗談で、S式は本当に開発効率が高い記述言語です。 最近、僕はS式でプログラミングすることが多くなってきました。 SumibiもR@eply.orgもS式で書かれています。 でも、S式でオープンソースソフトウェアを公開すると、読める人が少ないせいか協力者を得ることが難しくなります。 近年少しづつ、Lisp系言語への回帰傾向がいたるところで始まっているようなので、それも改善されてくるのかも知れません。 というか、そうなればいいなぁー。^_^;

Lisp プログラマのための Python 入門

Lisp プログラマのための Python 入門 にわか Schemer かつ Emacs Lisper なのですが、この記事を読んで、Pythonもやってみたくなりました。最近、趣味プログラミングではGauche ばかり使うようになったんですが、仕事ではPHPを使うことが増えていきそうな感じです。最近、Perl,Ruby,Gauche,Java を順に切替えて使っていくとそれぞれの良さが分かって来て、TPOで言語を選択できるようになってきました。また、いろんな人がいろんな言語を選択するので仕方なく全ての言語を習得する必要があった感じもあります。個の程度の数の言語であれば、混乱無く使えますがこれ以上増えると大変似なるので、Python をやるのはもうちょっとしてからかな。

宣言型言語

C言語やPerlなどが手続き型言語だと定義すると、SQLは宣言型言語だといえると思う。宣言型言語は、適用できる範囲が限定される代わりに、いざ目的にぴったりマッチした場合は少ない記述量でものすごい仕事をする。最近SQLを使うことがぼちぼち出てきてそう感じる。ちなみに、もちろん僕の好きなLisp/Schemeも宣言型言語の側面が大きい(関数型言語の特徴でもあるかも)。再起的定義をたくさん使ったプログラムはもろ宣言的だ。反対に、手続き型的な記述も可能だ。ちゅうわけで、今のところSQLとSchemeでWebプログラミングを行うとすごく強力なコードが短く書けるので気に入っている。

52件の記事があります。