タグ

C-langに関するnozomのブックマーク (19)

  • バベル案内

    Steve Yegge / 青木靖 訳 2004年9月 これは駆け足の言語案内だ — Amazon Developers Journalのために今月書いていたのだが、どうもこれを見苦しくないようにする方法を見つけられなかった・・・。 ひとつには、私はどうも粗野で口汚くなりがちで、オフィシャルな趣のあるAmazonの出版物に載せるのは不適切に思えた。それでかわりに誰も読まない自分のブログに押し込めてしまうことにした。読んでるのはあなたくらいのものだよ。どうも! もうひとつ言うと、これは当に書きかけのものであり、そこかしこの断片を集めたものでしかない。全然磨き上げられていない。これもブログエントリにする理由になっている。ブログなら別に良質である必要も完全である必要もない。単に私が今日考えたことというだけのものだ。ではお楽しみを! この駆け足の案内では、C、C++、Lisp、JavaPerl

  • RAIIもどき in C __attribute__((cleanup(fn)))

    gccの__attribute__((cleanup(fn))) が便利すぎる件について。 C++でコードを書くときは、RAIIとか呼ばれているイディオムを使えば、ご存じの通り、ロックしたmutexを手動で開放する必要もないですし、newしたオブジェクトを手動でdeleteする必要もないです。 void Baz::boo() const { boost::mutex::scoped_lock lock(mutex); // ... return; // lock変数のデストラクタで自動開放。手動での開放不要 }でもC言語だと、当然ながら手動で開放しないといけません。複数箇所でreturnしている場合など、タイプが面倒臭すぎ。 int foo() { pthread_mutex_lock(&mutex); // ... if (hogehoge) { pthread_mutex_unlock

    RAIIもどき in C __attribute__((cleanup(fn)))
  • mainを一度も呼ばないばかりか蹂躙する - memologue

    shinhさんの「ふとイヤなコードを思いつきました」にインスパイヤされてみました。 % cat iyana.c #include <stdio.h> #include <stdlib.h> int main; __attribute__((constructor, destructor)) static void x() { if (main) puts("world!"); else exit(main = puts("hello")); } % gcc -Wall iyana.c iyana.c:4: warning: ‘main’ is usually a function % ./a.out hello world!意味はありません。っていうかこの警告ははじめて見たわ。教えてくれなくても存じていましてよ。 (追記) shinhさんの8/29の日記にさらに凄いのが。 トラックバックし

    mainを一度も呼ばないばかりか蹂躙する - memologue
  • Part2 C/C の疑問にまとめてお答え - C/C は永久に不滅です!:ITpro

    Part2では,「そもそもC/C++についてよくわかっていません」という方のために,C/C++言語に関する素朴な疑問をQ&A形式でお答えします。“今さら人には聞けないなぁ”というような疑問も取り上げていますので,初心者の方でも安心して読んでください。 C/C++の最大の魅力は,コンピュータでできることなら,ほとんどどんな種類のプログラムでも比較的簡単に書けることです。 CがもともとOSを記述するために作られたことは特集1でも触れました。OSの役割をおおざっぱにいうと,ハードウエアの機能を使いやすい形でアプリケーション・ソフトに提供することです。アプリケーション・ソフトは基的にOSが提供する機能を利用して動くプログラムですから,OSを作れる言語であれば,事実上どんなアプリケーションでも作れることになります。 パソコンに関していえば,Cの処理系がいくつかのベンダーからコンパイラとして提供され

    Part2 C/C の疑問にまとめてお答え - C/C は永久に不滅です!:ITpro
  • clmemo@aka: Emacs で C 言語プログラミングを始める人へのイントロダクション

    Emacs エディターで C 言語のプログラムを書く人向けに、入門用の解説がないように思う。そこで、知っておくと便利な機能をまとめてみた。 読者は、Emacs の操作とカスタマイズが最低限できる人を対象にしている。つまり、C-x C-f といったショートカット・キーが使えて、.emacs の設定ファイルがいじれる人。各機能について、基的な使い方とその効果、あと最低限の設定について書き出した。 目次 ソースの色付け インデント アラインメント コメント info マニュアル スペル・チェック タグ・ジャンプ 関数名の補完入力 コンパイルとエラー行ジャンプ ChangeLog ファイル 1. ソースの色付け Emacs は、C 言語のソース・ファイルを解析して、if や for といったキーワードに対して、自動で色を付ける。 色を付けることでソースにメリハリが生まれ、可読性が上がる。また、ス

    clmemo@aka: Emacs で C 言語プログラミングを始める人へのイントロダクション
  • プログラミング言語ヒエラルキー:Geekなぺーじ

    「Programmer Hierarchy」という面白いネタがありました。 結構笑えました。 一部日語化してみました。 図中の矢印は「相手よりも上であるとみなしている」事を示しているそうです。 もともとは「Geek Hierarchy」というオタク同士が「俺はこいつらよりオタクではない」と思いあっているというネタがあって、それのプログラマ版のようです。 ちょっとアメリカ文化ですが、元ネタのオタク版も面白いのでもしよろしければご覧下さい。 おまけ:プログラミング/技術関連お笑いネタ プログラマレベル 人生の全てはTCP/IPに学んだ いいから殺せ。後はこっちでなんとかするから 技術系シモネタ

  • 研究(用ソフトウェア)紹介: CIL - sumiiのブログ

    MinCamlや日経ITpro連載のためか、いろいろなところで「関数型言語の研究者」「OCamlの人」と言われて、それはそれで非常に光栄なのですが、僕やK・S研究室は別に「関数型言語やOCamlの研究」をしているわけではありません*1。むしろ、並行言語や命令型言語など、関数型言語以外の話のほうが多いです。たとえば、わかりやすそうなところでは「Fail-Safe CをJavaに変換」あるいは「Linuxカーネルのソースコード検証」なんてプロジェクトもやっています。 で、一般にC言語のプログラムをコンパイル/変換/解析/最適化等したかったら、まずはparseしないといけないわけですが、これが意外と面倒です。しかも、来の研究(コンパイル/変換/解析/最適化等)とはあまり関係のない苦労が必要とされます。それはそれで勉強になるのですが、そんな物理的・精神的:-)余裕がない場合は、CCuredの作者

    研究(用ソフトウェア)紹介: CIL - sumiiのブログ
  • 404 Blog Not Found:C - Judyでたらい回し

    2006年12月07日05:00 カテゴリLightweight Languages C - Judyでたらい回し フィボナッチ関数やたらい回し関数のような、自分を複数回呼ぶような再帰関数は、memoizeするかしないかで結果が極度に変わってくるが、これをCでやってみようという企画。 Judy Arrays Web Page Judy is a C library that provides a state-of-the-art core technology that implements a sparse dynamic array. Matzにっき(2006-06-28)とても高速なテーブル。十分高速なので、疎配列やハッシュとして使える。Cでmemoizeというのは、自分でhashを実装したりしなくてはならず大変だったが、このJudyがあれば実に簡単だ。まずは結果を見てもらおう。 %

    404 Blog Not Found:C - Judyでたらい回し
    nozom
    nozom 2006/12/07
  • C言語 - lethevert is a programmer

    [id:lethevert:20061129:p2] 言葉が足らなかったような気がするので補足。 たとえば、Cleanのコンパイラは、フロントエンドのCleanCompilerはCleanで、バックエンドのCodeGeneratorはCで書かれているのですが、これは技術的な制約のためではないと思うのです。というのは、すべてCleanでかかれていることを想像すると、深刻な問題があるのです。 それはつまり、どうやって新しいマシンにインストールするか、ということです。Windowsのように、ネイティブコードの移植性の高いプラットフォームならば、適切な環境でコンパイルしたネイティブコードを配布すれば十分ですが、そうでない環境では、CleanのコンパイラをコンパイルするためにCleanのコンパイラが必要という問題を解決しないといけないです。 CodeGeneratorがCで書かれている事で、その問題

    C言語 - lethevert is a programmer
    nozom
    nozom 2006/12/01
  • プログラマがC言語にこだわるべきでない0番目の理由 by Inquisitor

    新しいプログラミング言語を作りたいと思ったら、そのプロトタイプはCのような低級言語ではなく、高級言語で実装したほうがいいのではないでしょうか。もちろん実行時のパフォーマンスなどのために、最終的にC言語で実装するということはあるかもしれませんが(相対的な話ではありますが、C言語を低級あるいは低水準と呼ぶのが許せないという人は、K&Rの1ページ目を参照してください。日語訳では「はじめに」のp.2です。)。 Cは比較的“低水準”の言語である。この性格付けは非難の意味を込めているのではない。これは単に、Cが普通のコンビュータで扱う種類の、すなわち文字、数、アドレスを扱えるようになっているという意味である。もちろん、これらのデータを組み合わせて、現実の機械で実行されるような普通の算術論理演算でいろいろな処理を行なうことができる。(p. 2) 以下、題 プログラマがC言語を学ぶべきたった一つの理由

  • C言語 - lethevert is a programmer

    http://blog.livedoor.jp/dankogai/archives/50700240.html なんか、ひどく勘違いしているような・・・ - Cleanのライブラリを書くときに、ブリッジ部分をCで書いていますが、移植性のためです。 大抵のOSならCコンパイラがあることが期待できることと、ハードウェアのアーキテクチャをある程度捨象できることと、マクロでプラットフォームを区別したコードを書けることが、移植性を高めているのかな。

    C言語 - lethevert is a programmer
    nozom
    nozom 2006/11/30
  • 404 Blog Not Found:プログラマがC言語を学ぶべきたった一つの理由

    2006年11月28日12:15 カテゴリLightweight LanguagesOpen Source プログラマがC言語を学ぶべきたった一つの理由 あれ?一番大事な奴が抜けている。 The C Programmming Lanugage K&R Geekなぺーじ:プログラマがC言語を学ぶべき10の理由 「Ten reasons why every programmer should learn C」という記事がありました。 個人的な感想ですが、何と無く言いたい事はわかる気がしました。 ただ、多少誇張している(言い過ぎ/嘘)かなと思いました。 あと、恐らくLinuxとオープンソースなどを念頭において書いているんだろうなと思いました。 [中略] ちょっと言いすぎ感も漂う内容でしたが、面白かったので訳してみました。 0) So you can write your programming

    404 Blog Not Found:プログラマがC言語を学ぶべきたった一つの理由
    nozom
    nozom 2006/11/29
    Binary重要と
  • プログラマがC言語を学ぶべき10の理由:Geekなぺーじ

    「Ten reasons why every programmer should learn C」という記事がありました。 個人的な感想ですが、何と無く言いたい事はわかる気がしました。 ただ、多少誇張している(言い過ぎ/嘘)かなと思いました。 あと、恐らくLinuxとオープンソースなどを念頭において書いているんだろうなと思いました。 ちょっと言いすぎ感も漂う内容でしたが、面白かったので訳してみました。 誤訳や勘違いなどが入っている可能性があるので、詳細は元記事をご覧下さい。 以下訳です。 全てのプログラマはC言語を学ぶべきである。 C言語を学ぶ事により得られる利点は無視できないほど大きい。 C言語を学ぶ事により、仕事の機会に恵まれるだけではなく、コンピュータへの理解が深まる。 1) C言語は、C++Javaと比べて低レベル(low level)な言語である。 低レベル言語を使ってプログラ

  • J - 関数型言語はC言語よりも高速

    23 やべーやる気出ねー。 一週間ぐらい放置してたらやる気出るかと思ってたんだけど、全然何もしてないのだった。 というわけで、リハビリがてらなんか書こう。関数型言語がC言語よりも高速だという話。 http://d.hatena.ne.jp/w_o/20050924#p2 ここらへんの話の関連。C言語では、操作が、「メモリを変更する」という具体的なものになってしまうので、最適化が難しいという話。 次のコードを考えよう。 struct stack { char *buf; int pos; }; void push( struct stack *stk, char v ) { stk->buf[stk->pos] = v; ++stk->pos; } void pop( struct stack *stk ) { --stk->pos; }; void nop( struct stack *s

    J - 関数型言語はC言語よりも高速
    nozom
    nozom 2006/11/21
    “まとめ:C言語と関数型言語では、関数型言語のほうが最適化できるけど、理論的に可能であるというのは、実際に可能かどうかとは話が別。”あらら
  • ソフトウェア特論 講義資料 C言語によるLisp処理系

    Next: 1 Lisp処理系: Xlisp Up: Software IV Top ソフトウェア特論 講義資料 C言語によるLisp処理系 稲葉 雅幸 ここでは,LispのインタプリタをC言語で記述すること を紹介します.Lispの処理系は,read-eval-printを 繰り返すものですが,C言語でread, eval, print のそれぞれがどのようになるかを見ます. そして,Lispの処理系においては,データをreadした時, データを評価して計算中に新たにデータを生成したり, 新しいデータを結果として返したりします. 通常の計算機内で直線状に並んだメモリデータで, データの配列や長さが自由になるリストデータをどのように 表現するかが重要になります.そして,いらなくなった データがあった場合に,どのようにそのメモリデータを 再利用するのかについての仕組みを決める必要があります.

    nozom
    nozom 2006/10/13
    あとで読む
  • J (2006-08-08)堕落したCプログラマのレベル10

    「偽札対応済み」って書いてある両替機。 川口市立中央図書館屋の上にある図書館。に行ってきた。特に何もないけど。あと、マイコンショップ川口つぶれてた。 ある程度能力を持ってるなら、成果を残せるか残せないかは自信を持ってるか持ってないかの違いだけかもしれないというような話。 最近思うのだけど、使えない奴(例えば、僕のような)の特徴として、「どうせ自分が何をどうやっても、何もどうにもならない」的な思考があると思う。 例えば、上の一行で言うと、「使えない奴(例えば僕」とか、そういったような思考。 こういった思考は、いったん根付いてしまうと、循環するので、なかなかやめられない。「どうせ自分は何もできないんだ→何もできないから何もやらない→何も成果を残せない→どうせ自分は何もできないんだ」とかいった感じで。 矯正しようと思っても、「いや、こういう性格だから、矯正は無理だし。」と、いう思考になってし

    J (2006-08-08)堕落したCプログラマのレベル10
  • 再入不可能な関数を C で実装する - いやなブログ

    再入不可能な関数を C で実装する 一度実行したら二度と中身を実行できなくなる再入不可能な関数を C で実装してみます。通常、このような関数はシングルトンなどの静的なデータの初期化に使いますが、ここではデータについては考えないことにします。 static 変数をフラグに使う まずは最も単純な方法から見ていきます。次の関数は static 変数をフラグに使って再入を防いでいます。厳密に言えば関数そのものには入ってしまっていますが、ここで気にしないことにします。 void once(void) { static int entered; // 最初は 0 if (entered == 1) { // すでに入ったことがある場合は return; // すぐ出る } entered = 1; // 初回の場合のみ、何かを実行する } この方法はシングルスレッドのプログラムではうまく動きますが、マ

    nozom
    nozom 2006/08/11
    アトミック命令cmpxchg…ってそんな命令あったのか(486以降)。__asm__の使い方も参考になる。
  • C/C++のvoidってのは何だろね - 檜山正幸のキマイラ飼育記 (はてなBlog)

    プログラミング言語の重箱の隅をつつくシリーズ(って、そんなシリーズねーよ)。 ※ひとつ前が、あんまり僕らしくもない(と僕自身が感じる)エントリーだったのでコレ追加しよう、っと。 少し前に、無値(値がないということ)を話題にしました。その後、C/C++のvoidってのは、単に無値を意味するだけではないことに気付いたので書いておきます。 まず、voidの解釈として、値の集合が空集合と、値の集合が単元集合(singleton set)がありますが、空集合はちょっと変で単元集合が良かろうって言いました。それで、voidは単元集合(ただし、そのメンバーが何であるかは重要ではない)だと理解します。 さて、void *p;って書いてあるとき、pが指す先に“voidの値”があるってわけではありません。なにか未知のモノがあるという意味です。気分としては、Any *p;です。pが指す先に置いてあるデータの可能

    C/C++のvoidってのは何だろね - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • なんでも継続、C++ で。 : torus solutions!

    「なんでも継続、Perl で。」 に続いて、 継続渡しの例題コードを C++ の関数オブジェクトを使って書いてみました。 元ネタは 「なんでも継続」 を参照してください。 Scheme の元のコード (define (leaf-count/cps tree cont) (if (pair? tree) (leaf-count/cps (car tree) (lambda (n) (leaf-count/cps (cdr tree) (lambda (m) (cont (+ n m)))))) (cont 1))) (define tree '((a . b) (c . d) . e)) (leaf-count/cps tree values) C++ で書いてみると とても長くなってしまいました。 Scheme の lambda をそのまま素直に関数オブジェクトのクラスとして書き直してい

  • 1