タグ

cに関するohbaryeのブックマーク (6)

  • APIとかABIとかシステムコールとか - 覚書

    はじめに 記事はLinux環境における次のようなことをざっくり理解するための記事です。 Application Programming Interface(API)って何? Application Binary Interface(ABI)って何? システムコールとAPIとABIの関係って? それぞれ何がどう違うの? この手の情報はググればwikipediaやらにいろいろ情報が載ってるんですが、初心者が理解するには細かいことまで書かれすぎていて、かつ、それぞれの関係がわかりにくいです。なので、用語を逐一解説するのではなく、ありがちな質問のQAという形をとりました。人によって用語の意味の揺らぎがあったりするんですが、私の解釈ということで。あからさまに間違っていたら指摘していただけると嬉しいです。 これを書こうと思ったきっかけは、以前こんなtweetを見かけたことです。それから「そういえば最

    APIとかABIとかシステムコールとか - 覚書
  • なぜCを学ぶべきなのか - 立命館大学情報理工学部セキュリティ・ネットワークコース プログラミング言語サポートページ

    プログラミング言語としてのCは、初学者にとっては難しい言語であるのは確かです。中には、初心者が学ぶべき言語ではないと言い出す人もいます。ですが、私たちセキュリティ・ネットワークコースの教員は、我々のコースの学生は早期にCを学ぶべきであると考え、このカリキュラムを設定しています。以下に理由を列挙します。 Cはコンピュータの構造に深く根ざした言語なので、コンピュータそのものの学習を同時に進めることで、相互の理解が深まると考えています。例えば主記憶(メモリ)上にプログラムとデータの双方が置かれるフォン・ノイマンアーキテクチャや、メモリ上のデータ配置の問題、エンディアンの問題などを直接感じられるのはCならではだと思います。 CはOSや、コンパイラなどの言語処理系、組み込み機器などで広く使われており、その構造や動作と深く関わっているため、セキュリティとネットワークの理解のために欠かせないからです。

    なぜCを学ぶべきなのか - 立命館大学情報理工学部セキュリティ・ネットワークコース プログラミング言語サポートページ
  • セルフホスト可能なCコンパイラを書く

    最近、コンパイラを書くことが流行っているようだ。流行に乗ってやってみたらいろいろな知見が得られたので紹介したい。 コンパイラを書くと一口に言ってもいろいろなスコープがある。ここではC言語を用いてCコンパイラを書くことを選択した。C言語は言語仕様的にコンパクトで広く知られている。また、ツールとしてのCコンパイラも普及している。その場合、自分が書いたCコンパイラで、自分が書いたCコンパイラのソースコードをコンパイルすることが原理的には可能だ。これをセルフホストという。ひとつの到達目標として非常に興味深い。 当初は冬の間に終わらせる予定だったのだが春まで伸びてしまった。しかし、春になっても寒かったり雨で家に居る日が多く、アウトドアシーズンまでに目標のセルフホストを達成することができた。 昔、Cのインタプリタを書いたことがあったが、コンパイラを書くのは、はじめてである。時代も進んで開発手法が変わっ

    ohbarye
    ohbarye 2020/04/15
    “このように色々楽しくて知見が得られるので、コンパイラを書こう。”
  • RubyInline gem で C 拡張を手軽に作ってみた - エムスリーテックブログ

    こんにちは、サーバーサイドエンジニアといいつつも最近は React をいじっていることが多い矢崎(id:Saiya)です。 去年あたりに自宅用に作っている Rails のアプリケーションから、libgd *1 の提供する C 言語向けの API を呼び出すコードを導入していたのですが、その際に使った RubyInline gem が便利だったので、(主に自分への備忘録を兼ねて)使う上での留意点や tips などを書いておきます *2。公式のサンプルにあるような簡単な利用例ではあまり迷うことはないのですが、多少凝った用途で使う上でハマった点もありましたため、備忘とご共有までに。 なお、この記事は エムスリーアドベントカレンダー 7 日目の記事です、他の記事もぜひご覧くださいませ。 RubyInline gem とは C 言語のソースの文字列を inline メソッドに渡すとコンパイルされ、R

    RubyInline gem で C 拡張を手軽に作ってみた - エムスリーテックブログ
  • Ruby FFIを使ったエクステンションの作り方 - Boost Your Programming!

    Ruby FFIについて ここ最近libclangのRuby Bindingのffi-clangに機能を追加していたのですが、その過程でFFI(Foreign function interface)というものを知りました。FFIとはようするに多言語を呼び出すためのインターフェイスのことのようで、RubyにおけるFFIはlibffiを利用しているようです。 Rubyでは(C言語で)エクステンションを書けば共有ライブラリを利用するようなライブラリ(Gem)を作ることができますが、FFIを使えばRubyで書くことができますしポータブルな実装になります。家曰く: コンパイルが必要無い マルチプラットフォーム(変更無しでJRubyやRubiniousなどで動作する) 記述がRubyなので読み書きしやすい Rubyの実装の変更に影響されない 実際FFIを使ってみると、単純なものなら一瞬でバインディン

    Ruby FFIを使ったエクステンションの作り方 - Boost Your Programming!
  • C言語がコンパイル~実行されるまで

    記事の内容以下のソースコードがコンパイル~実行されるまでに、何が行われるのかを理解する。 細かいオプションや処理の詳細は追わない。 #include <stdio.h> #define MESSAGE "hello world\n" int main(int argc, char *argv[]) { printf(MESSAGE); return 0; } 検証環境]$ uname -rm 3.10.0-957.10.1.el7.x86_64 x86_64 ]$ gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditi

    C言語がコンパイル~実行されるまで
  • 1