タグ

技術とC言語に関するmohnoのブックマーク (17)

  • C言語でWASMインタプリタを実装した話

    概要 公式のcore testが全て(UTF8, WAT, SIMD関連のものは除く)通るWASMインタプリタをC言語でフルスクラッチで実装した。自作WASMランタイムで省略されがちなValidation Stageも実装した。この記事はWebAssembly Advent Calendar 2023の三日目の記事である。 目的 このWASMランタイムを実装するにあたり、「できるだけ仕様に従って実装する」ことを心掛けた。WASMの仕様書は以下のissueが立つほど読みにくいものとなっているが、ランタイムをどのように実装すべきかが詳しく書いてあり、一応仕様書を頑張って読めばランタイムが作れるようになっている。 この自作WASMランタイムの目的は、できるだけ仕様に従った実装を与えることで、仕様の理解を助けることである。早さや効率性よりも分かりやすさを優先しているため、実用には向かない。仕様書を

    C言語でWASMインタプリタを実装した話
    mohno
    mohno 2023/12/03
    WASMのバイトコードを実行するんじゃなくて文法を解釈するのか。なんかスゲェ。「WASMランタイムを実装する中で、仕様書にバグや不明瞭な点を見つけて報告した」「WASMの命令は抽象度がかなり高い」←そりゃ理解も進む。
  • https://hccc.contest.seccon.jp/

    mohno
    mohno 2023/09/28
    「人間Cコンパイラコンテスト(HCCC)とは文字通り競技者自身がCコンパイラとなり C言語からアセンブリを生成し,その時間と正確さを競う競技」←意味が分からないとは言わないが、コンテストってほど参加者がいるのか。
  • プログラムを動かす時にメモリがどのように割り当て・解放されるのかをめちゃくちゃわかりやすいイメージ画像で解説してくれるサイト「Memory Allocation」

    コンピューター上でプログラムを動作する際に必要になるのがメモリです。プログラム自体をメモリに読み込む必要があるのはもちろん、プログラムが行う動作はほとんど「メモリから値を取りだして計算し、メモリに保存する」であるといっても過言ではありません。プログラムが動作する際にメモリがどのように管理されているのかについて、ベテランプログラマーのサム・ローズさんがブログで解説しています。 Memory Allocation https://samwho.dev/memory-allocation/ C言語の標準ライブラリには「malloc」と「free」という2つの関数が用意されています。この2つはなんと1979年のUnix v7から存在している歴史ある関数で、mallocがメモリの割り当てを担当し、freeがメモリの解放を担当しています。サム・ローズさんの解説は「この2つの関数の中身を自分で実装する」

    プログラムを動かす時にメモリがどのように割り当て・解放されるのかをめちゃくちゃわかりやすいイメージ画像で解説してくれるサイト「Memory Allocation」
    mohno
    mohno 2023/05/24
    ものすごく単純化して説明してるね。一時期はメモリー効率とかベンチマークを気にして、mallocの内部処理はやたら複雑化していたんだよね。潤沢なメモリーが普通になった今はどうだか知らないけど。
  • Cコンパイラを作ろう!

    こんにちは、21Bのseasonです。この記事はtraP夏のブログリレー3日目の記事です。 自作Cコンパイラでセルフホスト達成しました。 リポジトリ: https://github.com/season1618/c-compiler/tree/main 自作Cコンパイラでセルフホスト達成しました!!!!!!🎉🎉🎉https://t.co/8fLIAJWksQ pic.twitter.com/2fgH5sKoZ0 — season (@season1618) July 27, 2022 実際にどうやって作るかを書くと長くなるので、ここでは経緯とか完成までの流れとかを書こうと思います。一応開発メモは以下に上げておきました。 開発メモ: https://github.com/season1618/note/blob/main/cs/c-compiler/index.md 経緯 大学の講義で

    Cコンパイラを作ろう!
    mohno
    mohno 2022/08/13
    よく作るもんだなあ、と思ったら、「まず初めに」「低レイヤを知りたい人のためのCコンパイラ作成入門(以後compilerbook)を読みます」←植山類さんだった。
  • 開発者から見た V 言語とその(誇大)広告について

    V 言語について 一時期話題になった V 言語ですが、みなさまは覚えているでしょうか。 Go にインスパイアされたシンプルな構文、NoGC かつ Rust のような難しさもないメモリ管理。小さいバイナリサイズと高速なコンパイル、ホットリロードなど、様々な目玉機能を謳って登場した言語でした。 発表するが公開しない。バイナリは公開するがオープンソースにはしないなど、期待感をあおる情報の出し方をしたのもあって、当初こそそれなりに話題になりましたが、今となっては誰も話題にしなくなった感は否めません。 ところで、会社が消滅して無職になった私は数か月前から V 言語の開発に参加しており、執筆時点では全体で 23番目、直近1か月で 7番目の Contributor です。 私が知る限り、アクティブに活動している日人の開発者はほとんどいません。 そこで、コミュニティにも慣れ V 言語のことが少しづつわか

    開発者から見た V 言語とその(誇大)広告について
    mohno
    mohno 2021/01/04
    「基本的に V コンパイラは C 言語へのトランスコンパイラとして実装されています」←わざわざ使う理由があるかなあ。
  • C言語から0番地へアクセスする方法についての個人的まとめ - /var/log/hikalium

    発端はuchan_nos氏によるこのツイートでした。 C言語で、当にメモリの0番地にデータを書きたいときはどうすりゃええの?— うー@技術書典8 Day1う31 BitNOS (@uchan_nos) 2020年2月12日 それに対する私のリプライ: uint8_t *p = 1; p--; *p = v;— hikalium (@hikalium) 2020年2月12日 私はこれで話が終わると思っていたのだが、どうやらそうではなかったらしく、色々な視点からの意見が加わりながら、話は混沌を極めたのでした…。 ということで、ここに私のこのツイートに対しての見解とか、わかったことをまとめておこうと思います。 私のリプライの背景について uchanさんが求める「0番地にデータを書きたい」という課題設定を、私はこのように解釈しました。 C言語において、整数0をポインタに変換すると、それはNULL

    C言語から0番地へアクセスする方法についての個人的まとめ - /var/log/hikalium
    mohno
    mohno 2020/02/16
    そんなん規格上は未定義というだけでコードは生成するんじゃ?と思ったら、「最適化を有効にするとやはりud2」←へぇぇ。(「余計なことを」感が) ところで、Compiler Explorer すごいな。
  • 技術推薦図書

    注) 2016年辺りのまとめなので、新しめのが入ってないのと、新しめの特定の技術は2020年現在だと通用しないが多いです。 古典含め普遍的な物も多々あるので、現在も通用する物が多いはずです。リンク先が旧版のも有るので注意。 Javaメインの会社の棚です。あと、じつは洋書版もあります。

    技術推薦図書
    mohno
    mohno 2020/01/08
    この方?→ https://www.wantedly.com/users/325591 「言語理解」で「Java」「Haskell」「Scala」と並んで出てくるのが「C」なんだな。
  • 低レイヤを知りたい人のための Cコンパイラ作成入門

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

    mohno
    mohno 2018/11/01
    “本書”って、なるほど、まだこれからなのか→ https://twitter.com/rui314/status/1057831950470144001 これを読んで理解できる人、けっこうスキルがある人だろうなあ。
  • C2 Programming Language

    Another problem solved.. (2023-09-10 by Bas vd Berg) One of the big changes between C and C2 is macros. C has them, C2 doesn't. Also every C program larger than Hello World seems to need them. Replacing macros with something else is not trivial. Macro functionality can be split up in several areas: Constants Feature Selection Generics Code reuse Constants Constant macros are easily replaced by nor

    mohno
    mohno 2018/03/13
    ここか。まあ、ヘッダファイルは C++ でも障害だからなあ。当然のごとく文字列型はない。配列とポインタの関係が変わっているのかはよくわからない。
  • C言語の現代化を目指すC2

    AI、ML、データエンジニアリングInfoQトレンドレポート-2023年9月 今回のポッドキャストでは、InfoQ編集部のメンバーとInfoQの友人たちが、毎年恒例のトレンドレポート作成のプロセスの一環として、AI、ML、データエンジニアリングの領域における現在のトレンドについて議論する。これらのレポートは、InfoQの読者に注目すべきトピックのハイレベルな概要を提供し、また編集チームが革新的な技術に焦点を当てるのに役立つ。InfoQ.comで閲覧可能なレポートとトレンドグ...

    C言語の現代化を目指すC2
    mohno
    mohno 2018/03/13
    ルルーシュは関係なさそうだ(←ボカッ) 「C言語の望ましくない部分としては、コンパイル時間を大幅に遅くするヘッダファイルの使用、複雑な型定義構文」←配列は? mainを見る限り文字列型はなさそうだな。
  • アバストが自社のマシンコード逆コンパイラをオープンソース化

    Skip to main content >閉じる

    アバストが自社のマシンコード逆コンパイラをオープンソース化
    mohno
    mohno 2018/01/30
    なかなか興味深いが「2つの高レベル言語での出力: C および Python 類似言語」ということで、C++プログラムを読み込ませると、無理やりCレベルで結果を出力するんだな。あと「Disassembled code」もCで出力されるようだが。
  • この10年間のプログラミングの変化|山本一成🚗TURING

    はじめましてnoteの皆さん、名人を倒した将棋プログラムPonanzaというものを作っていた山一成と言います。この度ははてなから引っ越してきました。2018年になったので新しくブログ書いてみようかなぁ〜ってはじめました。 私がプログラミングをはじめたのは大学生だった時ちょうど10年前でした。そして今2018年になって、同じプログラミングにしても色々変わったなぁという印象です。今日はそのへんを皆さんと共有できたらなぁ〜と書きました。 あくまで私の観測範囲内での話をすればですけど、10年前のプログラミングの世界は速く動くことがかっこよかったです。実際にかっこいいだけでなく、必要とされる場面も多かったような気がします。私が愛用しているプログラミング言語はC++(シープラスプラス)と言って、まあそれは高速に動作することだけを意識して作られた言語でした。 加えて、今から考えれば一体なんでそんなトリ

    この10年間のプログラミングの変化|山本一成🚗TURING
    mohno
    mohno 2018/01/08
    「C++…高速に動作することだけを意識して作られた言語」「昔のプログラマは力を失いはじめています。コンポーネントをうまく駆使するようなプログラミングをしないと高い生産性を出せなくなってくるでしょう」
  • 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

    mohno
    mohno 2014/10/02
    「プロファイルを取ってみるとsprintfが結構な時間を食っていて」←高速化で原因を調べるのは重要だね。「IPv4アドレスを文字列化」←場合によるけど、私なら関数を書き換えてしまうだろうな。
  • Cコンパイラをスクラッチから開発してみた(日記)

    以前に8ccというCコンパイラをゼロからひとりで開発していたときのログです。40日でセルフコンパイルできるところまで到達しています。日付はすべて2012年です。コードとヒストリはすべてGitHubで見れます。 3月4日 というわけでコンパイラを作っているわけだけど、1000行くらい書いたらそれなりに動き始めてきた。こんなのも動くし: int a = 1; a + 2; // => 3 こういうのも通る。 int a = 61; int *b = &a; *b; // => 61 文字列は文字の配列として扱っていて、配列をポインタに成り下げる振る舞いも実装しているので、こういうのも通る。関数呼び出しもある。 char *c= "ab" + 1; printf("%c", *c); // => b 前回もこのあたりはがんばって実装したからここまで作るのはわりと単純作業かも。二回目だから配列とか

    Cコンパイラをスクラッチから開発してみた(日記)
    mohno
    mohno 2014/09/07
    「C MAGAZINE」が半年かけてもできなかったのに:-) (当時とは開発環境がだいぶ違うけど) 「Cを書き始めて15年くらいは経つと思うけど初めて完全にCの型の文法を理解した気がする」
  • 「スパゲッティコードを召し上がれ♪」2013年12月2日13時時点暫定ランキング #codegolf #c - CodeIQ Blog

    CodeIQ中の人、millionsmileです。 すでに170人が挑戦しているゴルフ問題の暫定ランキング発表です。 goto風味のスパゲティ・カラマッタリーノのお味はいかがでしょうか? またまた神級の壁を超える人がでてきましたよ。美味しくなってきました。 出題者のOzyさんによるコメント付きで暫定ランキング発表です。 ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ Ozyです。 12月2日、13時現在のランキング表です(敬称略)。 同じ順位の場合は、提出の早かった順に掲載しています。また、31位以降は圏外としていますが、名前はランク順になっています。 新たに神級の壁を突破したのは、 hogeover30さん, climpetさん, rotary-oさん, shogoeさん, ぬさん, shiracamusさん でした。 相変わらず、上級者が増殖中で怖いです…(´Д`;)

    「スパゲッティコードを召し上がれ♪」2013年12月2日13時時点暫定ランキング #codegolf #c - CodeIQ Blog
    mohno
    mohno 2013/12/03
    最低でも、あと2文字は縮めなきゃいけないのかあ。時間ねー。っつか、技術力ねー。 #codeiq
  • ループをたくさん回す処理を高速化する初歩の初歩。 - このブログは証明できない。

    テキスト処理を中心にやっていましたが、画像処理に興味が出てきて、さっそくアプリを作りました。もともと下の記事のあたりでユーザーとして画像処理に興味を持って、当然の流れながら、自分でもつくってみようと。 Color Splash + TiltShift Generator + Instagramの写真加工が面白い。 - このブログは証明できない。 で、何かを間違えて、普通の画像処理ではなく、カメラの映像をリアルタイムに加工しはじめました。そうすると、パフォーマンスがかなりシビアなんですね。 iPhoneでカメラの映像をリアルタイム画像処理してみる。 - このブログは証明できない。 全ピクセルを操作しなければなりませんから、ループをたくさん回す必要があります。なんとか高速化できないかと考えてみたところ、あっさり高速化に成功しました。私が気づくぐらいですから、初歩の初歩なんだと思います。 追記:

    mohno
    mohno 2010/10/31
    「かなり高速化できました」←どんなコンパイラ?と思ったら Objective-C なのか(?)。あまりに前時代的だが、最適化オプションを忘れているだけってこと?
  • やる夫ブログ やる夫で学ぶプログラミングC言語入門 その1

    2 : ◆yLAhgX0PfU :09/12/26 22:07:50 ID:P6tTRkg5 ┏           ┓ C言語 授業中 ┗           ┛ ∧∧ l: _つ/      /;:’ ∧_∧┌ _||/ (,,゚Д゚).⊃ /      / l::゚/:(`   ,,/:|  ̄||.,o ∧_∧ . l:_つ/      / l//:’と   ||  :| .o'  ̄o , ・∀・) ⊃/       /;:’ ∧_∧┌ _||/ l: _つ/        / l:’/:(`   ,,/:|  ̄||.,o ,ヽ⊃ ./        / l//:’と   ||  :| .o'                     ∧∧ ⊃ .つ / ): /       /;:’ ∧_∧┌ _||/                      .,(Д゚ ,,)_┐ / /    

    mohno
    mohno 2010/01/06
    ポインタ使わないなら“C言語”の意味ないと思うけど、このペースでそこまで辿り着くのは難しそうだなあ。
  • 1