タグ

Cに関するhtzのブックマーク (51)

  • セキュリティ・キャンプ 2018 (Cコンパイラ自作ゼミ) に参加してきました - 0x19f (Shinya Kato) の日報

    8/14〜8/18の期間でセキュリティ・キャンプ2018のCコンパイラ自作ゼミに参加させていただきました。 なんと4泊5日で1日3が用意されるというQoLの高い環境で、集中して開発ができ最高でした。 Cコンパイラ自作ゼミは「セルフホスト可能なCコンパイラ」の開発を目標にコンパイラを自作するという内容でした。 講師の @rui134 さんと @hikalium (実は大学の同期です!) 、チューターの @retrage01 さんがどんな質問にも建設的に答えをくださって、非常に多くの学びが得られました。 最終的には自作Cコンパイラのセルフホストも達成でき、自分の技術スキルを何段階も成長させられたと感じています。 以下のリポジトリが今回のセキュリティ・キャンプの成果物です。 github.com 前置きが長くなりましたが、この記事では以下のことについて書きたいと思います。 Cコンパイラ自作ゼミ

    セキュリティ・キャンプ 2018 (Cコンパイラ自作ゼミ) に参加してきました - 0x19f (Shinya Kato) の日報
  • セルフホスティングCコンパイラを書いた - 茅の下

    セルフホスト(自分自身をビルド)できるCコンパイラnoccを書きました。 github.com はじめに 去年の夏あたりからCコンパイラを書くのが流行っていたのでやってみました。 例によって@rui314さんの8cc、9ccと低レイヤを知りたい人のためのCコンパイラ作成入門を参考にしていますが、バックエンドにはLLVMを使用しています。 工夫した点 以下、作る上で工夫した点です。 言語仕様に制限をつける C言語の全仕様を網羅しようとすると到底完成は不可能なのでサポートする言語仕様に制限をつけまくりました。 制限には例えば以下のようなものがあります。 変数宣言が初期値を取れない。 複数の変数をコンマ区切りで宣言できない。 typedef宣言や型のconst修飾などはその語順を固定している。 型解析時は型のconst修飾を無視する。 関数のプロトタイプ宣言はトップレベルでのみ行える。 関数ポイ

    セルフホスティングCコンパイラを書いた - 茅の下
  • C言語のポインタ構文のつまづきどころ - Qiita

    C言語のポインタの構文でつまづきやすいポイントについて紹介し、このように考えるとわかりやすいという私なりの方法も書かせていただきます。規格書の内容を解説しているわけではないのでご承知おきください。 ポインタとは ポインタ (pointer)とは、あるオブジェクトがなんらかの論理的位置情報でアクセスできるとき、それを参照するものである。有名な例としてはC/C++でのメモリアドレスを表すポインタが挙げられる。(ja.wikipedia.org) ふむふむ。ポインタ=メモリアドレスだな。 注)コメントにて指摘あり。 ポインタ型変数 はい、これがポインタです。って書いても、何を指しているのかよく分からん。*がポインタなのか!と思うひともいれば、*pointerがポインタなのか!と思う人もいるだろう。いや、そもそもポインタってメモリアドレスってさっき言うたやん?これのどこにメモリアドレスがあるんだ?

    C言語のポインタ構文のつまづきどころ - Qiita
    htz
    htz 2015/03/18
    そんな難しい仕様じゃないし脳内翻訳とかやっているからそれ以上の理解が進まない原因になっているように思います。「バグの原因になるんだもん。」も、ポインタを理解できていないから。ポインタは全く悪くない。
  • C言語/C++ プログラミング 入門

    C 言語は 1972年にUSの有名なベル研究所で Dennis Ritchie らが設計・実装した言語だ。 今となっては低水準な言語だが、充分な機能、簡潔な記法とアセンブラに近いパフォーマンスを持ち、 Unix, Windows, Linux 等の OS をはじめ、コンパイラ、テキストエディタ等のツールや、ビジネスアプリやゲームなど多くの各種アプリケーション開発に用いられてきた。 C++ 言語は 1980年頃、やはりベル研究所の Bjarne Stroustrup が開発したもので、C にオブジェクト指向などの機能を追加したものだ。 C との互換性を維持しつつオブジェクト指向が可能で、パフォーマンスも高かったことから、 1990年頃から、ビジネスアプリやゲームなど多くのアプリケーション開発に使用されるようになった。 C++ は、過去の互換性を維持しつつ最先端のプログラミングパラダイムを多く

  • CC500: a tiny self-hosting C compiler

    Introduction I wrote this tiny compiler, which translates a subset of C into x86 machine code, for fun. It has no use, unless it counts as educational. I called it CC500 because I initally guessed it would take about 500 lines. It turned out to be about 600 lines even without the comments and blank lines. With the comments and blank lines it has about 750 lines. It could be made shorter, but I wan

    htz
    htz 2015/01/27
  • 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
  • C言語で物理メモリ量の取得 - とんちゃんといっしょ

    C言語で物理メモリ量を取得する方法ががわからなかったので調べてみた。 ・・・なかなか情報が見つからずなかったけど無事に目標達成。 結果をまとめておく。 sys/sysinfo.h /* Returns information on overall system statistics. */ extern int sysinfo (struct sysinfo *__info) __THROW; linux/kernel.h struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigne

    C言語で物理メモリ量の取得 - とんちゃんといっしょ
    htz
    htz 2011/05/16
  • Fabrice Bellard's Home Page

    TSAC: Very Low Bitrate Audio Compression. ts_zip: a practical text compression utility using a large language model. TextSynth Server is a web server proposing a REST API to large language models. They can be used for example for text completion, question answering, classification, chat, translation, image generation. NNCP (lossless data compressor) is now leading the Large Text Compression Benchm

    htz
    htz 2010/08/02
  • C - で素数を数え直したら、範囲10億で10秒切ったお : 404 Blog Not Found

    2010年07月28日01:30 カテゴリMath C - で素数を数え直したら、範囲10億で10秒切ったお というわけで数え直したら… 404 Blog Not Found:C - で私も素数を数えてみた はてなブックマーク - mohnoのブックマーク「Core i7 な iMac で、10億の範囲を検索するのに1プロセス300秒前後」←遅いってこと? エラトステネスのふるいで、原田氏の記事でも10億なら2分(Core i7 920)、私の手元では20秒(Core 2 Duo E6850)だったんだけど。 10秒を切ってしまったので。 次にアルゴリズムであるが、いろいろいじってみた結果こうした。 まず p < 256 な小さな素数でエラトステネスのふるいにかけ 次にMiller-Rabin素数判定法を適用する これは「個々の64bit整数が素数かどうか」を判定するのには(素数表を引くこ

    C - で素数を数え直したら、範囲10億で10秒切ったお : 404 Blog Not Found
  • http://trsh.cside.ne.jp/data/gmplibrary.txt

    *** GMP Library 関数メモ *** (2004. 6.20 / Yuji.M) 巨大数演算用ライブラリのGMP(http://www.swox.com/gmp/)で使える関数とか。 RSAのプログラムを書く際書いたメモを他の人も読めるように修正・加筆しただけなので、書いてない関数については知りません…! あと、このメモを参考にする場合は、あくまでAt your own riskでお願いします。C初心者のメモですから参考にした後で文句言われ ても対応できませんょぅ(・ω・`) あと、実際には使ってない(家ページのマニュアルを訳しただけの)関数もあるので、英語読める人とかは家ページのマニュア ルを参考にした方が絶対良いですw ■ mpz_t bn GMPで扱う整数型の変数bnを定義します。 通常使用される変数定義(int ホニャララとか)と一緒。 ■ void mpz_ini

    htz
    htz 2010/05/27
  • B3 OS/Programming

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

  • Apache Module を作る - C 言語, C++ - namespace kilrey;

    2020-09-01潢政办〔2020〕23号 开火车大满贯的水果机办公室 关于印发潢... 2020-09-01潢政办〔2020〕22号 开火车大满贯的水果机办公室关于印发潢... 2020-09-01潢政办〔2020〕21号 开火车大满贯的水果机办公室关于印发潢... 2020-09-01潢政办〔2020〕20号 开火车大满贯的水果机办公室关于印发潢... 2020-09-01潢政办〔2020〕19号 开火车大满贯的水果机办公室关于印发潢... 2020-09-01潢政办〔2020〕18号 开火车大满贯的水果机办公室关于加强公... 2020-07-162020年开火车大满贯的水果机资金分配情况公告公示(第三次) 2020-06-122020年开火车大满贯的水果机资金分配情况公告公示(第二次) 2020-04-072020年开火车大满贯的水果机资金分配情况公告公示(第一次) 2020-0

  • ライブラリ

    スタティックライブラリの作成 1. はじめに 共通の関数を複数のプログラムで使い回すとき、ライブラリにした方が楽。 ということで挑戦。 2. 次に とりあえず腕ならし。簡単な関数をつくってみる。 あっさりできてしまった。 ソースは下。必要最低限しか書いていないから、見れば分かるでしょう。 Makefile error.c error.h util.c util.h main.c lib.tar.gz‥上のファイル全部 3. 一応説明 error.c、util.cからライブラリをつくり、名前はlibutil.aとする。 そして、それとmain.cをいっしょにコンパイルする。それだけ。 手でコンパイルするとすると、以下のようになる。 % gcc -c error.c % gcc -c util.c % ar r libutil.a error.o util.o % ranlib libutil

  • Manpage of ISATTY

    Section: Linux Programmer's Manual (3) Updated: 1995-04-20 Index JM Home Page roff page 名前 isatty - ディスクリプタが端末かどうか 書式 #include <unistd.h> int isatty(int desc); 説明 desc が端末に接続されたオープンされたファイルディスクリプタ ならば 1 を返す。そうでなければ 0 を返す。 準拠 SVr4, 4.3BSD, POSIX.1-2001. 関連項目 fstat(2), ttyname(3) Index 名前 書式 説明 準拠 関連項目 This document was created by man2html, using the manual pages. Time: 10:26:44 GMT, September 19, 2

    htz
    htz 2010/02/10
    ファイルディスクリプタが端末を参照しているかをチェックする
  • MySQL の結果を csv 形式で標準出力させたい - いけむランド

    最近は DB の動作を理解しようと、気になったところは MySQL のソースを読んだりしているため、そこらへんで学んだことをちょっとずつ書くことにする。 ちなみに結論を先に述べておくと MySQL の結果を標準出力に出す場合は今のところはタブ区切りでしか出せないようにハードコーディングされているために % mysql -e "SELECT ..." | sed -e 's/\t/,/g'みたいに出力を加工するしかないようである。 そもそも MySQL の結果を csv 形式で「ファイルに」出力する方法はある。ひとつはコマンド mysqldump のオプションで指定する方法である。 --fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escape

    MySQL の結果を csv 形式で標準出力させたい - いけむランド
    htz
    htz 2010/02/10
    出力先が標準出力かパイプかどうかを見分ける方法
  • const char* const

    const char* const の2つのconstがそれぞれが何の値を変更不可にするのかのまとめ。 const char* char* const const char* const const char* の変数は、定数データへのポインタです。中身の変更不可、アドレスの変更可です。 覚え方 *「アスタリスク」は、その左側すべてに係る。 ↓ 「const char」のポインタ ↓ 「文字を変更不可能な文字列」へのポインタ ↓ 中身の変更は不可、アドレスの変更は可 char szAAAAA[ ] = "AAAAA"; char szBBBBB[ ] = "BBBBB"; const char* pBuffer = szAAAAA; // 定数データへのポインタ pBuffer[1] = 'C'; // 不可(コンパイルエラー) pBuffer = szBBBBB; // 可(正しい) c

    htz
    htz 2010/02/09
    const char* constとは何か?
  • C言語では、ポインタ型で表される値を、直接、int型の関数の返却値として指定できませんよね。…

    C言語では、ポインタ型で表される値を、直接、int型の関数の返却値として指定できませんよね。 (具体例は最下行に表示) なぜ、C言語はそのような仕様になっているのでしょうか? 両者を混同すると具体的にどのような不都合が生じるのでしょうか? --------------------------------------------------------------------- 例えば以下のような関数の2行目のreturnの括弧内の(int)を削除してmakeしようとすると、 コンパイラから、キャスト演算子が必要だと文句を言われますよね。 /* int cと同じ文字が*str内にあればその文字が格納されている場所を返す関数 */ int adstrchr(const char *str, int c){ while(*str++)if(*str==(char)c)return((int)st

    htz
    htz 2010/01/29
    整数とポインタの相互変換にはuintptr_tを使うと警告が出ない
  • OpenMPの基礎構文

    はじめに 昨今マルチコアCPUは一般化し、並列化処理の重要度がどんどん高まってきました。この流れはもう変わらないでしょう。ですから、我々開発者にとって並列処理の知識は絶対に必要なものです。とはいえ、日々の業務をこなしつつ資料が少ない並列化処理を身につけることは大変です。 そこで今回筆者は、並列化処理を実現するOpenMPの入門記事を書くことにしました。OpenMPを選択した理由は、一番効率が求められているのはC/C++プログラマーだと考えたからです。C/C++プログラマーの方々が並列処理を習得するお手伝いができれば幸いです。 なお、この連載で解説に使用するサンプルコードはあくまでもOpenMPの基礎を理解するための便宜的なものであり、実務でOpenMPを使用する際にはよく理解してから用途に適したプログラミングを行ってください。 対象読者 筆者が想定している読者はCの基的文法をマスターし、

    OpenMPの基礎構文
    htz
    htz 2010/01/06
  • C/C++セキュアコーディング入門一覧

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    C/C++セキュアコーディング入門一覧
    htz
    htz 2010/01/05
  • プログラミング言語 C の新機能

    プログラミング言語 C は 1990 年に ISO で規格化された言語です。その後、何度かの誤りの訂正や wchar_t 型の追加といった追補がなされた後、さらに使いやすくするための新しい機能が検討されてきました。そして、1999 年、ついに新しいプログラミング言語 C の仕様「ISO/IEC 9899:1999 - Programming Language C」(略称 C99) が 1999/12/01 付けで規格として出版されました。ここでは、その新機能を説明します。

    htz
    htz 2009/12/31