プロダクティブ・プログラマ -プログラマのための生産性向上術

『プロダクティブ・プログラマ -プログラマのための生産性向上術』を読了。

本書のテーマはプログラマの生産性向上だ。どうすれば向上するのだろう?道具の習熟度を上げて適切に使いこなせば良い。これが本書の結論だ。それを個別の、例えばショートカットのようなTIPSやら、YAGNIオッカムの剃刀などの考え方やら、手を変え品を変え説明することで示している。

続きを読む

C言語で似非Java風味の例外フロー

Javaにはtry〜catch〜finallyの例外フローが存在するけどC言語には無い。でも実現することはできる。こんな感じで使える。

#include <stdio.h>
#include <stdlib.h>

#include "exception.h"         /* 例外フローの定義 */

/* 例外を投げる関数 */
void sub1(EXCEPTION *e) {
  printf("sub1 start\n");      /* 表示される */
  {
    int *t = malloc(sizeof(int));
    if (t == NULL) exit(1);
    *t = 100;
    THROW(*e, t);              /* Javaのthrow()に対応 */
  }
  printf("sub1 end\n");        /* 表示されない */
}

int main() {
  EXCEPTION e;

  TRY_BEGIN(e) {               /* Javaのtryに対応 */
    sub1(&e);
  }
  CATCH(e, int *a) {           /* Javaのcatch()に対応 */
    printf("catch %d\n", *a);  /* 100と表示される */
    free(a);
  }
  FINALLY {                    /* Javaのfinally()に対応 */
    printf("finally\n");       /* 表示される */
  }
  TRY_END                      /* 必ず必要 */

  return 0;
}

コメントのとおりJavaの例外フローと対応付けられる。これらの構文は次のようにsetjmp/longjmpをマクロで隠す形で定義している。

続きを読む

プログラミングClojure

やっと『プログラミングClojureを読了した。

本書は薄いし分かり易い。入門や概要を掴むにはもってこい。訳も読みやすいし。

ちなみにClojureとは、Java仮想マシン(JVM)上で動作するLisp方言のことである。Lispなので当然S式、つまりカッコだらけ。見た目はとっつきにくいけど強力なマクロが使える。そして、普通のLispとは違って基本は副作用を許さない。だから並行プログラミングがとても楽にできる。もちろんやろうと思えば副作用も取り入れられるしJavaのライブラリを簡単に扱うこともできる。そして、副作用と平行プログラミングを併用するためにトランザクションの考え方を取り入れた方法が用意されている。

続きを読む

最初のプログラムはハローワールド?

プログラム言語で最初のプログラムと言えばハローワールド。
もはや定番ですが分かりやすいとは言えない。

例えばプログラミング言語Cでは最初に書くべきプログラムとして次の「ハローワールドを印字する」コードを掲載している。

#include <stdio.h>

main()
{
   printf("hello, world\n");
}

#include<>??、printf()??
雰囲気をつかむためには良いと思うけど前提知識がないと面食らう。

続きを読む

Perlのサブルーチン定義を簡素化

Perlはサブルーチンの引数を明示的に取り出さなくてはならない。
たとえば、数nを+1するサブルーチンの定義は次のようになる。

# 定義
sub inc {
  my ($n) = @_;
  $n + 1;
}

# 呼び出し
print inc(255) , "\n";   # 256と表示

めんどくさい。Rubyっぽくしたい。

# 定義
sub inc2 { |$n| $n + 1; }

# 呼び出し
print inc2(255) , "\n";  # 256と表示
続きを読む

開会の挨拶

問題 誰も序文なんか読まない。
解答 序文を第1章と読んだらいい。
解答によって作られた新問題 第1章はたいくつだ。
解答 第1章なんかやめて、第2章を第1章と読んだらいい。


ライト、ついてますか—問題発見の人間学』より
ドナルド・C・ゴース (著), G.M.ワインバーグ (著), 木村 泉 (翻訳)

本日からブログはじめます。
はじめるにあたって何か気の利いたことを書こうと考えましたが思いつきません。

続きを読む