idea0001
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* 川合のプログラミング言語自作(ライブラリ自作)のための...
-(by [[K]], 2019.03.04)
** (1) はじめに
-「プログラミング言語やライブラリを作っていいですよ」と言...
-ここではそんな人のために、例えばこんな風に考えたらどうか...
-「なんだー、こんな身近なことでいいのかー」と思ってもらえ...
** (2) テーマ#1: 配列の自動拡張機能を付けるべきかどうか?
-仮に int a[10]; みたいな配列変数があったとして、a[9] = 3...
-それで、これを見つけた時に、「エラーになって止まる」のが...
-まあ一番まずいのは「エラーも何も出さず、配列の境界を越え...
----
-エラーで止まるのはもちろんいい言語です。ユーザは宣言時の...
-しかし一方で、もし後からでもサイズが変更できる言語だった...
----
-黙って続行するというのは、一見するとひどいと思うかもしれ...
-一般にエラー処理はこんな感じでおこなわれています。
err = 処理1(...); if (err != 0) { エラー処理 }
err = 処理2(...); if (err != 0) { エラー処理 }
err = 処理3(...); if (err != 0) { エラー処理 }
-それとか、例えばポインタを使ってアクセスしたいときはこん...
if (p != 0) { a = *p; }
-これはつまり、ポインタが正常だったらポインタを使ってアク...
-さてこれらを見てどう思いますか?何をするにもif文で、うっ...
-・・・おいおい、こいつは今さら何を言っているんだ、エラー...
-そう考えた時、エラーがあってもとりあえず止まらないで無視...
** (3) テーマ#2: 自動でエラー処理してくれたらいいかも?
-私はコンソールアプリを書いているときに、ファイルのオープ...
-またmallocしてNULLを返されてしまったら、「out of memory...
-あらかじめ大きなバッファを用意しておいて、ファイル全体を...
-このように定番のエラー処理があると思うのですが、それを毎...
-それなら最初からこの定番処理付きのライブラリ関数を用意し...
// 普通の書き方.
a = malloc(n);
if (a == NULL) {
fprintf(stderr, "out of memory\n");
exit(EXIT_FAILURE);
}
fp = fopen(argv[1], "rt");
if (fp == NULL) {
fprintf(stderr, "fopen error : %s\n", argv[1]);
exit(EXIT_FAILURE);
}
// 便利な関数がある場合の書き方.
a = malloc_ne(n);
fp = fopen_ne(argv[1], "rt");
-ということで、10行が2行になるわけです。これはすごく見通...
** (4) とにかく人間は間違うことがある、ということを前提に...
-いくつかの言語(特にC言語やC++言語)は、とにかく人間が間...
-でも実際は人間はときどき間違えるのです。だから間違えてい...
-そして間違えたときに間違いに気付けるきっかけがあると最高...
** (5) 最適化は果たしてユーザのためになっているのだろうか?
-多くのC言語やC++言語では、高度な最適化を売りにしています...
-最近の最適化はかなり優秀で、こちらが高速化してやろうと思...
-こんなことをされるとどうなるかというと、初心者が最適化手...
-何の変哲もない素直なプログラムが、超絶にがんばったプログ...
-最適化を過剰に重視する考え方の先には、「もはやプログラム...
** (6) テーマ#3: やりたいことを素直に書けるべき
-Windowsでなんか適当にウィンドウを出してそこに線を引いた...
-結局、私はWindowsから、ほしくもないのにパラダイムを押し...
-上記の(2)や(3)のテーマも、結局はプログラマが自分の本来や...
** (7) 物事を複雑にするべきではない
-言語やライブラリを使っていると、なんでこれはこんな仕様な...
-世間の多くのソフトウェアは、複雑な問題を複雑に解決してお...
-プログラマの腕の見せ所は、複雑そうな問題を単純なやり方で...
** (8) テーマ#4: メモリ管理
-メモリ管理は、古くからあるシステムプログラミングのテーマ...
-メモリをallocしてfreeするというただそれだけのことをきち...
-このテーマになるとまずはガベージコレクションに触れないわ...
-古典的なガベージコレクションは「マーク・アンド・スイープ...
-マーク・アンド・スイープを使わないタイプのメモリ管理支援...
-また「自動リリースプール」というアルゴリズムもあります。...
-最近はやっているRustという言語も、独自のメモリ管理の考え...
** (9) 少しずつ積み重ねて進んでいきたい
-私はプログラミングが大好きです。でもただ毎日作りたいプロ...
-私は自分の使う言語やライブラリも少しずつ改良したいです。...
-いや、そんな大それた改良は、別の人に任せておけばいい。自...
-もし「面白そうだ、やってみたい」と思えたら、ぜひ自分であ...
-自作の言語やライブラリを使うことで、既存言語や既存ライブ...
** 次回に続く
-次回: [[idea0002]]
*こめんと欄
#comment
終了行:
* 川合のプログラミング言語自作(ライブラリ自作)のための...
-(by [[K]], 2019.03.04)
** (1) はじめに
-「プログラミング言語やライブラリを作っていいですよ」と言...
-ここではそんな人のために、例えばこんな風に考えたらどうか...
-「なんだー、こんな身近なことでいいのかー」と思ってもらえ...
** (2) テーマ#1: 配列の自動拡張機能を付けるべきかどうか?
-仮に int a[10]; みたいな配列変数があったとして、a[9] = 3...
-それで、これを見つけた時に、「エラーになって止まる」のが...
-まあ一番まずいのは「エラーも何も出さず、配列の境界を越え...
----
-エラーで止まるのはもちろんいい言語です。ユーザは宣言時の...
-しかし一方で、もし後からでもサイズが変更できる言語だった...
----
-黙って続行するというのは、一見するとひどいと思うかもしれ...
-一般にエラー処理はこんな感じでおこなわれています。
err = 処理1(...); if (err != 0) { エラー処理 }
err = 処理2(...); if (err != 0) { エラー処理 }
err = 処理3(...); if (err != 0) { エラー処理 }
-それとか、例えばポインタを使ってアクセスしたいときはこん...
if (p != 0) { a = *p; }
-これはつまり、ポインタが正常だったらポインタを使ってアク...
-さてこれらを見てどう思いますか?何をするにもif文で、うっ...
-・・・おいおい、こいつは今さら何を言っているんだ、エラー...
-そう考えた時、エラーがあってもとりあえず止まらないで無視...
** (3) テーマ#2: 自動でエラー処理してくれたらいいかも?
-私はコンソールアプリを書いているときに、ファイルのオープ...
-またmallocしてNULLを返されてしまったら、「out of memory...
-あらかじめ大きなバッファを用意しておいて、ファイル全体を...
-このように定番のエラー処理があると思うのですが、それを毎...
-それなら最初からこの定番処理付きのライブラリ関数を用意し...
// 普通の書き方.
a = malloc(n);
if (a == NULL) {
fprintf(stderr, "out of memory\n");
exit(EXIT_FAILURE);
}
fp = fopen(argv[1], "rt");
if (fp == NULL) {
fprintf(stderr, "fopen error : %s\n", argv[1]);
exit(EXIT_FAILURE);
}
// 便利な関数がある場合の書き方.
a = malloc_ne(n);
fp = fopen_ne(argv[1], "rt");
-ということで、10行が2行になるわけです。これはすごく見通...
** (4) とにかく人間は間違うことがある、ということを前提に...
-いくつかの言語(特にC言語やC++言語)は、とにかく人間が間...
-でも実際は人間はときどき間違えるのです。だから間違えてい...
-そして間違えたときに間違いに気付けるきっかけがあると最高...
** (5) 最適化は果たしてユーザのためになっているのだろうか?
-多くのC言語やC++言語では、高度な最適化を売りにしています...
-最近の最適化はかなり優秀で、こちらが高速化してやろうと思...
-こんなことをされるとどうなるかというと、初心者が最適化手...
-何の変哲もない素直なプログラムが、超絶にがんばったプログ...
-最適化を過剰に重視する考え方の先には、「もはやプログラム...
** (6) テーマ#3: やりたいことを素直に書けるべき
-Windowsでなんか適当にウィンドウを出してそこに線を引いた...
-結局、私はWindowsから、ほしくもないのにパラダイムを押し...
-上記の(2)や(3)のテーマも、結局はプログラマが自分の本来や...
** (7) 物事を複雑にするべきではない
-言語やライブラリを使っていると、なんでこれはこんな仕様な...
-世間の多くのソフトウェアは、複雑な問題を複雑に解決してお...
-プログラマの腕の見せ所は、複雑そうな問題を単純なやり方で...
** (8) テーマ#4: メモリ管理
-メモリ管理は、古くからあるシステムプログラミングのテーマ...
-メモリをallocしてfreeするというただそれだけのことをきち...
-このテーマになるとまずはガベージコレクションに触れないわ...
-古典的なガベージコレクションは「マーク・アンド・スイープ...
-マーク・アンド・スイープを使わないタイプのメモリ管理支援...
-また「自動リリースプール」というアルゴリズムもあります。...
-最近はやっているRustという言語も、独自のメモリ管理の考え...
** (9) 少しずつ積み重ねて進んでいきたい
-私はプログラミングが大好きです。でもただ毎日作りたいプロ...
-私は自分の使う言語やライブラリも少しずつ改良したいです。...
-いや、そんな大それた改良は、別の人に任せておけばいい。自...
-もし「面白そうだ、やってみたい」と思えたら、ぜひ自分であ...
-自作の言語やライブラリを使うことで、既存言語や既存ライブ...
** 次回に続く
-次回: [[idea0002]]
*こめんと欄
#comment
ページ名: