tsubolabo
@tsubolabo (tsubolabo)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

あるコンパイラ言語の新旧の仕様の差について

解決したいこと

 ある有名なコンパイラ言語についての質問です。この質問が私の勘違いから来るものだとすると、他の方に迷惑になりますので、具体的な言語名は伏せておきます。

 昔、アセンブラが全盛のころ、向学心をもって、より上位のコンパイラ言語を勉強し始めました。しかし、下記のような文法が出てきたところで、「こんな間違いを誘発しそうな言語は使えない」と感じて一気にモチベーションが下がり、長続きできませんでした。

当時、気になった文法(回想によるものなので不正確です):

数式中の +,- の記号の扱いは通常の数学のとおり。ただし、式の頭に - があるときに限り、その - は後ろに続く式全体にかかるものとする。
(例えば、-a+b+c-d は -(a+b+c-d) と見做せということです。)

 ところが、最近の同じ言語の説明書を見てもそのような文法は見当たりません。その後、仕様が改善されて今のようになったのか? それとも、上記のような仕様は昔から存在せず、私の勘違いだったのか? 詳しい方のご助言を頂ければ幸いです。

0

4Answer

具体的な言語名は伏せておきます。

ところが、最近の同じ言語の説明書を見てもそのような文法は見当たりません。その後、仕様が改善されて今のようになったのか? それとも、上記のような仕様は昔から存在せず、私の勘違いだったのか?

言語仕様の変遷を尋ねる質問でありながら、肝心の言語を伏せられていたら誰も回答できないように思えます。

私には回答できない内容ですが老婆心ながら…

2Like

@HalHarada さま
多くの知見を交えたご回答をありがとうございました。

pascalの名は当時良く聞きましたが、残念ながら勉強はしたことがありません。結論から先に言えば、今回の質問は完全に私の思い違いによるものでした。最初に書いた回想による文法も間違いで嘘です。調べ直してみたところ、当時も現在も文法は変わっていないようです。

思い違いだったと白状すれば、言語名を隠す必要もなくなりました。C言語でした。

昔のメモやメール類をもう一度見返して、記憶を辿り直してみました。お騒がせした代償に、ここに至った経緯を恥を忍んでお話しします。

① 一般の [*,/],[+,-] 演算子の処理優先順序はほぼ算数の規則と同じなのに、単項の - だけが別扱いなところには、勉強を始めた当時から違和感を感じていました。それだけでなく、先に書いた回想文法のように覚えていたところを見ると、優先順位も本来とは逆に、[*,/]や[+,-] よりも低位だと思い込んでいたことになります。ここが独学の悲しいところで、間違いを正す外部からの指導も得られないまま身についてしまいました。

② それからかなりの年月が過ぎ、スマホの某数値計算アプリを使い始めました。そのアプリに計算バグを見つけたため、開発者とメールでやりとりをしたことがあります。このアプリは MATLAB などとほぼ同じ文法なので、-2^2=-4 となるはずなのですが、-2^2=4 となるような仕様でした。数学の一般常識からも外れています。これに改善を求めたところ、開発者の言は、C言語の優先順序に沿っているので間違いではないとのことでした。私とは異なるまた別の思い違いです。^ はMATLAB のような数値計算ソフトではべき乗の記号ですが、C言語では ExOR のマークで全然別ものです。全く話になりません。ここでも、単項演算子 - を特別扱いしている弊害を見てしまいました。

①の土壌があるところに、②の問題まで経験したため、C言語の - 単項演算子にはますます拒否反応を起こすことになってしまいました。これが恥ずかしい質問をするに至った経緯です。

考えてみれば、- 単項演算子を優先的に処理することで、数学的に何らかの矛盾が生じる訳ではありません。しかし、算数の授業では、どこにあろうと分け隔てなく慣れ親しんだ - が、C言語では、なぜ数式の最初に置かれたときだけ、ことさら別解釈しなければならないのだろうという疑問が湧くのもまた分からなくはありません。

1Like

@entan05 さま
ご指摘ありがとうございます。仰られるとおりです。

 私の曖昧な記憶により、この言語の利用者に間違った変な情報を植え付けないように気を使いました。大変古い話なので、これを御存じなのは、だいぶご年配の方だけかもしれません。もし御存じでしたら、「ははん、あのことか!」と気づかれるのではないかと期待しておりました。

 ご回答が付くのを気長にお待ちしております。

0Like

逆ポーランドのlisp言語は引っ掛けで、

Delphi 11.2 Alexandria(pascal)

でしょうか?仕様はコロコロ変わるものでは? それに、メーカー拡張仕様はiso/jis規格範囲外です。(rubyのようにメタ言語定義など)また、バグでも仕様化する例もあります。python2の曜日関数の0~7の割り当てが windows と linux で異なっていたのですが、python3でもそのままでした。関数である点、pythonはiso/jis規格でない点から私は許容してます。
 因みに安定した言語仕様を求めてiso/jis規格言語を採用するケースもあります。f22戦闘機はAdaで,f35戦闘機はc++で実装されているようです。
 
 言語論争になりそうなので、美味しんぼからの引用です。
 海原雄山が鴨料理をわさび醤油で食べた際、山岡四郎は鴨料理は血のソースで食べるのが常識だと放ちます。海原雄山は懐石料理こそ優れており鴨料理と違い料理人の指定した方法以外の方法で食べると料理が台無しなると主張。後日、カツオの刺身にマヨネーズで食べて解決した話です。 
大変長くなりましたが、仕様はコロコロかわるのは、新しい味覚の獲得でもあり、新しい文化の容認かも知れません。暇人xより

0Like

Your answer might help someone💌