タグ

Cに関するTokyoIncidentsのブックマーク (147)

  • Xcode を使って Ruby C 拡張ライブラリをデバッグ - @watson1978 の日記

    RMagick のテストが通らないものを調べる際にどのようにデバッグしようかと思ったのですが、Debugging Ruby C Extensions in XCode - Emil Soman's blog に有益なことが書かれておりました。元の記事では Xcode 5.1 が使われていたので最新の Xcode のスクリーンショットを交えつつ手順を書いてみます。 この記事では Ruby C 拡張ライブラリの C 言語で書かれたコードをデバッグする手法を記述します。 デバッグ対象のコードを入手 $ git clone https://github.com/rmagick/rmagick.git Makefile を作成 Ruby C 拡張ライブラリの C 言語のコードは ext ディレクトリ配下にあります。RMagick では ext/RMagick となります。そこへ移動し Makefil

    Xcode を使って Ruby C 拡張ライブラリをデバッグ - @watson1978 の日記
  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • バカにC言語は難しい~プログラミングの機会損失~

    プログラミングは難しい 注意: この記事は「プログラミング学習とはかくあるべき」、「こうやって学習するのが一番」ということを言いたいのではなく、プログラムを勉強したいが右も左もわからない人に少しでも勇気と情報を与えることを目的としています。過去の挫折経験からか、なかば愚痴っぽくなっていますがご勘弁を はじめに自分のプログラミング歴を軽く紹介して起きます。 年 言語 学習目的 2010 C言語 学校の実習 2011 C++ 組み込み系 2012~2017 None None 2018 Go,Js,Scala,Python 研究、Web開発 といった感じです。2012~2017年がNoneになっているのには原因が「C言語に挫折し、とにかくプログラミングがしたくなかった」からです。そう思ってしまった原因と、そこから立ち直ったことがこの記事を書いた理由です。 「おいおい、C言語ごときで挫折とは情け

    バカにC言語は難しい~プログラミングの機会損失~
  • Mozillaが「WebAssembly Studio」発表。C/Rust/AssemblyScript対応のオンラインIDE

    Mozillaが「WebAssembly Studio」発表。C/Rust/AssemblyScript対応のオンラインIDE Mozillaは、Webブラウザ上で高速に実行できるWebAssemblyに対応したアプリケーションを開発するためのオンラインIDE「WebAssembly Studio」を発表しました。 オンラインIDEのサービスとして「WebAssembly.Studio」でベータ公開され利用できるほか、コードがGitHubでオープンソースとして公開されており、サーバにインストールして実行することも可能です。 WebAssemblyは、Webブラウザ上でネイティブコードに近い実行速度で高速に実行できるバイナリフォーマットです。 マイクロソフト、Google、Mozilla、Appleなどの主要なWebブラウザベンダがW3CのWebAssembly Community Grou

    Mozillaが「WebAssembly Studio」発表。C/Rust/AssemblyScript対応のオンラインIDE
  • 高速化プログラミング

    このサイトは管理者が仕事上、CAE(Computer Aided Engineering=コンピューターに支援された技術)ソフトウェアのソルバー開発をしている間に身に付けた数値計算のプログラムを高速化するためのテクニックを紹介するものです。 プログラムを高速化させるというと難しそうに思われがちですが、ちょっとしたことでプログラムを数倍高速化できたりするものです。高速化プログラミングができるようになるためには才能よりも経験が重要です。つまり高速化プログラミングのテクニックができるだけ知ることが高速化プログラミングへの一番の近道です。 ここに紹介された高速化プログラミングのテクニックを一度お読みいただければ、自然と誰でも高速なコードを書けるようになると管理者は信じています。 このサイトの構成を説明いたします。最初にプログラムの高速化の簡単な説明と管理者が使用したマシン環境をご紹介します。そして

  • GitHub - rui314/8cc: A Small C Compiler

    8cc C Compiler Note: 8cc is no longer an active project. The successor is chibicc. 8cc is a compiler for the C programming language. It's intended to support all C11 language features while keeping the code as small and simple as possible. The compiler is able to compile itself. You can see its code both as an implementation of the C language and as an example of what this compiler is able to comp

    GitHub - rui314/8cc: A Small C Compiler
  • その3:実行時オプションと環境変数(1) - エンジニアのソフトウェア的愛情

    主立った実行時オプションについて説明します。 実行時オプションには(--gtest_list_testsをのぞいて)対応する環境変数があります。環境変数に値を設定しておくと、実行時オプションを指定したときと同じ効果が得られます。 オプション 環境変数 機能 --gtest_list_tests テストの一覧を表示する --gtest_filter GTEST_FILTER 実行するテストを指定する(フィルタリングする) --gtest_repeat GTEST_REPEAT テストを繰り返す回数を指定する --gtest_break_on_failure GTEST_BREAK_ON_FAILURE テストが失敗した時点でテスト全体を中断させる --gtest_color GTEST_COLOR 結果のカラー表示を指定する --gtest_print_time GTEST_PRINT_TI

    その3:実行時オプションと環境変数(1) - エンジニアのソフトウェア的愛情
  • c-ares の大雑把な機能紹介 - DELPHIER@はてな

    c-ares については過去の記事で少し触れた。c-ares は以下に詳細な API リファレンスが存在するが、Web サイトトップより詳しく、API リファレンスよりも大雑把な機能紹介がないのがもったいない。 というわけで、c-ares を簡単に紹介しておく。まずは Web サイトトップに書いてあること。 非同期名前解決ができる 大抵のプラットフォームで呼び出すことができる gethostbyname、getaddrinfo は同期呼び出しのみ C ライブラリとして提供される IPv6 に対応している 様々なプラットフォームに対応していて移植性に優れている Windows Mac OS X Linux Android etc.. 今も活発に開発が行われている メーリングリストが活発 メインメンテナの Daniel Stenberg 氏が活発 ソースコードを見たり実際にコードを書いたり実行

    c-ares の大雑把な機能紹介 - DELPHIER@はてな
  • gcovrでコードカバレッジを確認

    May 25, 2014 手元ではCoverStoryを使っていたのですが、なんか使いづらかったのでgcovrを使い始めました。 gcovr 3.1にはhtml出力がついていて、以下のようなコマンドでレポートを出力してくれます。 gcovr \ -r . \ --html --html-detail \ -o build/coverage.html \ -e Pods \ -e UnitTests \ -e ".*\.h"

    gcovrでコードカバレッジを確認
  • gcc と gcov と カバレッジ

    cles::blog 平常心是道 blogs: cles::blog NP_cles() « ニューデリ :: 20th Anniversary ファイアーエムブレム大全 » 2010/07/02 gcc と gcov と カバレッジ  c  softwareengineering 80 0へぇ Javaで使えるカバレッジツールがありますか?と言われれればjcoverageとか、Clover、EMMA、Coberturaあたりがすぐに思い浮かぶのですが、Cでといわれるとさっぱりです。ということで、Cでカバレッジを計測するツールを探すことになりました。 † gcc には gcov というコマンドがついていた Javaでもカバレッジ計測となるとかなり低レベルな部分で結構いろいろなことをしなくてはいけないので、C言語でそれをやるとなるとコンパイルの段階から細工しないといけないのだろうという察しは

    gcc と gcov と カバレッジ
  • gcov の使い方 - まめめも

    concov のドキュメントを書こうと思ったけれど、何から書くか困ったので、とりあえずその前に gcov の使い方とはまりどころを書いてみます。 gcov とは C 言語で書かれたプログラムのカバレッジを測定するツールです。gcc に付属しています。 基的な使い方 こういうコードがあるとする。 /* test.c */ #include <stdio.h> int foo(int x, int y) { return x + y; } int bar(int x, int y) { return x - y; } int main(void) { printf("%d\n", foo(2, 3)); printf("%d\n", foo(3, 4)); return 0; } コンパイルする。-coverage をつけると gcov 用のオブジェクトファイルが生成される *1 。 $ g

    gcov の使い方 - まめめも
  • GitHub - gregoiresage/enamel: Helps C development with Clay config framework

  • mmapを使ってファイルベースの巨大なバッファを確保する話

    小さなバッファはインメモリでもつが、メモリに収まらないような大きなバッファはテンポラリファイルを作り、file I/Oでアクセスする、というのが昔からの汎用的なバッファ実装のアプローチ。 だが、バッファに格納するデータ量によってアクセス手段を変えるというのはめんどくさいし、そこを抽象化すると無駄なオーバーヘッドが発生する。 幸いなことに最近は、メモリ空間が広い 64bit CPU だけ考えればいい。なので、ファイルの「読み込み」については、めんどくさいから全部mmapするというのが一般的なアプローチになってきている(例: LLVMのリンカであるlld)。 同様のことが、テンポラリファイルを使う可変長のバッファについても可能であり、h2o では実際に実装している。詳しくは h2o_buffer_reserve 関数の実装を見てもらえばいいと思いますが、ざっくりとした手順は以下のとおり: ▪️

  • CRubyコードリーディング(1) : LIKELY/UNLIKELY - Qiita

    Help us understand the problem. What is going on with this article?

    CRubyコードリーディング(1) : LIKELY/UNLIKELY - Qiita
  • cgogen (golang)

    Automatic C-Go Bindings Generator The c-for-go project allows to reuse existing C/C++ libraries in your Go applications, by automatically creating c-go bindings for a given set of C headers and the manifest file. $ cloc vorbis/ Language     files      blank    comment     code C/C++ Header     6        192        497      578 $ c-for-go vorbis.yml processing vorbis.yml... done in 304.657793ms $ cl

  • C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ

    サイボウズ・ラボの光成です。 先日、社内で主にLinux上でC/C++を用いている開発者向けの講義をしました。 「こんなことができる」と知ってもらい、興味を持てば各自で勉強してもらおうと広く浅くツールを紹介しました。 gtags, ASan, Valgrind, addr2line, cppcheck, SystemTap, perfなどです。 興味があれば講義資料「C/C++プログラマのための開発ツール」をごらんください。 コンパイラオプション 受講者には新人やサイボウズ・ラボユースの学生もいたので基的なところから紹介しました。 C/C++コンパイラを使うときはできるだけ警告オプションをつけるのが望ましいです。 警告が出るのは自分のコードの書き方に不備があることが多いからです。 gccやclangでは-Wall -Wextraは基としてそれ以外にも有用なオプションがあります(C++

    C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ
  • C言語アルゴリズム-オープンアドレス法 CapmNetwork

    C言語アルゴリズム-オープンアドレス法 オープンアドレス法(open addressing)について ハッシュ法について ハッシュ法とは、キー値からハッシュ関数によって「ハッシュ値」を求め、ハッシュ値をバケット(bucket:ハッシュテーブルの各要素)に結びつけるデータ構造を生成し、高速な探索を実現する手法です。ハッシュ法を用いることで、データの数に関わらず挿入・探索・削除の操作を実質的に「O(1)」で行うことができます。 ハッシュ関連の用語は以下の通りです。 ハッシュ値(hash value) ハッシュ関数の返す値。キーを格納する配列の添え字。 ハッシュ表(hash table) データを格納する配列。 バケット(bucket) ハッシュ表の各要素。 衝突(collision) 異なったキーの値から同じハッシュ値が得られること。 オープンアドレス法(開番法)とは オープンアドレス法とは、

  • How to create bindings 2016 - Kouhei Sutou - Rabbit Slide Show

    Description This talk describes how to create Ruby bindings of a C library. It's the latest information in 2016. Page: 1 Ruby bindings 2016 How to create bindings 2016 Kouhei Sutou ClearCode Inc. RubyKaigi 2016 2016-09-09 Ruby bindings 2016 - How to create bindings 2016 Powered by Rabbit 2.2.0 Page: 2 Acknowledgment 感謝 @SoManyHs and @drbrain They fixed English in this slide @RubyKaigi 2016 Officia

    How to create bindings 2016 - Kouhei Sutou - Rabbit Slide Show
  • GObject Introspection対応ライブラリーの作り方 - 2013-12-16 - ククログ

    require "gobject-introspection" module Sample loader = GObjectIntrospection::Loader.new(self) loader.load("Sample") end greeter = Sample::Greeter.new puts(greeter.greet) # -> Hello! どちらの場合も、「Greeterクラスを定義、Greeterクラスにはgreetメソッドを定義」ということを指定していません。「Sampleライブラリーを使う」と指定しているだけです。 SampleライブラリーのAPIは2つの関数しか提供していませんが、通常、ライブラリーのAPIはもっと多くの関数を提供しています。ライブラリーがGObject Introspectionに対応していると、それらの関数をどのように使うかを1つずつ定義し

    GObject Introspection対応ライブラリーの作り方 - 2013-12-16 - ククログ
  • addr2lineを使ってスタックトレースから取得したアドレスをソースファイル名と行番号に変換する - Qiita

    前書いた記事 ではアドレスからソースコードを割り出すためにobjdumpを使っていましたが、 それではプログラムが大きいほど遅くなります。 今日はaddr2lineコマンドを紹介します。 ソースサンプルは前書いた記事にあるます。 実行結果 ./a.out() [0x401768] ./a.out() [0x4017e9] ./a.out() [0x401804] /lib64/libc.so.6(__libc_start_main+0xfd) [0x318441ed5d] ./a.out() [0x4012a9] この実行結果からコースコードを割り出すには以下のコマンドを使います addr2line -e a.out -f -C -s 0x401768 0x4017e9 0x401804 パラメータの意味 -e 実行ファイルの位置を指定、デフォルトはa.out -f 関数の名前を表示する

    addr2lineを使ってスタックトレースから取得したアドレスをソースファイル名と行番号に変換する - Qiita