Learn up-to-date, idiomatic C++ with code examples, concise explanations, cheat sheets and infographics. -- Lerne aktuelles, idiomatisches C++ mit Code-Beispielen, knappen Erklärungen und Infografiken. -- 学现代的C++ // 代码示例,简洁的说明和图表
No hidden control flowIf Zig code doesn’t look like it’s jumping away to call a function, then it isn’t. This means you can be sure that the following code calls only foo() and then bar(), and this is guaranteed without needing to know the types of anything: Examples of hidden control flow: D has @property functions, which are methods that you call with what looks like field access, so in the abov
これは、言語実装 Advent Calendar 2020 19日目の記事です。 最近は、コンパイラやインタプリタなどの言語処理系や、それに類するものを作る人が増えてきています。(私の周りだけかもしれませんが。) しかし、もう一歩進んで、コンパイラ基盤を作ってみたという話はあまり聞きません。 コンパイラ基盤は、それの対象とするアーキテクチャについてや、それ自体の使い勝手を考えるのが非常に面白いものです。また、コンパイラ基盤を作る中で、コンパイラや計算機自体についてより深く学ぶことが出来ます。 この記事では、私が開発中のコンパイラ基盤を例として、コンパイラ基盤について語っていきます。 そもそもコンパイラ基盤とは コンパイラ基盤と言えば、近年色々な所で目にするのがLLVMです。 LLVMを使うことで、コンパイラの複雑で面倒な部分を避けつつ、コンパイラを構成することができるようになりました。 下
序 本書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶための本である。本書はすでに学んだことのみを使って次の知識を説明する手法で書かれた。C++コンパイラーをC++で書く場合、C++コンパイラーのソースコードをコンパイルする最初のC++コンパイラーをどうするかというブートストラップ問題がある。本書はいわばC++における知識のブートストラップを目指した本だ。これにより読者は本を先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。 C++知識のブートストラップを意識した入門書の執筆はなかなかに難しかった。ある機能Xを教えたいが、そのためには機能Yを知っていなければならず、機能Yを理解するためには機能Zの理解が必要といった具合に、C++の機能の依存関係の解決をしなければならなかったからだ。著者自身も苦し
去年の10月、私が所属している 会社 の部署で、組み込みファームウェアの開発をC言語からC++に切り替えました。C++のクラス、リソースの自動クリーンアップ、パラメータ多相、そして強化された型安全性などは、汎用OSをデスクトップ機で稼働している時と同様、リアルタイムOS(RTOS)やベアメタル上でも便利です。C++を使えば、安全で表現豊かなファームウェアを書くことができます。 しかしC++のこの自動的な魔法は諸刃の剣とも言えます。いくつかの機能は、組み込み環境 ^(1) には搭載したくないシステムのファシリティに依存するからです。ツールチェーン周りをどうするかも厄介です。 memcpy やアトミック操作、ハードウェア固有の浮動小数点関数などの重要なファシリティが提供されるので、 libgcc と libstdc++ を完全に破棄するのではなく、特定の部分を避けて使わなくてはなりません。 こ
こんにちは、吉岡(@yoshiokatsuneo)です。 Java, C#, C++、Objective-C, Ruby, Python, JavaScript, Java, Swift...などなど、現在は非常に多くのプログラミング言語が使われていますが、多くの言語の源流となっているのがC言語です。 もともとC言語は、Linux、Mac OS Xの源流となるUNIXの開発のために作られた言語で、今でもLinuxはC言語で書かれていますし、多くのOSがCやC++で開発されています。 さらに、C言語はコンピュータを直接操作することに向いているため、組み込みやIoT(Arduino, mbed等)などの用途でも広く使われています。 C言語の文法は、多くのプログラミング言語の文法に影響を与えています。 名前にCが含まれているC++、C#、Objective-Cはもちろん、Java, JavaSc
僕は先日、「コンパイル時Cコンパイラ」なるプログラムをつくって、公開した。 「コンパイル時Cコンパイラ」とは、コンパイルするとC言語プログラムのコンパイルが行われるというようなC++プログラムである。 C++のコンパイル中に C言語プログラムのコンパイルを行う、 "コンパイル時Cコンパイラ"をつくりました #ELVMhttps://t.co/kKiLU3rLFX— うどん (@kw_udon_) 2016年11月18日 自分で書いておいてなんだが、「なんのこっちゃ」という感じではある。(ちゃんと記事中で説明する。) 実際、変なプログラムではあるのだが、とても嬉しいことに多くの人に面白がっていただき、予想だにしなかった大きな反響をいただいた。 Hacker Newsで1位になったり、LLVMの公式ブログで紹介されたり、果てはC++の作者であるBjarne Stroustrupにも言及されるに
概要 現在僕が使っている開発環境を共有して、少しでもマシな開発環境にするアドバイスが欲しい。 ノウハウとしてはC++寄りだけれど、大抵の言語に横展開可能なテクニックだと思う。 想定されるご意見:IDE使え うちのCLion2016.1.3(CL-145.1617)さん、プロジェクト開いただけでCPUを100%食いつぶしたまま帰ってこないんですが…。静的解析をオフにしてみたけどダメ。そもそも静的解析してくれないならなんのための統合開発環境かっていう話にもなるので、いつかマシになると信じてとりあえずEmacsで開発してるのが今。 環境セット 以下の組み合わせで開発している。 CMake(+Makefile) gtest Emacs watchmedo notify-send(MacならGrowlなりなんなり) CMake しばらくwafも使い込んでいたし、特に不便も感じていなかったけれど、CL
検索のしづらいC++の記号の意味をまとめてみました。C++11、C++14をはじめとして網羅的に集めたつもりです。 C言語についての記述もありますが、共通した記号であってもC++とCでは文法や動作の子細が異なる場合がありそのまま適用できないことがあります。また掲載してある記法は説明のために載せているのであってすべてが推奨できるわけではないことにご注意ください。用語や分類、解説はかなりいい加減です。 型[要素数]配列型(要素数は定数でなければならない。要素数を省略した型は不完全型)。 typedef int array[5]; //配列型int[5]にarrayという名前を付ける。 void f(int ptr[]); //関数の宣言に用いてvoid f(int* ptr);と同じ void f(int ptr[5]); //この場合要素数の記述は無意味で上記と同じ。 //動的配列の確保(ま
Tutorials C++ Language: Learn this versatile and powerful programming language. Includes detailed explanations of pointers, functions, classes and templates, among others... Reference Description of the most important classes, functions and objects of the Standard Language Library, with descriptive fully-functional short programs as examples. Browse the C++ Reference Articles User-contributed arti
C 言語は 1972年にUSの有名なベル研究所で Dennis Ritchie らが設計・実装した言語だ。 今となっては低水準な言語だが、充分な機能、簡潔な記法とアセンブラに近いパフォーマンスを持ち、 Unix, Windows, Linux 等の OS をはじめ、コンパイラ、テキストエディタ等のツールや、ビジネスアプリやゲームなど多くの各種アプリケーション開発に用いられてきた。 C++ 言語は 1980年頃、やはりベル研究所の Bjarne Stroustrup が開発したもので、C にオブジェクト指向などの機能を追加したものだ。 C との互換性を維持しつつオブジェクト指向が可能で、パフォーマンスも高かったことから、 1990年頃から、ビジネスアプリやゲームなど多くのアプリケーション開発に使用されるようになった。 C++ は、過去の互換性を維持しつつ最先端のプログラミングパラダイムを多く
こんにちはサイボウズ・ラボの光成です。 今回は8月31日に開催された「x86/x64最適化勉強会6」の模様についてお伝えします。 今回の勉強会では、6月に発売された Haswell の新しい機能にかかわるものが3件、C++ によるゲーム開発の環境にかかわるもの、ARMと x86 の比較、Xeon Phi についてがそれぞれ1件ずつの発表でした。 以下、それぞれの発表内容について簡単に解説します。 Haswell 関係 私は「Haswellサーベイと有限体クラスの紹介」(動画1)を発表しました。前半は Haswell の復習として、パイプラインの改良点と、256bit 長に対応した整数演算命令 AVX2、積和演算を1命令で行う FMA、いくつかのビット演算命令や暗号用途の整数演算命令などについてサンプルコードを示しつつ紹介しました。gcc 4.8 などの新しいコンパイラでは、ソースコードを変
分散KVS kumofs のコードは、全体で約2万行です*1。 そのうち、ネットワークI/Oやプロトコルに関するコードは約1万行*2で、全体の約半分を占めています。 ロジックは残りの半分*3だけで実装されています。 この実例から分かりますが、kumofsのような分散アプリケーションを開発するにはI/O周りの実装が大変で、とてつもなく大きな障壁になっています。*4 さらに今日では、性能を稼ぐためにマルチスレッド化が必須です。また、多数のクライアントを少ないリソースで効率よく相手にするには、非同期・イベント駆動型のアーキテクチャも必要になります。さらに、究極的な性能を達成すべく GC を利用しない C++ においては、実装のみならず設計も大変です。 これに加えてソケットAPIの難解な挙動に対処にしなければならないため、C言語やC++によるネットワークプログラミングは、vimの使いこなしなどと同
1.はじめに プログラミング言語とはシステム化する対象物を抽象化し、コンピュータで処理可能なコードを記述するために用いる人工言語である。プログラミング言語はコンピュータの機械語と一対一の対応をもったアセンブラから始まり、コンパイラを用いて機械語に翻訳することを前提としたコンパイラ言語、インタプリタと呼ばれるプログラムがソースコードを解釈し実行するスクリプト言語と、記述できる抽象度を高める方向へと進化してきた。 プログラミング言語はその存在理由から、より抽象度の高い記述が行えること、すばやい開発を行える事が求められる。抽象度の高い記述とは、プログラムがどういう処理を行うか(HOW)ではなく何の処理を行うか(WHAT)を記述しやすい構文、機能を持っていることを、すばやい開発とは記述性の高さ、コードの密度の高さ、バグの発生しにくい構文、機能を持っていることをさす。 この抽象度の高い記述、すばやい
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く