タグ

Cに関するdhesusan4649のブックマーク (113)

  • 【海外記事紹介】新たなC言語拡張コンパイラ「TrapC」が発表 — ガベージコレクトなしでメモリ安全なC/C++を目指す

    3月1日、海外テクノロジーメディアInfoWorldが「TrapC proposal to fix C/C++ memory safety」と題した記事を公開した。 3月1日、海外テクノロジーメディアInfoWorldが「TrapC proposal to fix C/C++ memory safety」と題した記事を公開した。 この記事では、TrapCが提案するC/C++のメモリ安全性向上に関する取り組みについて詳しく紹介されている。以下に、その内容を紹介する。 TrapCとは、C言語の拡張コンパイラであり、最も重要な特徴はメモリ安全であることだ。TrapCのメモリ管理は自動化されており、メモリリークが発生しない設計だとされる。ポインタはガーベジコレクションではなく、オブジェクトのライフタイムを管理する仕組みを採用している。 言語としては、C言語をベースとしたいくつかの拡張が行われて

    【海外記事紹介】新たなC言語拡張コンパイラ「TrapC」が発表 — ガベージコレクトなしでメモリ安全なC/C++を目指す
  • GitHub - goblint/cil: C Intermediate Language

    CIL is a front-end for the C programming language that facilitates program analysis and transformation. CIL will parse and typecheck a program, and compile it into a simplified subset of C. goblint-cil is a fork of CIL that supports C99, C11 as well as most of the extensions of the GNU C. It makes many changes to the original CIL in an effort to modernize it and keep up with the latest versions of

    GitHub - goblint/cil: C Intermediate Language
  • 自作Cコンパイラ 8時間の奮闘

    2024-09-07 セキュリティキャンプ アフターイベント 2024-09-14 traP & Zli 合同LT で発表したスライドになります。

    自作Cコンパイラ 8時間の奮闘
  • C言語1000行でテキストエディタを作るチュートリアルをやった

    結果的に1200行を越えましたが。 kilo 成果物はこれ↓ 参考サイトはこれです↓ インスパイア元↓ 感想 C言語は10年ぶりくらいに書いた 進めていくうちになんとなく思い出すことができた 最初にちゃんと授業で学んだ言語なので懐かしく思った Cに出会っていなければプログラミングしてなかったかもしれないので感慨深い しかしこのレベルのメモリ管理は正直たいへん 「この関数で確保したメモリはこっちの関数で開放されるので問題ありません」みたいな この調子でやっていったらバグる未来しか見えない 1000行・1ファイルというコンセプトは良いのだがファイル分けて管理したいナ〜〜と思った 配列や文字列の操作、メモリ管理がやりやすい別の言語で書き直したい Cを書くの大変だな…という感想を持った 速さはともかく他の言語で書きたい もっとimmutableに… お手よりも行数が増えた 1行のif文などでもブ

    C言語1000行でテキストエディタを作るチュートリアルをやった
  • 【C言語】ハァ… 困ったなァ 「未定義動作」にもう疲れちゃって 全然動けなくてェ… - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに どうも、y-tetsuです。 以前、こんな記事でお世話になりました。 お久しぶりです。あい変わらずC言語の学びなおしにいそしんでおります! いやー、C言語ってムズカシイですよね。最初は文法がとっつきづらかったり、ポインタでつまずいたり、慣れてきたら慣れてきたで色んな災いが出てきたり…で、結果「もう疲れちゃって 全然動けなくてェ…」っておもわずヘコたれそうになります…。 最近、筆者がC言語を学びなおしてみて新しく知った事としまして、「未定義動作」というものがありました。なんだこれはァ!?という事で少しずつ調べる中で、これがまァー

    【C言語】ハァ… 困ったなァ 「未定義動作」にもう疲れちゃって 全然動けなくてェ… - Qiita
  • C言語のざんねんなしよう事典

    モダンなプログラミング言語が多数登場した現代においても、C言語は重要な言語です。具体的に言うと、多くのプログラミング言語(あるいは言語ランタイム)がC言語で実装されていたり、OSのAPIはC言語のインターフェース(ABI)で提供されている場合が多かったり、異なるプログラミング言語間で関数呼び出しをしようとするとC言語のABIがベースとなったりします。 そんなC言語ですが、登場時から現代まで、少しずつですが進化を遂げています。その過程では、「この機能は良くなかった」ということが判明し、非推奨になったり削除された機能もあります。この記事では、C言語のそのような「良くなかった」機能を紹介します。 gets 関数 C言語には、誤って使うとバッファオーバーフローなどの問題を引き起こす関数が多数用意されています。例えば、

    C言語のざんねんなしよう事典
  • 書籍が開発者としての資質を強化する。C++エキスパート・高橋晶が選ぶ、人生に影響を与えた5冊

    書籍が開発者としての資質を強化する。C++エキスパート・高橋晶が選ぶ、人生に影響を与えた5冊 2024年8月8日 C++ライブラリアン 高橋 晶 C++語リファレンスサイトcpprefjpを運営し、C++の最新情報を日語で発信している。株式会社Preferred Networksに所属し、スーパーコンピュータのソフトウェア開発に携わっている。 著書として、『C++テンプレートテクニック』(SBクリエイティブ)、『C++ポケットリファレンス』(技術評論社)、『プログラミングの魔導書』(ロングゲート)。 X: @cpp_akira GitHub: faithandbrave 1. 『スイッチ!「変われない」を変える方法』Chip Heath 著、 Dan Heath 著 千葉敏生 翻訳 2. 『習慣の力』Charles Duhigg 著、渡会 圭子 翻訳 3. 『これからの「正義」の話を

    書籍が開発者としての資質を強化する。C++エキスパート・高橋晶が選ぶ、人生に影響を与えた5冊
  • 米国防総省DARPA、C言語のコードからRustへの自動変換実現を目指す「TRACTOR」プログラム開始

    米国防総省DARPA、C言語のコードからRustへの自動変換実現を目指す「TRACTOR」プログラム開始 アメリカ国防総省 DARPA(Defense Advanced Research Projects Agency:国防高等研究計画局)は、C言語のコードからRust言語のコードへ高い精度での自動変換実現を目指す「TRACTOR」(Translating All C to Rust)プログラムの開始を発表しました。 DARPAは軍事技術の開発および研究を行う機関であり、現在のインターネットはDARPAの前身となるARPAが1967年に開始した「ARPANET」がその起源であることはよく知られています。 DARPAが発表したTRACTORプロジェクトは、C言語のコードからRust言語のコードへの自動変換を高い精度で実現することで、過去にC言語で開発された多くのソフトウェアをメモリ安全なソフ

    米国防総省DARPA、C言語のコードからRustへの自動変換実現を目指す「TRACTOR」プログラム開始
  • malloc.c を読む (malloc / free)

    このシリーズではこれらの関数が内部でどのように処理されるのかを調べていきます。 malloc.c を読む (malloc / free) malloc.c を読む (bins) malloc.c を読む (arena) 今回は malloc() free() の全体像を紹介します。 注意としてここでの目的は全体を俯瞰して、詳細を詰めずとも各 bins の役割を理解し、攻撃手法を理解できるようにすることです。それに合わないマルチスレッドや最適化などにおける緻密なトリックやコーナーケースなどは暗黙的に実装されていると仮定します。その詳細についてはソースコードや他の資料を参考にしていただきたいです。 ここで扱う glibc のバージョンは v2.38 です。また glibc のソースコードはブラウザ上で読むことができます。 https://elixir.bootlin.com/glibc/lat

    malloc.c を読む (malloc / free)
  • プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ - 偏見プログラマの語り!

    僕がプログラミングに触れた当時は、プログラミングといえば「まず C 言語」でした。それから 10 年以上が経ちました。学校の授業や企業の研修では未だに C 言語を教えているところがあるようです。関数型プログラミング言語という波が来ている 2012 年にもなって未だに C 言語をやっているというのはまるで進歩が無く残念な気もしますが、比較的多くのプログラマに浸透している共通言語を最初に教えるというのは、一方では喜ばしい事だと解釈する事もできるのかもしれません*1。まぁとにかく、意にせよ不意にせよ現場で プログラム初心者に C 言語を教える羽目になった 人がたくさんいて、プログラム初心者なのに C 言語を学ばざるを得なくなった 若者がたくさんいるということです。 C 言語を教えるときに避けて通れないのがポインタで、プログラム初心者が C 言語を学ぶときにやたらとつまずく人が多いのがポインタ

    プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ - 偏見プログラマの語り!
  • C言語をマスターしたい人はGCCのバージョン14を使いましょう - pyopyopyo - Linuxとかプログラミングの覚え書き -

    C言語(C++を含む)を習得したい人,ポインタを勉強したい人はgcc-14を使いましょう.難しいところは gcc-14 が丁寧に解説してくれます C言語の難しいところ 例を示します.C言語で記述された,たった6行のソースコードです int main() { int buf[10]; buf[10] = 0; return 0; } このソースコードには問題があります.初見でわかるでしょうか? : : : 問題があるのは buf[10]=0 の部分です.C言語でやりがちなミスですが,これがバグやセキュリティホールの原因になります. C言語が難しい理由は二つあります.この手の問題を見逃しやすい点と,この手の問題を理解することが難しい点の二つです gcc 14 に解説してもらいましょう 上記の6行のソースコードをgcc14を使ってコンパイルしてみます ソースコードのファイル名は test.c と

    C言語をマスターしたい人はGCCのバージョン14を使いましょう - pyopyopyo - Linuxとかプログラミングの覚え書き -
  • Exploring the c4... compiler?

    Let’s start at the top: it’s C in four functions — what? And if you open the code you’ll see that, yes, this is true, no cheating: And it works! First you need an existing C compiler to compile c4 and then you can use c4 to run another C program. Say I have this program: // my_program.c #include <stdio.h> int add(int a, int b) { return a + b; } int main() { int a, b, c; a = 99; b = 20; c = add(a,

    Exploring the c4... compiler?
  • MSX-C に関する情報 - Qiita

    はじめに 『MSX-C』関連の情報を集めてみました。 MSX-C 『MSX-C』は ASCII が発売した MSX 用の C コンパイラです。元々は エル・エス・アイ・ジャパン株式会社 の『LSI C-80』の OEM だったようです。 『MSX-C』はアセンブラソースを吐くタイプのコンパイラですので、実行形式ファイルを生成するにはアセンブラとリンカが必要です。 See also: ASCII MSX-C (MSX Resource Center) LSI C-86 (Wikipedia) 準拠している C 言語の規格 ANSI C (1989) よりも前に発売された製品なので、後に制定された規格には準拠しておらず、K&R のサブセット的な実装となっています。例えば、MSX-C で利用可能なデータ型は次の 4 (3) 種類のみです。 型 長さ 範囲

    MSX-C に関する情報 - Qiita
  • PyTorchやPythonなしの純粋なC言語を使用した大規模言語モデルトレーニングツール「llm.c」がリリースされる

    AI体と言える大規模言語モデル(LLM)のトレーニングはほとんどの場合PyTorchPythonを使用して行われていますが、そうしたトレーニングを純粋なC言語のみで実装したツール「llm.c」が登場しました。まだ最適化が行われておらず従来の手法に速度面では敗北していますが、GPT-2のトレーニングを行う実装を約1000行のクリーンなコードで行えています。 GitHub - karpathy/llm.c: LLM training in simple, raw C/CUDA https://github.com/karpathy/llm.c 作者のアンドレイ・カルパシー氏はOpenAIの創設グループの一員で、テスラのAIディレクターだった事もある人物です。 llm.cを使用することで、245MBの容量を持つPyTorchや107MBの容量を持つcPythonを使用せずに大規模言語モデル

    PyTorchやPythonなしの純粋なC言語を使用した大規模言語モデルトレーニングツール「llm.c」がリリースされる
  • C言語向けコルーチン非同期 I/O ライブラリ neco を使ってみた。

    はじめに C言語でコルーチンを扱う方法は色々ありますが、専用の命令を専用の記述方法で実装しなければならなかったりなど、あまりとっつきやすいものではありませんでした。 今日 X/Twitter のタイムラインで見付けた neco はまさにそんな悩みを解消できる物でした。 neco とは neco はコルーチンを使った非同期 I/O ライブラリです。 コルーチン: 開始、スリープ、一時停止、再開、移譲、および結合。 同期: チャネル、ジェネレータ、ミューテックス、条件変数、および待機グループ。 デッドラインとキャンセルのサポート。 ファイルディスクリプタを使った Posix フレンドリーなインターフェース。 ネットワーク、シグナル、ランダムデータ、ストリーム、およびバッファ付き I/O の追加 API。 公正かつ決定論的なスケジューラを備えた軽量ランタイム。 高速なユーザースペースのコンテキス

    C言語向けコルーチン非同期 I/O ライブラリ neco を使ってみた。
  • PlayStation Programming with MIPS Assembly and C

    This course is a deep dive into the world of PlayStation programming! We'll explore the PS1 hardware, understand its sub-components, and learn how to code games using MIPS assembler & the C programming language. We'll also learn how to use a PS1 SDK library paired with a modern development toolchain to be more productive and push fast polygons out of our console. We are about to enter the 5th gene

    PlayStation Programming with MIPS Assembly and C
  • コンマ演算子の使い道の話 - Qiita

    これは何? return の後ろにカンマ演算子で区切ったステートメントを記述し、最右のステートメントを返すことに有用性があるかどうか知りたいのです。 という記述を読み、そこに限定せずに コンマ演算子が役に立つパターンについて考えた。 とはいえ、 return 式, 式; が念頭にある。 そもそも そもそも、コンマ演算子は C 言語に由来する。 と言いたいところだけど、よく知らない。BCPL には無かったようなので、B言語か C言語なのかな。 いずれにせよ、C言語がきっかけで広まったと思う。 可読性の低下に寄与 コンマは演算子以外の用途でも使われるのでコンマ演算子なのかそうじゃないのかを判断するのがめんどくさく、可読性の低下に寄与しやすい。 a=(b,c); // コンマ演算子 a=f(b,c); // 引数区切り a=g((b,c)); // コンマ演算子 a=typeof(b,c); /

    コンマ演算子の使い道の話 - Qiita
  • パソコン暖房の性能を実験で測定する! - Qiita

    今回の実験では、パソコンを動かすとCPUでもGPUでも130W程度の"出力"が得られることがわかりました。 ということは…、 CPUGPUの両方をフル活用したら260Wの暖房になるってこと??? とは限らないかもしれませんが、そこそこ暖かそうですね。 今回の実験で使用したCPU Core i9-13900KはTDPが125Wです。CPUを酷使すると130W程度の暖かさを得られたので、TDP程度をそのまま暖房として使えていると解釈できます。 また、GPUとして使用したRTX3090はTDPが350Wですが、Cinebench実行中にGPU-Zでチップの消費電力を見ると116W程度でした。下の画像の一番下、GPU Chip Power Drawです。 GPUの排熱のうち、温風となって出ているものが主にチップの排熱であると仮定すれば、GPUを使用したときに130Wの暖房になるのは、まあ妥当な気

    パソコン暖房の性能を実験で測定する! - Qiita
  • Z80+C言語で16ビット機級の本格的なゲームが創れるゲーム機(VGS-Zero)を作ってみた - Qiita

    なお、キャラクタパターンテーブル(8KB)は VRAM に展開しなくても ROM のバンク番号を指定して VROM として扱う機能(DPM; Direct Pattern Mapping)もあり、その機能を使えばキャラクタパターンテーブルの 8KB を RAM として代用することもできます。 ROM の特定バンクをキャラクタパターンにロードする DMA 機能があるので、例えば RPGSTG のマップなど、ROM バンクから色々なデータを読み込むためのロード・エリアとして活用することを想定しています。(キャラクタパターンテーブル来の用途よりも代用の用途の方がメインになる想定です) VRAM サイズを 16KB にしたのは Z80 でのプログラミングをしやすくするため(Z80 ファースト) です。 VRAM と RAM が各 16KB になっているからこそ、I/Oを一切使わずに RAM

    Z80+C言語で16ビット機級の本格的なゲームが創れるゲーム機(VGS-Zero)を作ってみた - Qiita
  • スーパーファミコンで mruby/c を動かす

    はじめに mruby/c という軽量な Ruby 処理系をスーパーファミコンに移植し、標準出力に文字列を出力する簡単な Ruby コードをエミュレータ上で動かしたので、その移植作業を記事にまとめました。 この記事で動かしたコードは次のリポジトリにあります。 この移植作業を行うという発想は、2年前の RubyKaigi 2022 で行われた mruby/c を Mega Drive 上で動かすという Yuji Yokoo さんによる発表(https://rubykaigi.org/2022/presentations/yujiyokoo.html)がベースとなっています。 元々スーパーファミコン上で動くコードを趣味で書いたことはあったのですが、最近スーパーファミコンで使われている 65C816 という CPU 向けの(まともに動く) C コンパイラが存在することを知ったので、今回移植作業に取

    スーパーファミコンで mruby/c を動かす