新人をバイナリアンに育てる ~ その4 ~
新人:高橋君、あまりに難しいことを頼んだため飽和中。数学はできるけど、C 言語は配列で四苦八苦している。FORTRAN できるって言ってたじゃん。FORTRAN の配列と C の配列は違うの?と思っても後の祭り。社長の私が導入をミスったのだ。
がんばれ、新人。
新人:高橋君 日報 6/27(Mon) 18:12
作業報告します
今日行ったこと
ー"linuxコマンドの使い方"を322ページ中133-141まで読み進める
ー"C実践プログラミング"を136ページ中114-121まで読み進める
グラフィック関係
ーrawイメージデータを読み込んで各グレイスケール値を数え表示するプログラムについて
仕様を満たしていなかったため訂正、ただしまだ解決していない
今後のtodo
ー"linuxコマンドの使い方"を151ページまで読み進める
ー"C実践プログラミング"を133ページまで読み進める
グラフィック関係
ーrawイメージデータを読み込んで各グレイスケール値の値を読む込むプログラムの作成
ーOpenCVを使わずに72×34の白黒イメージに四角を書き、rawデータで書き出すプログ ムの作成
コメント
返す返す残念だ。このときのプログラムが残っていない。どう間違えたのかわからない。やはり、簡単に raw イメージデータを扱うことは出来ない模様。ただ、18:12 の報告になり、やや落ち着いた。今後の ToDo がおとなしめになった。期待値としては、”パット”できるとおもっていたけど、そうはいかなかった。反省してます。
週刊社長通信 6/27
■ What's New
最近 tomorrow という曲をリピートして聞いてます。
Tevin Cambell の声が素晴らしい。
ユーチューブにあるのね
http://www.youtube.com/watch?v=WPrHx2sSdDs
■ 読書
「ゲーテル・エッシャー・バッハ」再帰が難しいまま、160ページくらい=>完全に止
まった、、、
コネクションマシンをざっとななめ読み
モチベーション入門をななめ読み
あと、C言語の本をななめよみ
コメント
2011 年の6月というと、震災の直後なのか。tomorrow を聞いて頑張ろうと自分自身を鼓舞しているね。涙ぐましい。震災で直接困っていたわけじゃなくて(被害にあった人ごめんなさい)、震災で仕事がなくなって困っていた。
あと、高橋君の教育に迷っているね「モチベーション入門」とか読んでいる。自分に必要ない。コネクションマシンの知識は、、、、今に生きてないな。
新人:高橋君 日報 6/28(Tue) 18:02
作業報告します
今日行ったこと
ー"Unix/linuxコマンドの使い方"を322ページ中142-151まで読み進める
ー"C実践プログラミング"を123-135まで読み進める
C実践プログラミングについては大体読み進めることができた
グラフィック関係
ーrawイメージデータを読み込み各グレイスケール値の数を数え表示するプログラムの作成は終了
ーOpenCVを使わずに72×34の白黒イメージに四角形を描きrawデータで書き出すプログ ム
ー四角形を描くための前準備として直線、点を描くプログラムの作成中
ーそれに伴いポインタの勉強が必要だと思われる
今後のtodo
"Unix/linuxコマンドの使い方","C実践プログラミング"を読む
OpenCVを使わずに点,直線を描くプログラムの作成
同じくOpenCVを使わず72×34の白黒イメージに四角形を描きrawデータで書き出すプロ ラムの作成を行う
コメント
4週目にしてついにポインタの話になった。がんばって、raw イメージデータを読み込むプログラムは出来たみたい。
その後の私の指示「ポインタを使わずに、配列で書いてください。」
う~ん。モチベーションを下げてないか?もうちょいやさしくいってあげればよかった。「モチベーション入門」を有効に使っていない。
新人:高橋君 日報 6/29(Wed) 18:03
作業報告します
今日行ったこと
ー"Unix/linuxコマンドの使い方"を322ページ中152-161まで読み進める
ー"やさしいC++"を8-78まで読み進める
グラフィック関係
ー保存されたrawデータを読み込み各グレイスケール値の数を数えるプログラムを作成した
ー保存されたrawデータを72×34になるように二次元配列で読み込みそのまま表示する ログラムを作成した
今後のtodo
ー"Unix/linuxコマンドの使い方"を162-172まで読み進める
ー"やさしいC++"を79-86まで読み進める
OpenCVを使わずに72×34の白黒イメージに四角形を書き出しrawデータで保存する
コメント
どんどん、下方修正されていく。かわいそうだ。「やさしいC++」になってしまった。これマンガじゃないか?マンガだけど中は難しい、、、、って前に教育した人が言っていた。
二次元配列にチャレンジ。ポインタは本を読んでから、、、という(私の)判断だね。本人は不満だったろう。
新人:高橋君 日報 6/29(Wed) 18:37
作業報告します
今日行ったこと
ー"Unix/linuxコマンドの使い方"を322ページ中162-171まで読み進める
ー"やさしいC++"を78-80まで読み進める
グラフィック関係
ー四角形を描写する関数の作成を行った
ー四角形の内側を塗りつぶす関数の作成を行った
ーrawイメージデータを読み込む関数の作成を行った
ー描写された四角形をrawイメージデータとして書きだす関数の作成を行った
今後のtodo
ー"Unix/linuxコマンドの使い方"を172-181まで読み進める
ー"やさしいC++"を81-91まで読み進める
ー作成した関数を改良する
コメント
2次元配列を使って、四角を作るプログラムを書いている。斜めの線はまだ難しいね。表示用のプログラムをこれからつくるのだろう。
「作成した関数を改良する」とある。なんか少しわかってきたのでモチベーションが上がったのかな?
新人をバイナリアンに育てる ~ その3 ~
サブタイトル:そら飛ぶ バイナリアン
新人の高橋君 GNU Development Tools を2週間で読了。どんな本かというと、、、
オーバーシー・パブリッシング - GNU開発ツール
このウェブサイトには目次もある。
http://www.oversea-pub.com/wp/wp-content/uploads/2013/01/gnudevjp_index_1st.pdf
なんで、社長の私がこれ読ませたのかなぞ。よくよく考えたら、正直無理だろう。でも2週間で読み切った。で、ちょっと早く行き過ぎたということで、「C言語プログラミング」(どの本かは今となっては不明)という本を読んでもらうことにした。
技術系の上司の良くあるミス。期待しすぎて、高望みのして、実力以上の事をさせてしまったんだ。こうなると、かじ取りが難しくなる。本人に「ちょっと難しかったね。」といってしまうと「がっかりして」しまう。ごまかしながら、易しい本に変えたのだった(たぶんそういうことだろう)。
まぁそれでも、もらったソースをコンパイルぐらいはできるから OpenCV のソースをコンパイルして、72x34 の画像を作ることには成功した。
中堅社員の日報 6/17(Fri) 18:42
- 昨日の作業の整理
- git の登録
- FrameBuffer 対応
- CMakeLists.txt の更新
- GTK, QT と同じレベルで、FB というのを追加
- cmake オプションで -DWITH_FB=ON とすると、
modules/highgui/src/window_fb.cpp をコンパイルするよう変更
- WITH_FB=ON の場合、デフォルトのダミー API がコンパイルされないよう変更
- ほぼ空の、window_fb.cpp を作成
- cvNamedWindow() に、printf() による呼ばれたことを明示する処理を追加
- cmake & make のやりなおし
- qemu で、自分の作った cvNamedWindow() が呼ばれたことを確認
- 高橋君の環境で OpenCV を動かす作業のサポート
コメント
OpenCV で FrameBuffer 対応している。ここでやってたのか。今の会社の資産になっている。6年前にはじめてたんだな。一応、高橋君の作業のサポートをやってもらっている。まぁ、やっぱり新人君にはいやってね、じゃ、できないわな。
新人:高橋君 日報 6/20(Mon) 18:35
作業報告します。
今日行ったこと
unix/linuxコマンドの使い方322ページ中 55-63ページまで読み進める。
知識にあるコマンドがあるため問題なく進んでいる。
C実践プログラミングを404ページ中39-57ページまで読み進める。
こちらは配列に入ったため少し慎重に行うべき。
OpenCV関連
-72×34の白黒イメージに四角形を描くところまでは進むことができた。
今後行うべきこと
unix/linuxコマンドの使い方64ページ以降を読み進める。
C実践プログラミングを58ページ以降をプログラムを行いながら読み進める。
OpenCV関連
-72×34の白黒イメージを45度傾ける。
-その後白黒のrawデータでセーブを行う。
-普通のプログラムで白黒のrawデータを読み込んで白と黒の数を数えるプログラムを作成する。
-普通のプログラムで72×34の白黒イメージに書いた四角形を書き、rawデータで書き出す。
-普通のプログラムで72×34の白黒イメージに書いた四角形を書き、45度傾けてrawデータで書き出す。
週刊社長通信 6/20
■ 読書
「ゲーテル・エッシャー・バッハ」再帰が難しいまま、160ページくらい
最新コンパイラ構成技法の読み返しとプログラミング
生存解析を Lisp で書いている途中
命令レベル並列実行処理(プロセッサ・アーキテクチャとコンパイラ)スーパースカラのプロセッサを作ってみたくなった
関連して Interface のCPUの動作原理とアセンブラの基礎知識を読む
社長通信<技術編> 6/20
みんながリーナス・トラバースさんになろう。=>どうすらばなれるか考えよう
GLSL について調査した。
http://http.developer.nvidia.com/Cg/arbvp1.html
vertex 用の Low Level Shader 言語(ほぼアセンブラ)。ジャンプ命令すらない。
文法通りに作ればよさそう。レジスタ(変数)は無限に使える。
したがって、
まず文法の木を作る=>一直線の木。複雑な木構造にならない。
生存解析をする
カラーリングする
レジスタの割り当て
をすれば、Low Level Shader 言語用のアセンブラに落とせそうだ。
構文解析は本質ではないので、人間が文法の木を作ってコンパイラに渡す。
つまり lisp で書く。(書いている途中)
アセンブラに落としたら今度はそれが動く vertex 用のプロセッサが必要。
これは
Lisp でシミュレーション
VHDL で簡単なプロセッサを書く
VHDL で複雑なプロセッサを書く
できればスーパースカラーに対応したプロセッサを書きたい。
積和演算をするので、スーパスカラーいらないかも。
スーパースカラー=>アウトオブオーダーなプロセッサ
ついでにレジスタを動的に割り当てるかレジスタウィンドウにするかしたい。
新人:高橋君 日報 6/22(Tue) 18:25
作業報告します。
今日行ったこと
unix/linuxコマンドの使い方322ページ中64-96ページまで読み進める。
使ったことがあるコマンドがあるため問題なく進んでいる。
C実践プログラミングを404ページ中58-60ページまで読み進める。
配列文字列で思った以上に手間取った。
OpenCV関連
72×34の白黒イメージを45度傾けるプログラムを作成していたが終了させることはで
きなかった。アフィン変換をするところに原因があると思われる。
今後行うべきこと
unix/linuxコマンドの使い方95ページ以降を読み進める。
C実践プログラミングを61ページ以降をプログラムを行いながら読み進める。
OpenCV関連
-72×34の白黒イメージを45度傾ける。
-その後白黒のrawデータでセーブを行う。
-普通のプログラムで白黒のrawデータを読み込んで白と黒の数を数えるプログラムを作成する。
-普通のプログラムで72×34の白黒イメージに書いた四角形を書き、rawデータで書き
出す。
-普通のプログラムで72×34の白黒イメージに書いた四角形を書き、45度傾けてrawデ
ータで書き出す。
新人:高橋君 日報 6/23(Wed) 18:35
作業報告します。
今日行ったこと
unix/linuxコマンドの使い方322ページ中97-110ページまで読み進める。
シェル系統の知識はあまりないため慎重に読み進めたい。
C実践プログラミングを404ページ中61-74ページまで読み進める。
OpenCV関連
白黒イメージに四角形書き45度傾けるプログラムを作成した。
またrawデータのセーブを行った。
今後行うべきこと
unix/linuxコマンドの使い方111ページ以降を読み進める。
C実践プログラミングを75ページ以降をプログラムを行いながら読み進める。
OpenCV関連
-普通のプログラムで白黒のrawデータを読み込んで白と黒の数を数えるプログラムを作成する。
-普通のプログラムで72×34の白黒イメージに書いた四角形を書き、rawデータで書き
出す。
-普通のプログラムで72×34の白黒イメージに書いた四角形を書き、45度傾けてrawデ
ータで書き出す
社長の指示 6/22(Wed) 22:40
よくよく考えたら、
”四角形を書き”
”45度に傾ける”
というプログラムを作るには、直線を書くプログラムを必要とするので後回しにします。
ということで以下のように変更
グラフィック関係
- OpenCVを使わず、グレイスケールのrawイメージデータを読み込んで
各グレイスケール値の数を数え、表示するプログラムを作成する。
- (OpenCV は使わずに) グレイスケールのrawイメージデータを読み込んで
Gimp が読めるカラーの rawイメージデータに変換しファイルにセーブする。
コメント
何を思ったか(おぼえてない)、突然、方向修正。OpenCV やっぱり新人には難しいということなんだろうね。どんどん、下方修正されている。ちょっとかわいそう。うちのような小さな会社にはこの手のノウハウはないんだよね。
新人:高橋君 日報 6/23(Thu) 19:38
作業報告します
今日行ったこと
linuxコマンドの使い方111ページから120まで読み終わる。
シェル系のため慎重に行いたい。
C実践プログラミング75ページから93まで読み終わる。
知識にほとんどないものがあるため、慎重に行いたい。
グラフィック関係
ほとんど進展はなし。
今後行うべきこと
linuxコマンドの使い方、C実践プログラミングをそれぞれ読み進める。
OpenCVを使わずにrawイメージデータを読み込んで各グレイスケール値の数を数え、表
示するプログラムの作成を行う。
同じくrawイメージデータを読み込みGimpが読めるカラーのrawイメージデータに変換しセーブする。
新人:高橋君 日報 6/24(Fri) 17:59
作業報告します
今日行ったこと
linuxコマンドの使い方を322ページ中121-132ページまで読み進める。
C実践プログラミングを404ページ中94-113まで読み進める。
どちらも読みこぼしがないようにしたい。
グラフィック関係
Opencvを使わずグレイスケールのrawイメージデータを読み込んで各グレイスケール値の数を数え表示するプログラムを作成した。
Opencvを使わずグレイスケールのrawイメージデータwp読み込み、Gimpが読めるカラーのrawイメージデータに変換しセーブを行った。
今後行うべきこと
linuxコマンドの使い方、C実践プログラミングをそれぞれ慎重に読み進める。
普通のプログラムで72×34の白黒イメージに四角形を作成、rawデータで書き出す。
普通のプログラムで72×34の白黒イメージに書いた四角形を作成、45度傾けてrawデータで書き出す。
コメント
ブラック企業脱出。17:59 にメールがきている。「どちらも読みこぼしがないようにしたい。」とかなり弱気。やっぱり、最初に難しいのをさせ過ぎると自信を失うんだな。今頃になって反省。
とはいえ、なぜか復活して、各グレイスケールの値の数を数え表示するプログラムが出来上がっている。これもう今となってはどこにもない。取っておけばよかった。
このころすでに git を使っていると思うけど、まだ、高橋君は使えてないみたい。
新人をバイナリアンに育てる ~ その2 ~
サブタイトル:そら飛ぶ バイナリアン
このブログは 2011 年に新人教育をしたメールの断片から書きこおこしている。もう6年も前の話であることに注意。新人君(高橋くん - 仮名 - )は理工学系大卒のピカピカの新人。数学は得意で球の体積を積分で簡単に出せる。結構優秀。そして、学部では FORTRAN を学んでプログラミングもしたことがあるので、結構、できると信じて疑っていない。
そこで、GNU Development Tools という某所の自費出版本をよませて(それ以外の仕事はなし。勉強が仕事)自習させてみた。その記録である。
よくわからないけど、サブタイトルもつけてみた。どっかの出版社の人、本にしてください。:-)
新人くん日報:6/15 17:52
今日行ったこと
移行作業を終了させる。
GNU Development Tools第7章動的リンクを読み終える。
内容については完全に把握していないので読み直しが必要。
今後やるべきこと
GNU Development Tools を読み終える。
FreeBSDを導入する。
実務経験7~8年の人の日報
- 画像認識
- 顔認識のサンプルプログラムの、API レベルでやってることを把握
OpenCV は haar 分類器というものを持っており、
xml で与えられるパターン情報を元に、画像のパターン認識を行うことが出来る
パターンにヒットした箇所は座標で得られ、
テストでは座標をもとに赤い丸を書いている
テストに用いた顔の認識パターンは、正面を向いたもの、である
- エッジ検出のテストの修正
エッジ検出のテストでは、matrix を使って rotate していたが、必要無いことが分かった。`
利用するカメラの性質により、画像の左上を座標の起点とするか、左下を起点とするか分かれる
どちらを起点にするかは、取得した画像データ IplImage の持つ origin メンバにより取得出来るで、
もし origin が IPL_ORIGIN_BL ( 左下起点 ) の場合、cvFlip() という API で
上下の反転が可能であることがわかったため、テストを修正した
- OpenCV 2.2 と OpenCV 1.0 の違いをより明確に調査(特に、H/W アクセラレーションについて)
H/W アクセラレーション、正確には GPU の利用機能は、2.2 から導入された
対応する GPU は NDIVIA 製のもののみで、cuda ライブラリが必要となる
GPU を使うライブラリは、既存のソフトウェアで計算する API と別モノになっている
( DirectFB のように、API は一つで、API の中でソフトウェアを使うかハードウェアを使うか
処理が分岐するような設計にはなっていない)
GPU を使った HogDescriptor という画像検出器が、CPU による検出に比べ桁違いに高速らしい
リファレンスマニュアル:
http://opencv.jp/opencv-2svn/cpp/index.html
http://opencv.jp/opencv-2svn/cpp/gpu._gpu-based_functionality.html
ChangeLog:
http://opencv.jp/opencv2-x-tips/changelog_from_21
- IplImage 構造体の中身の調査
image_data, image_size をもとに、raw データをファイルに保存するテストを作った
社長から高橋君への指示 6/15(Wed) 22:50
次の事を達成してください。
72x34 の白黒画像イメージに四角を書く
PNG でセーブ
- OpenCV で次のプログラムを作る
72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
PNG でセーブ
- OpenCV で次のプログラムを作る
72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
白黒のraw データでセーブ(すでに実現しているのでそれをそのまま流用)
- 普通のプログラムで
白黒の raw データを読み込む
白の数と黒の数を数えて表示する。
- 普通のプログラムで
72x34 の白黒画像イメージに書いた四角を書く
raw データで書き出す
- 普通のプログラムで
72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
raw データで書き出す
今月中にすべてこれができたら大したもの。
新人:高橋くん日報:6/16(Thu) 18:16
今日行ったこと
GNU Development Tools を読み終わる。
ただし、理解がまだまだ浅いと思われるのでこのまま2周目に移行。
VMware上でFreeBSDを導入した。
ただし設定が終わり切っていないため明日以降も行う予定。
これから行うべきこと
GNU Development Tools を読みつづける。
FreeBSDの設定。
OpenCVのインストール及びプログラム作成。
コメント
この日だけ 18:16 の報告になっている。実は 18:00 に帰るためには 17:30 には仕事を終了して、日報をかいて 17:50 に日報をメールして帰るように指示していた。ブラックでない会社。まぁ小さい会社、いいことばかりじゃないけどね。ここは私の方針で継続して働ける環境を作っている。(もちろんデスマーチもありました。それで会社がピンチになったことも)。この日はきっと本を読み切るためにちょっと遅くなったんだね。
GNU Development Tools 読み終わった!!1週間ちょっと?おー誰かが指示したのかな?このままで終わらせずに2周目に突入。まだ、よんだだけだからね。でも、新人だけに、出来る気になっている。
実務経験7~8年の人の日報
- 移植用 todo の更新
- qemu for ARM の環境をサーバ に作る
- arm 向け OpenCV 1.0.0 の build
- arm 向けに、グレースケール変換のテストをコンパイル
- qemu-arm 上でグレースケール変換のテスト
-> ok
- arm 向け OpenCV 2.2.0 の build
-> ok. 手順書を書いた
- arm 向けに、グレースケール変換のテストをコンパイル( 2.2.0 )
- qemu-arm 上でグレースケール変換のテスト( 2.2.0 )
-> ok
- qemu-arm 上でエッジ検出変換のテスト( 2.2.0 )
-> ok
- ARM のボードに、OpenCV 2.2.0 のライブラリをコピー
- ARM のボード上でエッジ検出変換のテスト
-> ok
高橋くんへ
マトリックスを使った回転をしているプログラムを添付します。
新人をバイナリアンに育てる ~ その1~
以前新人教育をしたメールの文章をブログに書き起こす。
登場人物は 高橋(仮名)くん。まずやったこと。
例の自費出版本の GNU Development Tools を読ませた。
6/8 17:59 日報
GNU Development Tools 第4章コンパイルについて読み終わる。
同じくGNU Develpoment Tools 第5章 アセンブルについて実行コードの逆アセンブルまで読み終わる。
4章、5章ともに今現在読み取ることができない点はなし。
コメント
そんなことはないだろう。この時点で、新人くん大きく勘違い。がんばれ。でも、まだスキルが足りなくて4章、5章なんて理解できないぞ。理解できないことを理解できないのが新人たるゆえんか。
6/9 17:52 日報
GNU Development Tools 第5章アセンブルを読み終わる。
同じくGNU Development Tools 第6章静的リンクを_startシンボルによる致命的エラーま
で読み終わる。
アセンブラについては若干解析が不十分だと思われる。
また、静的リンクについてはリンクが異常終了するため少々難航するかと思われる。
コメント
その後何が起こるか正確には思い出せないけど、まぁしかたがない。というか、その技量を上の人が見極めるのはどれだけ大変かが後でわかった。ついつい期待しちゃうんだよね。だって本人の報告から「アセンブラについては若干解析が不十分」ってあるから、裏を返せば、ちょっとがんばって解析すると、アセンブラとかできちゃう?とおもっちゃう。
私の回答
エラー内容を精査してXXXさんと一緒に解決してください。
社長通信
社長技術通信 6/13
みんながリーナス・トラバースさんになろう。
=> そのためには、A面B面を作らない
=> 具体的には、自分探しをしない(夢や憧れを追わない)
GLSL について調査した。
http://http.developer.nvidia.com/Cg/arbvp1.html
vp1 => vertex 用の Low Level Shader 言語(アセンブラ?)
文法通り作ればよさそう。
あとはスタックを作るのと、テンポラリレジスタのセーブ・ロード
Sparc のように in register をtemp register 8をout register 8とすればよさそ
う?
Result 用のレジスタも必要かも。
コメント
当時、社長通信とか言ってみんなに発信していた。いまも技術通信に変わってやり続けている。この何とか通信10年以上、社員に向けて毎週発信しているんだよね。継続は力なり。
6/13 17:55
GNU Development Tools 第6章静的リンクまで読み終わる。
完全に理解したわけではないので今後読み直しが必要。
今後の予定としてはGNU Development Tools を読み進めつつ、Ubuntsuの導入などを行う
予定。
コメント
これだけ読むとすごい進捗。2~3年かかることを3日で達成している。新人すごい。
risc-v を試してみる(途中)
まずは toolchain のインストール
github.com
git submodule update --init --recursive
の llvm でえらく時間がかかっているんですけど。
あとは
export RISCV=/path/to/install/riscv/toolchain
$ ./build.sh
でできるらしい。
その後、
ここのを使えばバーチャルな環境ができる、、、はず。
よくみると toolchain のなかに tests は含まれていた。なので、toolchain だけでいいはず。
llvm の clone がおそい。
PYNQ の Binary NN やってみたよ
とりあえず
qiita.com
のとおりやってみる。sudo -H でやった方がいいことに後で気づく。
update は結構時間かかった。
Cifar10.ipynb
当たり前だけど、うまくいくね。
それじゃ、ガゼルはどうよ?
馬と判断されました。鹿じゃないんだね。
Python をさわってみて
Python 実によくできた言語だと思います。C や Perl でどんな風に書いたら可読性が”落ちるのか”を研究していて、そういう書き方が”できない”ようにしているようです。(あくまで個人的な感想)
インデントで整形というのがその典型です。これは構文解析が楽になるという効果もあるようです。
代入したらローカル変数、参照”だけ”はグローバル
面白いと思ったのはこのスコープの扱い。フリー変数の扱いと言い換えてもいいかもしれません。
def func(a): b = 3 return a + b
この b のように”代入したら”ローカル変数です。
def func(a): return a + b
ここの b は、参照”だけ”しているのでグローバル変数。この時点で、かの有名な方の持論である Python は Lisp の亜種説は崩れます。スコープが特殊なんです。これ、Lisp とは大きく方向性が違う。いいか悪いかはともかくとして、おそらく、このようなスコープは Python 独特で、なかのコンパイラとインタプリタの構造を大きく変える(はずです)。事実 HyLang は let を捨てたようです。
じゃ、こんなのはどう?
def func(a): c = b b = b + 3 return c + b + a
"UnboundLocalError: local variable 'b' referenced before assignment" と実行時にエラーになります。
if の中で現れたものは?
>>> def iffunc(a): ... if a : ... b = 3 ... else : ... print(a) ... print(b) ... >>> iffunc(3==3) 3 >>> iffunc(3!=3) False Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 6, in iffunc UnboundLocalError: local variable 'b' referenced before assignment
実行時にかなり頑張っています。
++ とかはない
>>> a++ File "<stdin>", line 1 a++ ^ SyntaxError: invalid syntax
こういう構文シュガーがありません。どっかの言語みたいに構文シュガーの塊のようなことはないんです。載せればいいわけじゃない。
単項演算子の ++ とか -- とかあったほうが便利そうじゃないですか。でも入れると全体のバランスが崩れるんです。折角、参照はグローバルと規定したのに、++ を入れることで、参照だが代入だかわからなくなる。そういう事態を避けるようになっています。この規則のおかげでグローバル変数はたいていの場合"read onlyなデータ"です。関数の中からは書き換えることが出来ません。
こういった、コンパイラの中身や(インタプリタか、、、)書き方の細部にわたって、設計思想がかなりはっきりした言語であり、私にとっては知れば知るほど好感が持てる言語として評価が上がっています。コンパイラやインタプリタを作る人はその思想はどうあるべきかを考えるうえで研究対象の筆頭に上がってよい言語だと思います。