TechCraft – エンジニアのためのスキルアップメモ

エンジニアのスキルアップを少しでも加速する技術ブログ

C++

新着順 人気順

組込ペリフェラル開発

ベアメタルで走る組込ペリフェラル開発完全ガイド 皆さんは、マイコン開発で「Lチカ」をする際、どのようなコードを書いていますか? Arduinoなら digitalWrite(13, HIGH);、STM32のHALライブラリなら HAL_GPIO_WritePin(...) でしょうか。非常に便利ですよ…

【脱・C言語】Zig入門

Rustよりもシンプルで、Cよりも安全な「第三の選択肢」を徹底解説 「C言語は古すぎるが、Rustは学習コストが高すぎる...」 「もっとシンプルに、でも低レイヤーを完全に制御したい」 そんなエンジニアの心の隙間を埋める言語として、Zig(ジグ) が爆発的な…

SDVでEPSを制御してみる

SDV時代のEPS(電動パワーステアリング)制御 ――ソフトウェア定義で進化する「曲がる」技術の最前線 1. SDVにおけるEPS制御とは? SDV(Software Defined Vehicle)におけるEPS制御とは、従来の「ハードウェア(モーター・ギア)性能に依存した固定的なアシ…

Cコードの壊れ方と原因:フラグ管理

そのフラグ、誰が下ろす? ― 組み込みで“たまに壊れる”Cコードを徹底解剖(実例つき) 1. 導入 --- フラグが原因のバグは、だいたい再現しない --- 組み込み開発で一番やっかいなバグの代表格が「フラグ管理の失敗」です。テスト環境では動く。ログも綺麗。…

TPU(Tensor Processing Unit)とは?

