環境はWin7 Pro、VC++ 2008Express editonです。
VC++を使ってはいますがほぼc言語しか分かっていません。
現在、タイトルの様な事を考えています。
というのも、今、割と速度が必要なプログラムを書いておりジャンプテーブル等をゴリゴリを使っているのですが、
似たような関数を何十個と書いていくのが割と辛いのです。
今回は結局、その部分を出力するプログラムもc言語で書いたのですが、文字列の処理がやはりc言語では辛かったので
次からは別の言語にしたいのですが、どの言語がこの様な用途に向いているのかが分かりません。
欲しい特徴は
・c言語のソース中にスクリプト言語の処理部分を埋め込める
・文字列処理が強い、少なくとも簡単な正規表現が使える
・タダで入手できる
です。
この様な場合、どの様なスクリプト言語を使うのが適切なのでしょうか?
c言語のソースをスクリプト言語で処理する
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: c言語のソースをスクリプト言語で処理する
私もLua言語推薦。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: c言語のソースをスクリプト言語で処理する
うーん、なんか違う気がします。
c言語の中からスクリプト言語を呼びたいのではなくて、「スクリプト言語でc言語のソースを作らせる」といった方が正しいのかもしれないです。
陥っていた状況としては、
ある7x7の盤を持ったゲームの思考エンジンをビットボードを使って実装している時に49マス分のマクロを用意しないといけなかったけれど、手打ちするのが酷く面倒
という状況でした。
c言語の中からスクリプト言語を呼びたいのではなくて、「スクリプト言語でc言語のソースを作らせる」といった方が正しいのかもしれないです。
陥っていた状況としては、
ある7x7の盤を持ったゲームの思考エンジンをビットボードを使って実装している時に49マス分のマクロを用意しないといけなかったけれど、手打ちするのが酷く面倒
という状況でした。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: c言語のソースをスクリプト言語で処理する
そういうのならスクリプト言語に限定する理由がないのでは? コンパイラ言語で構わないですよね。
JavaでもC#でもVBAでも出来ます。Lua言語の単体で動くものもあります。
スクリプトにこだわるならVBScriptでも出来ます。
JavaでもC#でもVBAでも出来ます。Lua言語の単体で動くものもあります。
スクリプトにこだわるならVBScriptでも出来ます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: c言語のソースをスクリプト言語で処理する
その大量のマクロは本当に必要なのですか?lbfuvab さんが書きました:陥っていた状況としては、
ある7x7の盤を持ったゲームの思考エンジンをビットボードを使って実装している時に49マス分のマクロを用意しないといけなかったけれど、手打ちするのが酷く面倒
という状況でした。
どのような実装かはわかりませんが、マクロをプログラムで生成できるのであれば、そもそもマクロに積むデータを計算するプログラムを直接書くことはできないのですか?
【追記】速度が必要ということですね。すみません。
最後に編集したユーザー みけCAT on 2015年4月14日(火) 01:06 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: c言語のソースをスクリプト言語で処理する
PHPかな…lbfuvab さんが書きました:c言語のソース中にスクリプト言語の処理部分を埋め込める
例:
test.php
#include <stdio.h>
int main(void) {
<?php
for($i=0;$i<100;$i++) {
printf("\tputs(\"%d\");\n",$i);
}
?>
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: c言語のソースをスクリプト言語で処理する
これです、これです、こういうのです!
こういうのが欲しかったんです!
本当にありがとうございます。
今からPHPの勉強してきます!
また、教えていただいたLuaも今回は使えなさそうですが、これはこれで便利そうなので勉強してみますね。
こういうのが欲しかったんです!
本当にありがとうございます。
今からPHPの勉強してきます!
また、教えていただいたLuaも今回は使えなさそうですが、これはこれで便利そうなので勉強してみますね。
Re: c言語のソースをスクリプト言語で処理する
解決となっていますが,VC++でも一応T4 Templateが利用可能です。
CODEXPERT - CODEXPERT: T4 in Visual C++
からが生成され,実行もできます。
C#やVBと違って,IDEサポートが効かないのでテンプレートの展開がビルド時まで遅延する,T4の言語にC++がないのでテンプレートを別言語でかかないといけない,という問題点はありますが……。
CODEXPERT - CODEXPERT: T4 in Visual C++
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ output extension=".cpp" #>
#include <iostream>
int main (void)
{
<#
for (int i = 50; i < 100; ++i)
{
#> std::cout << <#= i #> << std::endl;
<#
}
#> return 0;
}
#include <iostream>
int main (void)
{
std::cout << 50 << std::endl;
std::cout << 51 << std::endl;
std::cout << 52 << std::endl;
std::cout << 53 << std::endl;
std::cout << 54 << std::endl;
std::cout << 55 << std::endl;
std::cout << 56 << std::endl;
std::cout << 57 << std::endl;
std::cout << 58 << std::endl;
std::cout << 59 << std::endl;
std::cout << 60 << std::endl;
std::cout << 61 << std::endl;
std::cout << 62 << std::endl;
std::cout << 63 << std::endl;
std::cout << 64 << std::endl;
std::cout << 65 << std::endl;
std::cout << 66 << std::endl;
std::cout << 67 << std::endl;
std::cout << 68 << std::endl;
std::cout << 69 << std::endl;
std::cout << 70 << std::endl;
std::cout << 71 << std::endl;
std::cout << 72 << std::endl;
std::cout << 73 << std::endl;
std::cout << 74 << std::endl;
std::cout << 75 << std::endl;
std::cout << 76 << std::endl;
std::cout << 77 << std::endl;
std::cout << 78 << std::endl;
std::cout << 79 << std::endl;
std::cout << 80 << std::endl;
std::cout << 81 << std::endl;
std::cout << 82 << std::endl;
std::cout << 83 << std::endl;
std::cout << 84 << std::endl;
std::cout << 85 << std::endl;
std::cout << 86 << std::endl;
std::cout << 87 << std::endl;
std::cout << 88 << std::endl;
std::cout << 89 << std::endl;
std::cout << 90 << std::endl;
std::cout << 91 << std::endl;
std::cout << 92 << std::endl;
std::cout << 93 << std::endl;
std::cout << 94 << std::endl;
std::cout << 95 << std::endl;
std::cout << 96 << std::endl;
std::cout << 97 << std::endl;
std::cout << 98 << std::endl;
std::cout << 99 << std::endl;
return 0;
}
C#やVBと違って,IDEサポートが効かないのでテンプレートの展開がビルド時まで遅延する,T4の言語にC++がないのでテンプレートを別言語でかかないといけない,という問題点はありますが……。