タグ

qiitaとcに関するnabinnoのブックマーク (21)

  • 君はkiloを知っているか - Qiita

    Advent calendar初参加でした(// //) 期日少し遅れてごめんなさい💦 kiloとは kiloとは1000行前後のC言語ファイル1つで構築されるテキストエディターである。 それを作成してみるハンズオン(「Build Your Own Text Editor」)が公開されており、今回それをしてみたので、報告する。 きっかけ Vimがどのように文字列を表示しているのかが不思議であったので、いつか調べたいと思いつつ、C言語をしっかりと使ったことはないし、ソースを読んでもなんとなく以上のことはわからなかった。 (特に、どこで画面上の文字(の位置)が制御されているのか全然分からなかった!) そんな中、C言語でエディタを作るというチュートリアルが公開されていたことに気付いたので、練習として取り組んでみることにした。 チュートリアルの章立て Setup(セットアップ) Entering

    君はkiloを知っているか - Qiita
  • どうやら Erlang をコンパイルした時のCコンパイラによって Elixir の性能がかなり異なるようだ - Qiita

    この記事は「fukuoka.ex Elixir/Phoenix Advent Calendar 2019」16日目です。 昨日の「fukuoka.ex Elixir/Phoenix Advent Calendar 2019」は @pojiro さんの「作って学ぶPhoenix、IoTサーバー」でした。 前回は「#NervesJP Advent Calendar 2019」12日目と13日目にそれぞれ「Nerves の可能性は IoT だけじゃない(前編)〜ElixirとPelemayで世界の消費電力を抑える」と「Nerves の可能性は IoT だけじゃない(後編)〜Nervesで世界の消費電力を抑える」をお届けしました。 さて2019年11月の頭にこんなツイートをして反響を呼びました。 今日知った衝撃の事実。Elixir は,Erlang を GCC でコンパイルするのか,Clang で

    どうやら Erlang をコンパイルした時のCコンパイラによって Elixir の性能がかなり異なるようだ - Qiita
  • Linux メモリ管理を理解したい - Qiita

    Linux カーネルのメモリ管理方法について、勉強したことをまとめる。 メモリ管理はハードウェアに強く依存するため、x86_64 かつ OS起動後に 64bitプロテクトモード に移行したあとに話を絞る。また、OS は CentOS7.6、カーネルは次のバージョンを利用する。 ]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) ]# uname -a Linux localhost.localdomain 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux 概要 ノイマン型アーキテクチャ コンピュータの基的な構成のひとつ。次の図が参考になる。 ほぼ全てのコンピュータが、このアーキ

    Linux メモリ管理を理解したい - Qiita
  • Ubuntu に cmake を install する。

    apt-get でうまくいかない apt-get で cmake を install したけど、うまく動かなかった。 Inconsistency detected by ld.so: dl-version.c: 224: _dl_check_map_versions: Assertionneeded != ((void *)0)' failed! しようがないから手動でインストール ソースコード落として、自分でコンパイルしたらできました。 https://cmake.org/download/ ここから最新を落とす $ wget https://cmake.org/files/v3.4/cmake-3.4.0-rc3.tar.gz $ tar xvf cmake-3.4.0-rc3.tar.gz $ cd cmake-3.4.0-rc3/ $ ./configure $ make $ su

    Ubuntu に cmake を install する。
  • ZEAM開発ログ v.0.4.3 型多相かつ型安全なNIFでオーバーフローを検出する - Qiita

    はじめに ZACKYこと山崎進です。 整数の加減乗算のオーバーフローを検出する方法がわかりましたので,報告します。 「ZEAM開発ログ 目次」はこちら 整数のオーバーフローを検出する方法 __builtin_*_overflow という関数を使います。 符号付き64ビット整数だったら,__builtin_saddl_overflow になります。 ドキュメントはこちら。 Clang Language Extensions — Clang 4 documentation C言語のコードはこんな感じです。 static ERL_NIF_TERM asm_1_nif_ii(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { long a, b; if(__builtin_expect((enif_get_int64(env, argv[0

    ZEAM開発ログ v.0.4.3 型多相かつ型安全なNIFでオーバーフローを検出する - Qiita
  • ZEAM開発ログ v.0.4.0 型多相かつ型安全なNIFをC言語で書いてみる - Qiita

    はじめに ZACKY こと山崎進です。今回から micro Elixir / ZEAM の開発に向けて新シリーズです。micro Elixir / ZEAM 構想についてはこちらの資料をご覧ください。 「耐障害性が高くマルチコア性能を最大限発揮できるElixir(エリクサー)を学んでみよう」 「ZEAM開発ログ 目次」はこちら さて題 今回から新シリーズということで,コード生成について検討してみたいと思います。まず最初は算術演算について型多相で型安全なコードを記述してみたいと思います。 2018/09/11 追記 Dai MIKURUBE さん @dmikurube のツイート 作るもの・作ったものの設計をドキュメント化するときには、「なぜそうするか」「なぜこうはしないか」の理由と問題の背景、それを補助する実験・実測値が一番大事で、設計そのものの詳細を微に入り細に入り記述しておいてもドキ

    ZEAM開発ログ v.0.4.0 型多相かつ型安全なNIFをC言語で書いてみる - Qiita
  • なぜ「C」から始まるのか? - Qiita

    はじめに なぜ、「C」から始まるのか?をテーマにキュレーション(Curation)してみました。 キュレーションとは、特定の視点を元に情報を収集・選別し、一般に共有することを表すまたは収集した情報を分類し、つなぎ合わせて新しい価値を持たせて共有すること。 Cドライブ Windowsパソコンでは通常「Cドライブ」が割り当てられており、OSが入っていることでシステムドライブと呼ばれる。また、別のドライブがあったとして「Dドライブ」や「Eドライブ」などになっており、「Aドライブ」や「Bドライブ」は使われない。 理由 Windowsが登場するよりも前のIBM PCでは、Aドライブにシステムディスク、Bドライブにソフトやデータ用のディスクを挿入しての運用を前提としていました。このディスクとは、今の若い人は写真やアイコンでしか見たことがないフロッピーディスクのことです。のちに登場したHDD(ハードディ

    なぜ「C」から始まるのか? - Qiita
  • valgrindでC/C++のメモリリークを発見する - Qiita

    ==23525== Invalid free() / delete / delete[] / realloc() ==23525== at 0x1000089DF: free (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so) ==23525== by 0x100000F4F: main (sample.c:8) ==23525== Address 0x10081f510 is 0 bytes inside a block of size 4 free'd ==23525== at 0x1000089DF: free (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwi

    valgrindでC/C++のメモリリークを発見する - Qiita
  • ZEAM開発ログv0.1.2 AI/MLを爆速にしたい! Flow のコードを OpenCL で書いてみる〜CPU編 - Qiita

    今回は,いよいよGPUを駆動するプログラムを書いてみたいと思いますが,その前段階として,OpenCLを使ってCPUのポテンシャルを使い切ってみたいと思います。 OpenCLとは? OpenCLは,アップルによって提案され,現在は標準化団体クロノス・グループの OpenCL Working Group によって策定されている標準規格で,マルチコアCPUGPU,DSP,FPGAなど,異なる計算資源を活用するコンピュータシステム(ヘテロジーニアス環境とか,ヘテロジーニアス・コンピューティングとか呼びます)でのクロスプラットフォームな並列プログラミングフレームワークです。 ヘテロジーニアス環境ということは,ほぼ同一のプログラムで,マルチコアCPUGPUもDSPもFPGAも駆動できます。 クロスプラットフォームということは,ほぼ同一のプログラムで,MacでもLinuxでもWindowsでも動作し

    ZEAM開発ログv0.1.2 AI/MLを爆速にしたい! Flow のコードを OpenCL で書いてみる〜CPU編 - Qiita
  • 大学での初心者に対するプログラミング講義ではC言語を使うべきでない - Qiita

    今日、大学に入って最初のプログラミングの授業があった。それについて少しばかり思うことがあったのでここに記す。以下の文章は、工学部情報系学科一回生の、最初のプログラミング授業について述べたものである。タイトルにもある通り、この文章は「初心者に対する」講義について言ったものであり、機械制御を専攻する学生に対する講義などを言うわけではない。 最初の言語がC 結論から述べよう。最初のプログラミング言語にC言語は向いていない。できないとは言わないが(私が最初に触れた言語もCだが)、より有力な候補がいくらでもある。私の所属する学科には機械分野に進む人も多いので、それに使われるCを、という思惑もあるのだろう。しかし、初心者が「プログラミングを」学ぶ言語としてはお世辞にも良いとは言えない。私が思うプログラミング初心者に向いた言語とは、次の条件を満たすものである。 現在普及している 環境構築が容易(私の大学

    大学での初心者に対するプログラミング講義ではC言語を使うべきでない - Qiita
  • The Story of Method Lookup - Qiita

    おおむね以下の点を理解することを目標に、CRubyのメソッド呼出がどのようなフローで実行されているかを見ていく。対象バージョンは2.4.1。 Rubyで定義されたメソッド、C拡張で定義されたメソッド、コア内部で実装されたCのメソッドはそれぞれCRuby内部でどういったデータ構造で保管されているか それらはそれぞれどのようなアルゴリズムで検索されるか それらはそれぞれどのような流れで実行されるか メソッドキャッシュはどのように実装されており、どういう時使われるのか バックトレースの管理などメソッド体の処理以外には何が行なわれているのか send命令とopt_send_without_block命令とrb_funcallの間では何が異なるのか なおこの記事のタイトルは、RubyConf 2015の時 Messenger: The (Complete) Story of Method Look

    The Story of Method Lookup - Qiita
  • Bash on Ubuntu on WindowsでClangをビルドするまで - Qiita

    概要 題名通りです。Windows 10(64bit)にClangをBash on Ubuntu on Windows(以下BUW)で入れました。 以下はそのメモ書きです。 警告:ただClangを使いたいだけの人はapt-getすればClang3.8まで入ります。以下の記述は自力ビルド用です BUWを導入 これには次の記事を参照しました。 Bash on Ubuntu on Windowsをインストールしてみよう! Windows 10がビルド1607・OSビルド14393.693だったせいか、「ホスト名の明記」の項目で見事に詰まりました ただし「sudo: unable to resolve host」といった英字表記ではなく日語表記でしたが…… これの解決には「sudo: unable to resolve host が表示されたら」を参照しました エラーメッセージが出ていてもコマン

    Bash on Ubuntu on WindowsでClangをビルドするまで - Qiita
  • Elasticsearch にインデックスを生成しようとしたら Ruby の C 拡張ライブラリをデバッグしていた話 - Qiita

    はじめに この記事は CrowdWorks Advent Calendar 2016 12日目の記事です。 昨日のエントリーは @nasum さんによる「nasneの容量をシェルスクリプトでSlackに通知する」でした。 先日起きたことを、ありのままに1話します。 MySQL にあるデータを Elasticsearch (以下 ES と略) にインデックスしようとしていたと思ったら、いつの間にか Ruby の C 拡張をデバッグしていた。な、何を言ってるのか (ry おまえは何を言っているんだ 三行でまとめると、 Ruby を使って ES にインデックスを作ろうとしたら予期しない現象に遭遇して、 原因を探ろうとしたら C 拡張で実装されている箇所だったので、 しょうがないからデバッグする方法を調べた という話です。 発端 事の起こりは、自社サービスのデータベースに溜まっているデータをより効

    Elasticsearch にインデックスを生成しようとしたら Ruby の C 拡張ライブラリをデバッグしていた話 - Qiita
  • CとGolangの境界 - Qiita

    C言語 Advent Calendar 2016を書く人が少ないので、、 C言語を触っていたころを思い出して書いてみようと思いました。 ここから 前回、マルチプラットフォーム対応したライブラリGolangを紹介しましたが、 実際のところ、どの程度c-sharedしたライブラリを利用する機会があるのでしょうか。 GocgoというC/C++のライブラリと連携する機能をサポートしており、 手軽にGoからC/C++APIを呼び出せます。 しかしC/C++からGoを呼び出す機能は、使いみちが結構限られており、 主な使いみちは、Goで実装された機能を 他言語から利用したい場合に限られるのではないかと推測します。 もうちょっと具体的にいうと、 Goで開発された機能を他言語にポーティングするのが面倒だから、 c-sharedでライブラリ化して他言語から呼び出しちゃおうっていうことです。 c-share

    CとGolangの境界 - Qiita
  • [C言語] 共有ライブラリと静的ライブラリを整理する - Qiita

    なんとなく分かった気でいるふたつのライブラリ。 それを小さなテストコードを使いながら整理してみます。 (ちなみに今回紹介するのはMacでのものです。Linuxではフォーマット、コンパイル方法などが異なります) 静的ライブラリをコンパイルする まずは静的ライブラリです。 ちなみにMacではMach-Oというフォーマットを使います。 (Linuxでは「ELF(Executable and Linking Format)」というらしい) こちらの記事が分かりやすかったです。 また、静的ライブラリはオブジェクトファイルをまとめたただのアーカイブです。 (なのでar(アーカイブ)コマンドを使う) 例として以下のように静的ライブラリの中身を定義しました。

    [C言語] 共有ライブラリと静的ライブラリを整理する - Qiita
  • mruby の String から C 言語の文字列を取り出す正しい方法 - Qiita

    Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up

    mruby の String から C 言語の文字列を取り出す正しい方法 - Qiita
  • C/C++開発環境 - Qiita

    Windows/Linuxで両方で動作する成果物を想定。 有償のツールは理解が得られる方が稀なので除外。 仕様書 外部仕様 Word/Excelが手軽だけど差分が追いにくい。 Markdown+PandocかSphinxでPDF提出がいいかな? Pandoc - About pandoc Sphinx-Users.jp :: ドキュメンテーションツール スフィンクス Sphinx-users.jp 内部仕様 きちんと書いてあればDoxygenで十分だと思う。 Cしか対応していないみたいだけどdocuriumの方がgitとの親和性が高くて(tag付された結果をまとめて解析してくれるみたい)出力結果も今風にできてる。 Doxygen github/docurium インセプションデッキ 作っておくと上司/部下/協力メンバで方針を合わせやすい。 ネスケラボ » インセプションデッキ ソースコード

    C/C++開発環境 - Qiita
  • apt で unpacked なパッケージを正常にインストールする - Qiita

    aptitude search libc6 とかすると、左側に flag がついて検索結果が表示されます。たいてい i (installed) か p (purged) になっています。 uda@host$ aptitude search libc6 i libc6 - 組込用 GNU C ライブラリ: 共有ライブラリ p libc6-dbg - 組込用 GNU C ライブラリ: 分離したデバッグシンボル i A libc6-dev - 組込用 GNU C ライブラリ: 開発用ライブラリおよびヘッダファイル p libc6-dev-i386 - Embedded GNU C Library: 32-bit development libraries for AMD64 c libc6-i386 - 組込用 GNU C ライブラリ: AMD64 用 32 ビット共有ライブラリ p libc6

    apt で unpacked なパッケージを正常にインストールする - Qiita
  • Common Lisp に中置記法を入れようとしたら C 言語もどきになった - Qiita

    ストーリー あるデータ構造を、 Common Lisp で実装しようと思い立ちました。そのデータ構造には、既に C 言語での実装があったので、「まあ元々の論文を読むのは面倒だし、とりあえずアルゴリズムをコピペするか」と思っていました。 そこで私は思ったのです: Common Lisp の配列参照は面倒すぎる! 例えば、以下の C の式を考えます:

    Common Lisp に中置記法を入れようとしたら C 言語もどきになった - Qiita
  • 【C,C++,Python,JavaScript】EdisonでLチカ - Qiita

    組込みerなら,何でも初めはLチカから. プログラム MRAAライブラリの導入 EdisonのIOを制御するために,IntelがMRAAという抽象化ライブラリを提供しています.ソースコードはこちら. このライブラリは,購入直後や,Intel発行のバイナリを書き込んだ場合には,既に導入されており,特にインストールすることなく使用できます.ubilinuxなど,自分でLinuxをインストールした場合は,以下のように 先にGitHubから最新版のswigをインストールし, 次にmraaをインストールしてください. (#は管理者権限で行うコマンドです) # opkg install git cmake # Yocto Linuxの場合 # apt-get install git cmake autoconf byacc yodl # Debianの場合 $ git clone https://gi

    【C,C++,Python,JavaScript】EdisonでLチカ - Qiita