タグ

Cに関するkasahiのブックマーク (20)

  • 大学のC言語の課題をNode.jsで書き直してみる - Qiita

    自分の大学の学科ではC言語が最初に学ぶコンピュータ言語です。知り合いの大学生に聞いてみてもCかJavaが多いようです。サンプルは少ないですが… 自分もその例にもれず、最初のプログラミング言語はC言語。授業の範囲は基的な構文からポインタの構造体くらいまでになります。個人的な話ですが、最近プロラミングに腰をいれはじめJavascript、なかでもサーバーサイドのNode.jsを書いています。大学でC言語をやることに対する是非については触れませんが、学校でC言語をやった人が記事をみつけて「Node.jsではこう書くこともできるのか」と参考程度にしてもらえたら有意義かなと思っています。その後WEBアプリなどを書けるようになるきっかけになれば幸いです。(まあほとんど気まぐれで書いてみて、せっかくだから記事にしようとしただけですが…) ググればいくらでも詳細がヒットしますが、公式にはこうあります

    大学のC言語の課題をNode.jsで書き直してみる - Qiita
  • sprintf を最大10倍以上高速化するプリプロセッサ「qrintf」を作った

    最近H2OというHTTPサーバを書いているのですが、プロファイルを取ってみるとsprintfが結構な時間をっていて不満に感じていました。実際、sprintfは数値や文字列をフォーマットするのに十徳ナイフ的に便利なので、HTTPサーバに限らず良く使われる(そしてCPU時間を消費しがちな)関数です。 では、sprintfを最適化すれば、様々なプログラムが より高速に動作するようになるのではないでしょうか。ということで作ったのが、qrintfです。 qrintfは、Cプリプロセッサのラッパーとしてソースコードに含まれるsprintfの呼出フォーマットを解析し、フォーマットにあわせたコードに書き換えることで、sprintfを高速化します。 たとえば、以下のようなIPv4アドレスを文字列化するコード片を sprintf( buf, "%d.%d.%d.%d", (addr >> 24) & 0xf

  • PHPだけど速ささえあれば関係ないよねっ - 私の昆布

    これは 1 年 7 ヶ月 6 日 前に投稿されたものです。最新のものではありませんので、間違っているかも知れません。 そんなこと無いわけで。 さて、PHPの高速化といえば、 コード最適化 Accelerator入れる PHP Extensionを作る くらいだと思いますが、今回は「PHP Extension」を使いたいと思います。 なお、この記事で登場するPHPのバージョンは、5.3.3です。 SWIGを使う 素でPHP Extensionの作成となると、覚えることが多くて結構大変なので、「SWIG」というものを利用します。 これは、C/C++のプログラムをPHPを含めたインタプリタ言語やJava、C#などで半自動的に使えるようにしてくれるというものです。便利ですね。 「.i」というSWIGに向けた処理内容を示した「インターフェースファイル」というものを作成する必要がありますが、一度作れ

    PHPだけど速ささえあれば関係ないよねっ - 私の昆布
  • C 言語にポインタがある理由は省メモリ化・高速化・開発作業の省力化です - 偏見プログラマの語り!

    前回の記事『プログラム初心者にC言語のポインタを不意ながら教える羽目になったなら、こう教えると良いよ』でポインタの教え方を書きました。ソレに対して「そもそもどうしてポインタっていう仕組みがあるの?」という質問をもらったので、つらつらと書こうと思います。稿は「ポインタがある理由の教え方」ではなく「ポインタがある理由」です。分かっている人には相当に退屈な文章ですのでそういう人は読まずにお帰りください。 で、えーと、結論だけ先に言うと省メモリ化のため、次に速度アップのため、そして生産性アップのためです。 1. メモリは有限である。 マシンに搭載されているメモリには限りがあります。メモリ空間は広大ですが、無限ではないのです。 好き放題にどんどんメモリを使ってデータを格納するわけにはいかないというわけです。しかしプログラムは計算のためにメモリ空間を占有します。仮に↓こんな感じに、わずかな有限メモ

    kasahi
    kasahi 2012/06/22
  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
    kasahi
    kasahi 2011/04/01
  • C/C++ 迷信集 | 株式会社きじねこ

    C/C++ を使うプログラマは大勢います。しかし、その多くは OJT を通して言語を学んだのではないでしょうか? 実はそこに大きな落とし穴があります。 コンピュータや工学のことをよく知らない人たちは、時代の先端を歩むプログラマには「迷信」など無関係だと信じて疑わないかも知れません。しかし、迷信や誤解はどんな世界にも常に存在しています。 というわけで、ここでは C/C++ にまつわる迷信、誤解、よくある間違いを採り上げていきます。非常に後ろ向きな企画ですが、暇つぶし気分転換に読んでみてください。もしかすると、ご自身が迷信にとらわれていたことに気付くかもしれません。 追記(2009/03/15) このコーナーでは、C/C++ にまつわる迷信、誤解、よくある間違いを扱っています。決して「迷信」だけではないのですが、タイトルにはすべて[迷信]を付けています。 これは、主に検索エンジンでタイトルを見

    kasahi
    kasahi 2009/10/20
    C/C++の迷信集
  • RubyをCで拡張するメモ - shimobayashiの日記

    とりあえずinitialize乗っ取ってインスタンス変数定義してアクセサも定義できた。一通りそろったか? # unyo.c #include VALUE gunyo(VALUE self, VALUE va, VALUE vb, VALUE vc){ rb_ivar_set(self, rb_intern("@foo"), INT2FIX(123)); return self; } VALUE get(VALUE self) { return rb_ivar_get(self, rb_intern("@foo")); } VALUE set(VALUE self, VALUE n) { rb_ivar_set(self, rb_intern("@foo"), n); return Qnil; } void Init_Unyo(void){ VALUE rb_cHoge; rb_cHog

    kasahi
    kasahi 2009/05/31
  • 印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1) - moriyoshiの日記

    アーキテクチャに関する質問として、「○○の仕組みってどうなってるの」というようなことを聞かれても、説明下手なせいか、なかなか口で説明できないことがある。そこで「UTSL (ソース読めばいいよ)」と言いたいんだけど、かといって実際に、これを読むといいんじゃないかな、という話にもしづらい。入門的なコードはあまりにも単純すぎて退屈だし、かといって何か適当な著名なプロダクトのソースも、おおよそ手軽に読めるという感じではない。 さて、前エントリで epoll(7) やら select(2) やらの内部の説明をしたわけだけど、呼び出し側がどうなっているのかという部分のイメージがつかめなければ、片手落ち、というか意味不明だろうというように思ったので、恥をしのんで、簡単なシングルスレッドのイベントループベースの (twisted っぽい) TCP ECHO サーバを書いてみた。 電車の中でも読めるというコ

    印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1) - moriyoshiの日記
    kasahi
    kasahi 2009/05/31
  • C言語で、ruby用拡張モジュールを作成する方法 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -

    C言語で、rubyの拡張モジュールを作成する方法について調べてみました。 とりあえず例として Sample という拡張モジュールを作成し Sample::sample() というメソッドをCで実装 してみました。 このSampleモジュールを使うと、以下のrubyのコードは require "sample" puts Sample::sample("test") コンソールに "test" と表示するようになります 拡張モジュールのソースコード Cで次のようなコードを書きます。 #include <ruby.h> static VALUE rb_sample_sample(VALUE obj, VALUE arg) { Check_Type(arg, T_STRING); return rb_str_new2(RSTRING_PTR(arg)); } void Init_sample()

    C言語で、ruby用拡張モジュールを作成する方法 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -
    kasahi
    kasahi 2008/06/01
  • アルゴリズムとデータ構造演習

    演習の目的は、プログラミング言語C及びSchemeの基礎を習得し、 それらの言語を通じて、講義「アルゴリズムとデータ構造」の理解を深めることにあります。 重要なお知らせ 特に重要な連絡事項はここに掲載されます。 課題について 課題には、A課題とB課題があります。(課題番号の末尾が種類を表します。) B課題が基礎的な課題で、A課題が発展的な課題となっています。 B課題を全問解くことが、単位取得の目安です。 C入門第1回(10月10日) C入門第2回(10月17日) C入門第3回(10月24日) C入門第4回(10月31日) C第1回(11月7日) C第2回(11月14日) C第3回(11月21日) C第4回(11月28日) C第5回(12月5日) Scheme第1回(12月12日) Scheme第2回(12月19日) Scheme第3回(1月9日) Scheme第4回(1月16日) C補講

  • お手軽パーザー

    日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。

  • C言語について質問です。 C言語を学びたいと思います。 ですが現状ではCやC 等の区別もあまりついてません。 目標はVB等のようにランタイムなどを使用せず単体で動作する .. - 人力検索は

    C言語について質問です。 C言語を学びたいと思います。 ですが現状ではCやC++等の区別もあまりついてません。 目標はVB等のようにランタイムなどを使用せず単体で動作する ネットワークツールなどを作る事を目標としております。 現在私が使えるのはHTMLPerlPHP、VBをそれぞれ少しずつ使える程度です。 このような私が目標を達するためにお勧めの書籍やサイト、また学習方法などあれば教えて下さい。

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • プロファイラのしくみ steps to phantasien t(2007-08-23)

    UNIX 偏向文書 artu の中で "Measure Before Optimizing" と説く Raymond は, 同時にプロファイラの計測機構 (instrumentation) がもたらすノイズについて注意を促している. 私のプロファイラ信仰に不安が翳を落とす. gprof ノイズはさておき, そもそもプロファイラはどんな仕組みで速度を測っているんだろう. gprof のマニュアル によると, GNU 一族のプロファイラは次のように実装されている: まず "-pg" オプションつきの gcc でソースをコンパイルする. この指示を受けたコンパイラは各関数の冒頭に "mcount" という名前の関数呼出しを加える. リンクする C のランタイムも専用バージョン (gcrt0.o) に差し替わる. このランタイムは裏で profil() 関数を使いタイマを仕掛ける. そのタイマは発

  • B3 OS/Programming(東京工業大学の授業:コンパイラのつくりかた)

    シラバス コースは、プログラミングの基について、ひととおりの技術を学び終えた受講者を対象とする。コースの目的は、実際のソフトウェアを開発する際に、具体的にどのようにプログラムを設計し、またどのように OS の機能を利用していけばよいか、感覚をつかんでもらうことである。このため、コースは講義中心ではなく、いくつかのソフトウェアの作成演習をとおして、そのソフトウェアのプログラムはなぜそのように設計されているのか等を考えてもらう。 1. 簡単な C コンパイラ 言語仕様を簡略化したCコンパイラを作成し、言語処理系の基構成を学ぶ。また関数呼び出しや配列参照など、C言語の各基機能が実際にどのような機械語に変換されていくのかを学ぶ。 実際に作成する処理系は2つで、まずはじめに字句解析の練習として、ごく簡単なLispインタプリタを作る。 その後、構文解析、コード生成の演習のため、C言語風の手続

  • エラー

  • Geekなぺーじ : ネットワークインターフェース名一覧を取得する

    ネットワークプログラミングを行っていると、自分のネットワークインターフェース(NIC)一覧が欲しくなります。 ここでは、Linuxでeth0、eth1などのネットワークインターフェース名一覧を取得する方法を説明したいと思います。 単純なネットワークインターフェース一覧取得プログラム Linuxでの簡単なネットワークインターフェース一覧取得プログラムのサンプルを以下に示します。 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <net/if.h> #include <sys/ioctl.h> /* 取得できるインターフェースの最大値 */ /* 10個以上インターフェースがある場合は増やしてください */ #define MAX_IFR 10 int main() { struct ifre

    kasahi
    kasahi 2007/05/06
  • 初心者のためのポイント学習C言語

    since:2002.06.02 更新に手が回らずすみません。 ANSI規格でもいいよという方は 御覧ください。m(_ _)m

  • プログラマがC言語を学ぶべき10の理由:Geekなぺーじ

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

    kasahi
    kasahi 2007/05/04
  • C/C++言語によるCGIプログラミングの設計入門

    C/C++言語によるCGIプログラミングの設計入門 Webpageを対話的にするCGIプログラムをC/C++言語で設計 する方法についての解説です。 Last revised on May 6th, 2000. 目次 CGIとは何か 現在時刻の表示 色々なファイルの返送 Server side イメージマップ Client side イメージマップ 書き込みFORMの文法 FORMデータの処理 漢字コードの処理 アップロードの処理 電子メールの送信 Sbitによる権限の譲渡 アクセスの排他処理 原始的な電子掲示版 セキュリュティーホール Webserverでのコンパイル サーバーによる認証 パスワードの取扱 Cookieの調理法 特殊なヘッダー命令 CGIの環境変数 SSI:Server side include Java scriptの極一部 画像の作成 アクセスカウンタ アクセスの逆探

    kasahi
    kasahi 2007/04/27
  • 1