レンタルマギカはいいよね。主題歌はw
ということはどうでもよくて。
どう書く?org 4375 jijixi: JoCaml は OCaml に並行プロ...(分散関数呼び出し) - 投稿の詳細
JoCaml は OCaml に並行プログラミングの概念の一つである join calculus のサポートを組み
込んだ言語です。
並行プログラミングと分散プログラミングがサポートされています。
なるほどお。その方面の言語でしたか。
「JoCamlってのはナニモノ?」って声が聞こえてきてセツなかったので、JoCaml で投稿して
みた。→#4375
まーなんつーのか、ググっても日本語のページはわしの日記くらいしか出てこないあたり、
実は誰もいじってないのかしらと心配なんだが、どうなんだろね。programming reddit
なんかを見てると、海外ではじわじわ人気が出てきてるようにも思えるんだけど。
あう。ぐぐりもせずに書いておりました。
でも、Caml/OCamlでjijixiさんがイロイロ書かれているのは読んだ覚えがありますが、
JoCamlにも言及されてましたっけ?
とここで初めてぐぐってみる。
はー、今年の5月末と6月頭のエントリですか。鳥頭2.0だw
ふむ。ほとんど内容がないけどWikipedia (英語版)にもちゃんとありますね
→
JoCaml - Wikipedia, the free encyclopedia
Join-calculus - Wikipedia, the free encyclopedia
■
言葉の独り歩き
「大艦巨砲主義」って本来の意味で捉えられることはほとんどないよね。
その手のことは他にいくらでもあるから
(言葉の変化ということで)まあ、いいんだけど。
大艦巨砲主義 - Wikipedia
あと、戦艦大和って日本帝国海軍の時代遅れを示すものとして使われることが
ままあるけど、これもちょっと事実誤認が多いと思う。
確かに就役したのは太平洋戦争開戦の後だし、ロクな戦果も挙げてないけれども、
アメリカにしても大和より後に作っている戦艦はあるし、
大英帝国に至っては第二次世界大戦終結後に完成した戦艦まで持っている→
ヴァンガード (戦艦) - Wikipedia
ちなみにさらにその後に完成・就役した戦艦もあったりする→
ジャン・バール (戦艦・2代) - Wikipedia
結果として、壮大な無駄遣いになってしまったということは否定できないかもしれないけど
大和の建造開始(昭和12年)の時点で、第二次世界大戦のような様相を予想できた人は
極少数であり、わたしたちは後の世からいわば「神の視点」でもって
「ああすれば、こうすれば」ということをぴーちくぱーちくいうことはできるけれども、
すべきではないと思う。なぜそういう選択がなされたのかという考察は別ね。
■
GUILE
artonさんの指摘をうけ(いや、自分にそうしろという話ではなかったのですが)、
Cでのコーディング規約/標準 を探してみた。
が、C++がやたらと引っかかる結果となってしまったw
まあそれでもC用のものもあったのでいろいろ見ていたのだけど、
GNU の標準で見つけた記述。
GNU コーディング規約
http://www.sra.co.jp/wingnut/standards-j_toc.html
言語は何を使うべきか
コンパイル言語で高速に実行される言語を使いたいのなら,一番良いのはC 言語を使うことで
す. 他の言語を使うのは標準外の機能を使うようなものです. ユーザにとってはトラブルの元
です. もし, GCC が C 以外の言語をサポートしていたとしても, プログラムを構築するには,
その言語用に GCC をインストールしなければならないとしたら, 面倒だと感じるでしょう.
例えば, 読者が C++ でプログラムを書いたとすると, 他の人はそれをコンパイルするために
は GNU C++ コンパイラをインストールしなくてはなりません.
C++ やその他のコンパイル言語に比べて C には一つ有利な点があります. C を知っている人
の方が多いので, C で書かれたプログラムを読んだり修正したりするのが簡単にできる人の方
が多いということになります.
このため,他の候補となる言語よりも C を使った方が一般にはずっと良いのです.
ただし,例外が二つあります.
* ある言語専用のツールは, その言語で書いても問題ない. そのツールを構
築する人だけがその言語をインストールすればいいのだから.
* 興味を持つ人がごく限られるアプリケーションプログラムなら, どの言語
で書かれているかという問題はその他の人にはあまり関係ないだろうから,
読者の意のままに使って良い.
拡張性を持つように設計されているプログラムはたくさんある. そういうプログラムは C 言
語よりも高級な言語のインタプリタを内蔵している.そのプログラム自体もその言語で書かれ
ていることも多い. Emacs エディタがこの技法の先駆けとなった.
GNU ソフトウェアの標準の拡張用インタプリタは GUILE である.GUILE はScheme 言語の実
装である(Scheme は Lisp の非常にきれいで簡潔な方言である).
http://www.gnu.org/software/guile/. われわれは他の「スクリプト言語」例えば Perl や
Python で書かれたプログラムを拒絶することはないが, GUILE を使
うことは GNU システム全体の一貫性のためには非常に重要である.
え、まだそういう立場のものだったの?>Guile
日本語訳が古いだけかもしれないと思って、原文も見てみることにしたところ、
last updateがつい最近だったりした。とはいうものの、
Source Language - GNU Coding Standards
The standard extensibility interpreter for GNU software is GUILE
(http://www.gnu.org/software/guile/), which implements the language Scheme (an
especially clean and simple dialect of Lisp). We don't reject programs written in
other “scripting languages” such as Perl and Python, but using GUILE is very
important for the overall consistency of the GNU system.
変わってNEEEE(笑)
C FAQに ポインタ経由の関数呼び出しについて言及している項目があった。
comp.lang.c FAQ list ・ Question 4.12
Q: I've seen different syntax used for calling functions via pointers. What's the story?
A: Originally, a pointer to a function had to be ``turned into'' a ``real'' function,
with the * operator, before calling:
int r, (*fp)(), func();
fp = func;
r = (*fp)();
The interpretation of the last line is clear: fp is a pointer to function, so *fp is
the function; append an argument list in parentheses (and extra parentheses around
*fp to get the precedence right), and you've got a function call.
It can also be argued that functions are always called via pointers, and that
``real'' function names always decay implicitly into pointers (in expressions, as
they do in initializations; see question 1.34). This reasoning means that
r = fp();
is legal and works correctly, whether fp is the name of a function or a pointer to
one. (The usage has always been unambiguous; there is nothing you ever could have
done with a function pointer followed by an argument list except call the function
pointed to.)
The ANSI C Standard essentially adopts the latter interpretation, meaning that the
explicit * is not required, though it is still allowed.
See also question 1.34.
References: K&R1 Sec. 5.12 p. 116
K&R2 Sec. 5.11 p. 120
ISO Sec. 6.3.2.2
Rationale Sec. 3.3.2.2
H&S Sec. 5.8 p. 147, Sec. 7.4.3 p. 190
H&Sの邦訳なんて、今は手にはいらねえだろうなあ
(学生の自分に読んだことはある。金がなくて買えなかったんで“後輩”が
買ったのを借りて読んだんだけどw)
あと、(*fp)(); をfp(); と表記するのの起源ですが、
3.3.2.2 Function calls
Pointers to functions may be used either as (*pf)() or as pf(). The latter
construct, not sanctioned in the Base Document, appears in some present versions of
C, is unambiguous, invalidates no old code, and can be an important shorthand. The
shorthand is useful for packages that present only one external name, which
designates a structure full of pointers to objects and functions: member functions
can be called as graphics.open(file) instead of (*graphics.open)(file).
というのが見つかりましたので、やはり何かの処理系でそのようになっていたのを
取り込んだということのようです。多分 pcc ではないと思いますが。
■
Cで多態
L'eclat des jours(2007-11-23)
ああ、確かにCOMに関連するところはもろにそれですね。
#ifdefでC++とCとで別々に書かれているところを比較して読んでみると、
どういうからくりになっているのかよくわかりますよね。
ただ、これはVisual C++前提なのでコンパイラによっては
同じ書き方が通じるとは限らないと(考え方自体は問題ない)。
かすかな記憶をたどると、C++でいうところの vtableをオブジェクトを表す構造体の
先頭においてどうこうというのが特許になっていたような。
その後異議申し立てとかあったかどうかまでは覚えてません。
と、これは脱線。
■
Haskell/Lua/Scala/Erlang⇒次にくる言語
sumii先生さんの紹介エントリ
(「【新・言語進化論】次にくる!新登場言語」 - sumiiの日記)
を見て初めて知る。むーこんな記事があったとは。
またまた脱線なんですが、Luaの
Luaの思想は言語のコアとしては選び抜かれた数少ない概念のみを提供し、そこから複雑な概
念を「組み立てる」ことにある。<1-- Luaはオブジェクト指向言語ではないが、テーブルとファー
ストクラス関数、そして少々のsyntactic sugarによってオブジェクト指向の仕組みを非常に
巧みに組み立てることができる。-->
こういう考え方は好きです。もし仮に自分がなにかの言語を作る機会があったなら
多分こういうポリシーの元で作ると思います。が、実際にそうできるかどうかは別の問題w
■
DQ4
近くのディスカウントショップで売っているのを見かけたが、
自分がシリーズで一番すきなのは3だったりするのでスルーしてみた。