他の言語の素敵機能をCで無理やり実現してみるスレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNG00032
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG素敵機能を実現する奴はアフォ
0011デフォルトの名無しさん
NGNGイラクへGo!
0012デフォルトの名無しさん
NGNG気にするな。俺もだ
>>11
イラクに行けってか
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015
NGNGint x ; // 使うなゴラァ
0016デフォルトの名無しさん
NGNGそれともざっとバグ取りして改めて C++ で書いたり?
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG>>9を見るまで索敵だと信じていた。軍事板に帰ります。_| ̄|○
0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGtypedef struct tag_Class1 Class1;
struct tag_Class1 {
int (* method1)(Class1 *, int);
int member1;
};
int Class1_method1(Class1 * this, int arg1) {
this->member1 += arg1;
return 0;
}
Class1 * Class1_constructor() {
Class1 * this;
this = malloc(sizeof(Class1));
this->method1 = Class1_method1;
this->member1 = 0;
return this;
}
void Class1_destructor(Class1 * this) {
free(this);
reutrn;
}
int main() {
Class1 * obj;
obj = Class1_constructor();
obj->method1(obj, 1);
Class1_destructor(obj);
return 0;
}
0023デフォルトの名無しさん
NGNG#define delete(obj) (obj->destructor(obj))
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG0026鳥取砂丘lo
NGNG0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG_.height = _.width * 2;
#undef _
0029デフォルトの名無しさん
NGNGlambda
autoload
連想配列
へぇ^H^Hヒアドキュメント
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNGC++だけどオペレータオーバロードを駆使すればなんとかなりそうな
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNG例外が発生する機能
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGスタック領域だとプログラムが分かるが
ヒープ領域だと、プログラムとしては(偶然にも)動くんじゃなかったかな?
mallocで確保→freeで開放→開放したのを忘れて再びアクセス
ってパターンね
0039デフォルトの名無しさん
NGNGvoid *ReDim( void *ptr, size_t org, size_t cnt );
{
ptr = realloc( ptr, org * cnt );
memset( ptr, 0, org * cnt );
return ptr;
}
void *ReDim_Preserve( void *ptr, size_t org, size_t cnt );
{
ptr = realloc( ptr, org * cnt );
return ptr;
}
int i[10];
i = (int*)ReDim( (void*)i, sizeof(int), 100 );
orz.........
0040デフォルトの名無しさん
NGNGOSを積んでいない組み込み系では、
mallocがつかえません・・・
0041デフォルトの名無しさん
NGNGvoid *last_ptr;
void *malloc(size_t size)
{
void *p;
p = last_ptr;
last_ptr += p;
return p;
}
004241
NGNG○ last_ptr += size;
_| ̄|○ マチガエマスタ イッテキマス
0043デフォルトの名無しさん
NGNGfreeはどうやって実装する気だ?
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGvoid free(void *p){
return;
}
0048デフォルトの名無しさん
NGNGSGIのファイルシステム、XFSに付いてたfsckが凄かった
int
main(int argc, char **argv)
{
return 0;
}
これだけ
スレ違いスマソ
0049デフォルトの名無しさん
NGNGよっぽど豪華な組みこみ系なんだな。
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG最初っからはいっとる
0052デフォルトの名無しさん
NGNG関数ポインタ?
005350
NGNG0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG関数ポインタの構造体作っといて、用途に応じて関数を差し替え
→多態を実現できるよ。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNGそりゃ卑怯だw
0059デフォルトの名無しさん
NGNG同意。
スレタイの「無理やり」にそぐわない気がする。
0060デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGw->setAttr1();
w->setAttr2();
w->func();
あーこれでも各行w書かないかんな
0063デフォルトの名無しさん
NGNG連想配列
0064デフォルトの名無しさん
NGNGhashで沢山の実装がありますが何か?
0065デフォルトの名無しさん
NGNG#define with(tag) \
#define _ tag
#define endwith \
#undef _
with(hoge)
_.hage
endwith
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNGstruct MyStruct{
struct { int x; } private;
int y;
};
void MyStructInit(struct MyStruct *self){
self->private.x = self->y = 0;
}
#define private PRIVATE
main()
{
struct MyStruct s;
s.private.x := 0; // error!!
}
0068デフォルトの名無しさん
NGNGprivate:
struct { int x; } private;
public:
int y;
void MyStructInit(struct MyStruct *self){
self->private.x = self->y = 0;
}
};
main()
{
struct MyStruct s;
s.private.x := 0; // error!!
}
0069デフォルトの名無しさん
NGNG意味不明すぎて子ね
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNG#define WITH() "with.fragment"
#define ENDWITH() "endwith.fragment"
/* ... */
#define WITH_OBJECT hoge
#include WITH()
_.hage
#include ENDWITH()
0076デフォルトの名無しさん
NGNGcall/cc の能力のうち、1%ぐらいしか引き出せていないです。
0077デフォルトの名無しさん
NGNGよく知らんけどfiberのこと?
0078デフォルトの名無しさん
NGNGcall/cc の能力のうち、3%ぐらいしか引き出せていないです。
0079デフォルトの名無しさん
NGNGじゃCで、call/ccの入ったminimumLispを書けば解決って事で。
0080デフォルトの名無しさん
NGNG> よく知らんけどfiberのこと?
なにそれ?
0081デフォルトの名無しさん
NGNGどこが足りない?
0082デフォルトの名無しさん
NGNGつか、そもそもλ式を扱っていない時点で比較の対象にすらならん。
F1マシンとダンプカーを比べるようなものだ。
勿論、どちらがよい・どちらが悪いという話でもない。
タイヤは同じ4つでも、設計理念・使用目的が根本的に違う。
例えば Fiber で遅延評価を実装できるか?
0083デフォルトの名無しさん
NGNG連結リストで実装できる
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNG>例えば Fiber で遅延評価を実装できるか?
もちろん実装できる、っていうかFiber ってそもそもそういう用途のためのものだよね。
C だとλ計算じゃなくて普通のコルーチンになるけど。
0086デフォルトの名無しさん
NGNGへー、Fiber が遅延評価のためのツールとは知らなんだ。
こりゃまた勉強になるな。
ところで、その API レベルでいう「評価」って一体何よ?
何を「評価」するんだ?
0087デフォルトの名無しさん
NGNGプログラマが指示したインストラクションが実行され、
変数やメモリ上の値を変更することによって計算を行うというのが C/C++ のモデルだから、
・インストラクションの実行をプログラマが指定した任意のタイミングで停止・再開できる
・(ローカル変数等の(λ算法風に言うとオープンでない))コンテキストは、再開時に復帰される
っていうようなことだと思うけど。
0088デフォルトの名無しさん
NGNGタイプリストとか実現したり、再帰で計算させたり
0089デフォルトの名無しさん
NGNGgeneric.h使っとけ
0090デフォルトの名無しさん
NGNGそれって、こう言っているのと同義だぞ。
「C言語は Fiber を使えば遅延評価ができるようになります」
これ、明らかにおかしくないか?
それに比べれば、まだ
「C言語は関数を使うので関数型言語です」
という主張の方が説得力があると思われ。
0091デフォルトの名無しさん
NGNGんー。このスレッドのタイトルからかんがみるに、
「Fiber を使えば遅延評価を無理やり実現できると思う」
程度の主張なんじゃない?
>「C言語は関数を使うので関数型言語です」
これもこのスレ的にはありだと思う。
非破壊操作だけで書くの。
0092デフォルトの名無しさん
NGNGそれ言い出したら、
sysytem() を使えば何でも実現できることになってしまうけど。
ここでいう「実現する」って、そういう話じゃないだろ?
0093デフォルトの名無しさん
NGNGでもさ、
元レスの
>Schemeのcall-with-current-continuationをCで使いたいのですが。
への返事なら、「Fiber使え(←Win32厨発見)」であってんじゃないの?
λ式使いたいってんじゃ無いだろうし。
0094デフォルトの名無しさん
NGNGgeneric.hってコンパイルタイムな計算とかもできる?
0095デフォルトの名無しさん
NGNGでもさ、その後 >>81 が
>>78
>どこが足りない?
と書いているのを忘れないでくれ。
0096デフォルトの名無しさん
NGNG役立たず率100%
0097デフォルトの名無しさん
NGNGBoost.PPでどうだ?
0098デフォルトの名無しさん
NGNGでもさ、その前>>76,78が
理由も示さずと難癖つけているのを忘れないでくれ。
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNGこういうの?
ttp://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/h/curry
俺には何やってるか分からんけど。
0101デフォルトの名無しさん
NGNGsysytem
0102デフォルトの名無しさん
NGNGstruct hoge {
double x,y;
void (*Initialize)(void);
void (*Setvalue)(double,double);
:
:
};
なぜ素直にC++にしないのか……
でも破綻しないのがすごい。
そういやrubyのソースもCでOOしててすごいって噂を聞いたな。
0103デフォルトの名無しさん
NGNG本も出てます。
後発のPerlやPythonの作者もRubyのソースを全面的に参考にしたと告白してます。
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNGdouble x,y;
void (*Initialize)(struct hoge *this);
void (*Setvalue)(struct hoge *this,double,double);
やるならここまでやらなきゃ
0106デフォルトの名無しさん
NGNG多分その本はこれだと思う。
http://i.loveruby.net/ja/rhg/
全文無償公開されてる。
汚い部分は eval.c に押しこめたって作者がどっかで書いてた。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGその留学生は、そのうち VMT も書くようになると思われ。
将来が楽しみだな。
0109デフォルトの名無しさん
05/03/05 06:49:340110デフォルトの名無しさん
05/03/05 07:01:050111デフォルトの名無しさん
05/03/05 08:19:11確かに出来なくはないし、C++をちゃんと理解している奴なら
破綻せずに実装するのはそう難しいことじゃないだろ。
頑張りどころがずれまくっている気はするけどな
0112デフォルトの名無しさん
05/03/05 14:27:09X Toolkit だと、もっと酷い事になっている。
tp://www.nurs.or.jp/~sug/soft/super/xprog7.htm
0113デフォルトの名無しさん
05/03/08 10:40:090114デフォルトの名無しさん
2005/04/08(金) 17:46:52C++でクラス内にstatic const int N = 1;と書けないときにenumで代用するけど、そこから思いついた。
似たような感じでconstを定数として使えないCでもenumなら定数として使える。
enum
{
HOGE = 5
};
int array[HOGE];
0115デフォルトの名無しさん
2005/06/27(月) 04:20:53#define HOGE 5
と同じだべ?
0116デフォルトの名無しさん
2005/06/27(月) 10:44:50デバッガ使ったこと無いのか、
マクロにまでシンボルテーブル作ってくれる
超凄いコンパイラ使ってるのか
0117デフォルトの名無しさん
2005/09/14(水) 03:42:38結局C++で作った方が書くのが楽で簡潔ってことがわかった。
関数ポインタ間接参照しまくるから速度もあんま変わらんし。
バイナリ間の可搬性があるってことくらいしか利点ない。
0118!omikuji
2005/12/01(木) 21:45:300119デフォルトの名無しさん
2005/12/24(土) 11:49:480120デフォルトの名無しさん
2005/12/27(火) 23:39:19ぐらいならなんとかなるんじゃね?
0121デフォルトの名無しさん
2006/01/01(日) 23:43:09D&E日本語版の77ページに説明が書いてあった。
0122デフォルトの名無しさん
2006/01/02(月) 14:24:160123デフォルトの名無しさん
2006/01/05(木) 19:11:15それをせずにC++が出来たのはなんで?
0124デフォルトの名無しさん
2006/01/05(木) 19:23:500125デフォルトの名無しさん
2006/01/05(木) 19:52:42実質的にチューリング完全。
実用にするには巨大なライブラリがいるけど。
■ このスレッドは過去ログ倉庫に格納されています