TPUとは? ――GPU時代のその先にある「テンソル専用プロセッサ」 1. いまさらだけど「TPUって何者?」 TPU(Tensor Processing Unit)は、Google が自社の機械学習ワークロードを高速化するために設計した 専用プロセッサ(ASIC) です。 テンソル/tensor(…

Autosar と SDV

AUTOSARとSDV ――クラシックECU時代からソフトウェア定義車両への橋渡し 1. なぜ「AUTOSARとSDV」をセットで考えるべきか ここ数年、自動車ソフトウェア界隈では AUTOSAR(Classic / Adaptive) SDV(Software-Defined Vehicle:ソフトウェア定義車両) ドメ…

ゲームプログラミング入門

C++ゲームプログラミング入門 ――ゲームループからデータ構造、WebAssemblyまで C++ゲームプログラミング入門 1. ゲームプログラムは「1本のループ」から始まる 2. C++でゲームを書く理由と向き合い方 3. ゲームループの設計:フレームと時間の扱い 3.1 デル…

C++ × CPU マイクロアーキテクチャで見るメモリアクセス性能

C++ × CPU マイクロアーキテクチャで見るメモリアクセス性能 はじめに 「同じメモリを何度も読むだけなんだから、速いはずだろう」 最初にこのベンチマークを書いたとき、自分もそう思っていました。 しかし実際に C++ で計測してみると、同じアドレスを延々…

2025年 上期までのV言語

25下期から使える! V言語(V Language)入門 Vで「高速・安全・シンプル」を手に入れる 1. はじめに V言語(V Language)は、2020年代前半に登場した新興の静的型付けプログラミング言語です。 “Rust の安全性 × Go の簡潔さ × C の軽量性” を目指して設計…

MCFBをC++エンジニアが理解する

MCFB(Motion Control Function Block)をC++エンジニア視点で理解する 〜PLCopen Motion Control規格に見る「制御OOP」の完成形〜 1. はじめに:Motion Control Function Blockとは? MCFB(Motion Control Function Block)は、 PLCopen Motion Control fo…

DPDKとは何なのか?

DPDKとは何か? 〜モダンな通信処理を支える“超低レイテンシ”データプレーン技術〜 1. はじめに:ネットワークは「ソフトウェア」で動く時代へ かつて、ネットワーク処理(パケット転送やルーティング)は専用ハードウェア(ASIC, FPGA, NPU)が担っていまし…

C++のconstexpr とはなんなんだろうか

C++の constexpr とは? 〜コンパイル時に評価できる定数式を扱う仕組み〜 1. はじめに C++11 以降で導入された constexpr(コンステクスプル) は、 「式をコンパイル時に評価できることを保証する」キーワードです。 従来の const では「値が変わらない」…

構造体 vs クラス:プログラミング言語の違いと設計

構造体とクラスの違いとは?主要言語ごとの比較と設計の考え方 1. はじめに プログラミングにおいて、データをまとめて扱うための手段として「構造体(struct)」と「クラス(class)」があります。これらは、データの集まりを表現するための型ですが、言語…

mutexの基本:排他制御の仕組みとプログラムでの使い方

mutexの基本:排他制御の仕組みとプログラムでの使い方 1. はじめに マルチスレッドプログラミングにおいて、複数のスレッドが同時に共有リソースにアクセスすると、データの整合性が損なわれる可能性があります。これを防ぐために使用されるのがmutex(ミュ…

プログラムのエントリーポイントとは?

Entrypointとは何か?一般プログラムにおける汎用的な意味と役割 1. はじめに プログラムを実行する際、最初にどこから処理が始まるのかを明確にする必要があります。この「最初に実行される場所」を指すのがエントリーポイント(Entrypoint)です。エントリ…

スケーラビリティを考える:アーキテクチャの変化に対応する設計思考

アーキテクチャの流儀:変化に強い設計の思考法 ソフトウェア開発の世界では、時代と共に求められるスピードや品質、スケーラビリティが大きく変化してきました。そしてそれに応じて、ソフトウェアの「設計」に求められる姿も進化しています。 本記事では、…

スマートポインタの落とし穴:初心者のための5つの注意点

初心者がやりがちなC++スマートポインタの罠5選 C++のスマートポインタ(unique_ptr, shared_ptr, weak_ptr)は、メモリ管理を自動化し、コードの安全性を高める強力なツールです。しかし、初心者が使い始めると、意図しない挙動やエラーに直面することも少…

開発スタイルに合わせたビルドツール選定

CMakeを中心にしたビルドシステム比較:Make、Meson、Bazel、Ninja、SConsとの違い C/C++プロジェクトの構成管理やビルドの自動化には、ビルドシステムが不可欠です。その中でもCMakeは、クロスプラットフォームなプロジェクトで広く使われている定番ツール…

型の哲学──静的と動的の間にあるもの 9章

型の哲学──静的と動的の間にあるもの 第9章:まとめと未来の型システム ここまでの章で、「型とは何か」「静的と動的の違い」「現代の型システムの進化」などを多角的に見てきました。 最終章では、その総まとめとして本記事全体を振り返りつつ、今後のプロ…

型の哲学──静的と動的の間にあるもの8章

型の哲学──静的と動的の間にあるもの1章 第8章:型との向き合い方──実践的な設計指針 ここまで「型」についての思想・機能・言語的な側面を掘り下げてきましたが、本章では実際の開発現場で型とどう向き合い、どのように活用すべきか──すなわち「型の運用方…

型の哲学──静的と動的の間にあるもの7章

型の哲学──静的と動的の間にあるもの 第7章:型がもたらす安心とスピードのトレードオフ ここまでの章で、静的型付け・動的型付け、それぞれの特徴と実例を確認してきました。静的型は安全性を、動的型は柔軟性を、それぞれ開発者に提供します。しかし、ソフ…

型の哲学──静的と動的の間にあるもの 6章

型の哲学──静的と動的の間にあるもの 第6章:現代的な型システムと“いいとこ取り”言語たち 前章までで、静的型と動的型のそれぞれの利点と課題を明らかにしてきました。今章ではその中間に立ち、静的型の安全性と動的型の柔軟性を両立しようとする、現代的な…

C++テンプレートの実装分離のベストプラクティス

C++テンプレートの実装設計:.cppと.hh(または.hpp)ファイルに分ける具体的手法 C++テンプレートは強力なメタプログラミング手法ですが、その定義と実装の分離には独特の注意点が存在します。特に.cppファイルと.hh(または.hpp)に分離して設計しようとす…

型の哲学──静的と動的の間にあるもの 5章

型の哲学──静的と動的の間にあるもの 第5章:動的型付け言語の柔軟さと危うさ 前章では静的型付け言語の特性とメリット・デメリットについて整理しました。ここではその対極にある「動的型付け(dynamic typing)」を採用した言語群──Python、JavaScript、Ru…

型の哲学──静的と動的の間にあるもの 4章

型の哲学──静的と動的の間にあるもの 第4章:静的型付け言語の特性と功罪 C++に限らず、「静的型付け(static typing)」を採用するプログラミング言語は数多く存在します。Java、Rust、Go、Haskell、TypeScript(厳密には静的解析)などがその代表例です。 …

メモリ管理の基礎:CとC++の動的メモリ確保

CとC++における動的メモリ確保の違い:基礎から理解するメモリ管理 CとC++はいずれも高パフォーマンスな低レベル言語ですが、メモリ管理の方法には明確な違いがあります。この記事では、中級者向けにCとC++における動的メモリ確保の方法とその使い分け、そし…

型の哲学──静的と動的の間にあるもの 3章

型の哲学──静的と動的の間にあるもの 第3章:キャストの実践パターンと落とし穴 前章ではC++のキャスト種別とその基本的な用途を紹介しました。本章では、実際のソフトウェア開発におけるキャストの使用例と、それによって起こりうるバグや問題点を具体的に…

型の哲学──静的と動的の間にあるもの 2章

型の哲学──静的と動的の間にあるもの 第2章:C++におけるキャストの基礎 「型変換」は静的型付け言語において避けて通れない操作であり、特にC++では多くのキャスト手法が用意されている。C++を学び始めた人にとって、static_cast や reinterpret_cast、cons…

型の哲学──静的と動的の間にあるもの1章

型の哲学──静的と動的の間にあるもの 第1章:なぜ今「型」なのか? プログラミングにおける「型」とは、変数や関数に対してどのようなデータを扱うかを定義するものである。この一見単純な概念は、ソフトウェアの安全性、可読性、保守性、パフォーマンスに多…

キャストの挙動を解説するC++中級者向けガイド

C++におけるキャストの種類と挙動の違い【中級者向け】 C++では、型変換(キャスト)を使うことで異なる型同士の値を操作することが可能です。しかし、キャストの使い方を誤ると、未定義動作やセキュリティリスクにつながることもあります。 本記事では、C++…