こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。 仕事の都合もあり「C言語 ⇒ C++ ⇒ Python」の順にプログラミング言語を習得しました。 最近は、PythonとC/C++両方を使って仕事をしています。 Pythonでプログラミングをしていると…
COLUMN 組み込みエンジニアの戸惑い PythonからC言語を呼び出してみる①(Python/C APIを使った場合) # Python # エンジニア # 組み込みエンジニアの戸惑いシリーズ Python編 # 言語 2019-07-26 FSI Embedded 組み込みソフトウェアエンジニアがPythonを始めてみました。そして、第5の戸惑い、今回は組み込みとは切っても切り離せない「C言語」に関しての話題です。 Pythonを扱っていて課題となり得る、処理速度の改善や過去資産の流用など、そんなときに役立つかもしれない、PythonからC言語を呼び出す方法についてのご紹介です。 PythonからC言語、またはC++を呼び出す方法には様々なものがあります。以前の記事でもPython/C API (Python.h)やSWIG、boost.pythonなどを使うことで実現可能とご紹介し
この記事では、双曲正接を計算する CPython 用の C++ 拡張モジュールをビルドし、Python コードからそれを呼び出す手順について説明します。 Python では最初にルーチンを実装して、C++ で同じルーチンを実装した場合の相対的なパフォーマンス向上を示します。 Python インタープリターの機能の拡張には、C++ (または C) で記述されたコード モジュールが一般的に使われます。 拡張モジュールの主要な種類は次の 3 つです。 アクセラレータ モジュール: パフォーマンスの高速化を実現します。 Python はインタープリター言語であるため、C++ でアクセラレータ モジュールを記述してパフォーマンスを向上させることができます。 ラッパー モジュール: 既存の C/C++ インターフェイスを Python コードに公開するか、Python から簡単に使用できる、より Py
概要 C++ で作成した処理を Python から使用するには以下を始めとした複数の方法があります。 Python.h SWIG Boost.Python Shiboken pybind11 どの方法を使用するかは状況によって変わりますが Boost.Python では C++ 内から Python を呼び出せる(今回の例とは逆)という利点があります。Python と C++ の間で相互に呼び出しを行えるので、C++ で作成されたアプリケーションにマクロ言語として Python を組み込む相互に呼び出しを行うといったことができるようになります。 ここでは Linux(Ubuntu 18.04)上で Boost.Python を使用して Python (Python 3)用ライブラリーを作成する方法について説明します。 Boost.Python のビルド まず以下のコマンドで必要なパッケージ
C言語でPythonのモジュールを作ってみる 環境 Python 3.4.6 gcc version 4.8.5 openSUSE Leap 42.3 概要 Python勉強しているときに拡張モジュールの作り方が出てきて自分でも作ってみようと思った次第です。 個人的に色々つまったので、ここにノート代わりに書いておきます。 ゴールまでの流れ C言語でPythonのモジュールを作成 ↓ Pythonを使ってCをビルドする ↓ PythonでimportしてCモジュールを使ってみる C言語でモジュール作成 まず、C言語でPythonのモジュールを作成していきます。 PyObject型を多用します。とりあえず、Hello_worldとpushとpop作りました。 #include <Python.h> //Cの方で作成してPythonで利用する関数はPyObjectを使う static PyObj
1. Extending Python with C or C++¶ It is quite easy to add new built-in modules to Python, if you know how to program in C. Such extension modules can do two things that can’t be done directly in Python: they can implement new built-in object types, and they can call C library functions and system calls. To support extensions, the Python API (Application Programmers Interface) defines a set of fun
ベクトル/行列演算の定番ライブラリEigen (日本語解説のサイトまとめと便利な機能紹介) Eigenとは C++の行列/ベクトルを扱うライブラリ(公式). Eigenの主な特長 行列演算を直感的に書くことが出来る. ヘッダーファイルのみのライブラリのため,ライブラリのビルドやリンクが必要なく組み込やすい. 高速.他のライブラリとの比較ベンチマークはこちら(公式) 解説サイト(すべて日本語) Eigen - C++で使える線形代数ライブラリ(でらうま倶楽部)- 基本的な使い方とも幾何変換,クォータニオンなどの解説もあり. Eigen ー C++で線形代数を!(singular point)- 3回のポストで,幅広い機能について解説している. Robotics/Eigen(NAIST::OnlineText)- 基本的な機能の他に行列分解についても解説あり. Eigenの使い方 Eigenは
WinHTTPについて WinHTTPはWindows用のHTTP通信を行うためのコンポーネントです。 本記事ではWin32APIからWinHTTPを使うサンプルを記載しています。 動作環境 WinHTTPの対応OSについては以下を参照してください。 WinHTTP Versions Windows 2000はService Pack 3以上が必要です。 Windows XPはService Pack 1 (SP1)以上が必要です。 Windows XPでTLS 1.1とTLS 1.2を使うためには別途対応が必要です。 例えば以下の方法 TLS 1.2 · sayurin/ffftp Wiki · GitHub Windows 7でTLS 1.1とTLS 1.2を使うには以下の対応が必要です。 技術情報 3140245 WinHTTP が Windows での既定のセキュリティで保護された
This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support. This topic discusses creating a sample Microsoft Windows HTTP Services (WinHTTP) application that enables asynchronous completions. Warning WinHTTP is not reentrant except during asynchronous completion callback. That is, while a thread has a call pendi
書記素クラスターを扱う必要がある場合、BreakIterator を使う必要があります。こちらの記事をご参照ください。 ビルドオプション #include <stdio.h> #include <string.h> #include <unicode/utf8.h> void print_each_char(const char*, size_t); int main(void) { const char* str = "?野家"; size_t size = strlen(str); print_each_char(str, size); } void print_each_char(const char* str, size_t size) { int32_t previous; int32_t current = 0; int32_t buf_size = 0; int32_t* s
2024-04-17: ICU 75 is now available. It updates to CLDR 45 (beta blog) locale data with new locales and various additions and corrections. C++ code now requires C++17 and is being made more robust. The CLDR MessageFormat 2.0 specification is now in technology preview, together with a corresponding update of the ICU4J (Java) tech preview and a new ICU4C (C++) tech preview. See Downloading ICU > ICU
C言語は機械語やアセンブリ言語といった低水準言語に近く、最近流行のPythonやRubyといった高水準言語で利用できるさまざまな便利な機能を使用することができません。例えば文字列にも専用の型が存在せず、さまざまな落とし穴に注意しつつ慎重に使用する必要があるのです。 本日紹介する「Cello」は、このなにかと不便なC言語で、高レベルプログラミングを実現するユニークなライブラリです。 Cellは以下の機能を実現するC言語用ライブラリです。 一般的なデータ構造 ポリモーフィック関数 インターフェイス/タイプクラス コンストラクタとデストラクタ オプションのガベージコレクション 例外 リフレクション 作者のDaniel Holden氏は、Ubisoft Montrealのアニメーション研究員で、C言語の可能性を追求するためのファンプロジェクトとしてCelloの開発を始めたと開発の動機を説明していま
最近H2OというHTTPサーバを書いているのですが、プロファイルを取ってみるとsprintfが結構な時間を食っていて不満に感じていました。実際、sprintfは数値や文字列をフォーマットするのに十徳ナイフ的に便利なので、HTTPサーバに限らず良く使われる(そしてCPU時間を消費しがちな)関数です。 では、sprintfを最適化すれば、様々なプログラムが より高速に動作するようになるのではないでしょうか。ということで作ったのが、qrintfです。 qrintfは、Cプリプロセッサのラッパーとしてソースコードに含まれるsprintfの呼出フォーマットを解析し、フォーマットにあわせたコードに書き換えることで、sprintfを高速化します。 たとえば、以下のようなIPv4アドレスを文字列化するコード片を sprintf( buf, "%d.%d.%d.%d", (addr >> 24) & 0xf
poptの使い方 オプション解析ライブラリ. getoptとおんなじだけど,ちょっと違う. 使い方って,流れを見た方が早いことって多いよね. ということで,流れを紹介. というか,manそのまんまなんだけどね. たぶん,スイッチのオプションを解析したあとに, フラッグなしの数字を処理した方がよいと思われる. つまり,poptGetNextOpt(optCon)が先で,poptGetArgが後. 実際に使ってみた例はこっち. ちょっと汚いけど,こんな感じで使うもんなのかな,といったもの. #include <popt.h> #include <stdio.h> /* これつけた方がカッコイイ */ void usage(poptContext optCon, int exitcode, char *error, char *addl) { poptPrintUsage(optCon, std
もうひとつのライブラリ利用例として、コマンドラインオプションを解析するライブラリの使い方を紹介する。コマンドラインオプションとは何か、どのようなスタイルがあるかを説明し、コマンドラインオプション解析ライブラリを用いてプログラムからコマンドラインオプションを解析するやり方を説明する。 【学習の要点】 * プログラムの実行時に必要なパラメータを自由に設定できるようにするためには、コマンドラインのオプションとして設定できるようにすることが有効である。 * popt、getoptなどのコマンドラインのオプションを解析するライブラリを用いることで統一性のあるオプション設定処理が実現できる。 図II-14-10. getopt、poptによるオプション解析 【解説】 プログラムの実行時コマンドラインのオプションにてパラメータを受け取るようにする場合、main関数の引数により設定されたオプションを受け取
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く