アカウント名:
パスワード:
pledge は流行ると思いますか?
まず pledge がどういうものかを説明します。プログラムって、最初は設定ファイルを読んだり一時ファイルを開いたりするけど、その後メインループに入ったら権限を殆ど必要としないことが多いですよね。だから、 コマンドラインオプション等に応じて [openbsd.org] メインループ直前で権限を落とすという仕組みなんです。
だから最初は tame (調教する [openbsd.org]) という名前の関数でした。獰猛な野獣 (いったん任意のコマンド実行を許す脆弱性があると何でもできちゃう) を手なずける (脆弱性があっても殆どのシステムコールが実行不可能) という感じですね。
現在では主語が変
> tame(TAME_STDIO | TAME_CMSG | TAME_GETPW | TAME_PROC | TAME_DNS, NULL);>というインターフェースにするのが普通の発想じゃないかと思うんですが、この pledge は> tame("stdio cmsg getpw proc dns", NULL);
後者の方が,今風のAPIだと思います
理由は3つ
1) 後者のほうが短い(≒可読性も高い)
古典的なC言語だとtame(TAME_STDIO | TAME_CMSG | TAME_GETPW | TAME_PROC | TAME_DNS, NULL);はよく見かける記述ですが,これ冗長だと思いませんか?
2) 今時のCPUは高速なので,文字列処理は大したオーバヘッドにならない
特に tame() は頻繁に実行する処理で
文字列の方が拡張性が高いのはわかるんですが、保守性も高いんでしょうか?
プリコンパイルやリンクでチェックやリンクできずにエラーになるならいいと思うんですけど、実行時にしかエラーがわからなさそうなものってどうにも抵抗が…(javaや.NETのリフレクションで文字列指定するのとかも抵抗があるんですよね。あっちはIDEのリファクタリング機能の対象外になるのも敬遠したくなる所以ですが)。
優秀なIDEがあればコードtypoなんかは警告だしてくれそうですが、それもあるかどうか不明ですし。実際に作る時はマクロでもつかってそのあたりの不安を埋めてくんでしょうかね?
# 最近jsばかり書いてるせいか、どうせ文字列つかうなら文字列テーブルにすればいいのにとも。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
pledge (スコア:5, 興味深い)
pledge は流行ると思いますか?
まず pledge がどういうものかを説明します。
プログラムって、最初は設定ファイルを読んだり一時ファイルを開いたりするけど、
その後メインループに入ったら権限を殆ど必要としないことが多いですよね。
だから、 コマンドラインオプション等に応じて [openbsd.org]
メインループ直前で権限を落とすという仕組みなんです。
だから最初は tame (調教する [openbsd.org]) という名前の関数でした。
獰猛な野獣 (いったん任意のコマンド実行を許す脆弱性があると何でもできちゃう) を
手なずける (脆弱性があっても殆どのシステムコールが実行不可能) という感じですね。
現在では主語が変
Re: (スコア:1)
> tame(TAME_STDIO | TAME_CMSG | TAME_GETPW | TAME_PROC | TAME_DNS, NULL);
>というインターフェースにするのが普通の発想じゃないかと思うんですが、この pledge は
> tame("stdio cmsg getpw proc dns", NULL);
後者の方が,今風のAPIだと思います
理由は3つ
1) 後者のほうが短い(≒可読性も高い)
古典的なC言語だと
tame(TAME_STDIO | TAME_CMSG | TAME_GETPW | TAME_PROC | TAME_DNS, NULL);
はよく見かける記述ですが,これ冗長だと思いませんか?
2) 今時のCPUは高速なので,文字列処理は大したオーバヘッドにならない
特に tame() は頻繁に実行する処理で
Re:pledge (スコア:0)
文字列の方が拡張性が高いのはわかるんですが、保守性も高いんでしょうか?
プリコンパイルやリンクでチェックやリンクできずにエラーになるならいいと思うんですけど、
実行時にしかエラーがわからなさそうなものってどうにも抵抗が…
(javaや.NETのリフレクションで文字列指定するのとかも抵抗があるんですよね。あっちはIDEのリファクタリング機能の対象外になるのも敬遠したくなる所以ですが)。
優秀なIDEがあればコードtypoなんかは警告だしてくれそうですが、それもあるかどうか不明ですし。
実際に作る時はマクロでもつかってそのあたりの不安を埋めてくんでしょうかね?
# 最近jsばかり書いてるせいか、どうせ文字列つかうなら文字列テーブルにすればいいのにとも。