「ねえ●●君、#C言語完全に理解した?」 「はぁっ?」

SNSやネットでは「#C言語完全に理解した」といったタグや「コンピュータの天才 9つのC言語を操る」というものが流行っていた時期がありました。とある映画に出てきた「nine conputer languages」部分の誤訳に過ぎないのですが・・・でもそういえば、C系言語とか、あるいはCから始まる言語って、考えてみたら、IT系有史以来、結構あったような気がしませんか? ベテランではなく古いだけの僕が、ちょっと思い出してみました。







SNSやネットでは「コンピュータの天才 9つのC言語を操る」というものが流行っていた時期がありました。

とある映画に出てきた「nine conputer languages」部分の誤訳に過ぎないのですが・・・。

でもそういえば、C系言語とか、あるいはCから始まる言語って、考えてみたら、IT系有史以来、結構あったような気がしませんか? 





【Cの成立】





海外では「C(しー)」と呼ばれているプログラミングを学ぶならだれでも普通知ってる言語。 IT系試験を受ける時にも、だれでもがさわりくらいなら学んでいるのが「C言語」。

それ以前に主流だったのはUnix。

ここで、アセンブリ言語やALGOL、BCPL、B言語、pascalなどに影響を受け、1972年AT&Tベル研究所のデニス・リッチーらにより開発されたプログラミング言語がこのCです。

もともと
  • 古い言語の中では関数型部分などについては比較的学びやすいほう。だが、比較的文法や表現部分では自由度も高い一方で、管理すべき項目が多
  • ポインタ演算やシフト演算、ビット単位の論理演算など、アセンブラ的なことも可能なので、現在も家電製品などのドライバやOS用によく用いられている(とはいえ、使用するハードリソースは、アセンブラよりは多い)
  • 実行速度とコンパイル速度がそれなりに確保されている
  • C言語そのものの機能もC言語で書かれたライブラリを用いるほど機種依存性が低い。そのため移植性も非常に高い
  • コンパイル後のコードは、安全性が多少弱い

といった特徴を持っています。

その後、1980年代のパーソナルコンピューター黎明期には、会話口語体のような表記の平易さながら、実行には制約も多いBASICが先行。

この前後には、業務や情報処理研究で数多く採用されたC。そして1990年代から徐々に進んだゲーム機材の爆発的普及と、その制作時のマルチプラットフォーム化などにより、開発言語もCに数多く移転。

そんな当時にCから生まれて普及していたのが、
  • Java
  • Objective-C
  • C++
  • C#
これらの言語はCそのものと比較して、非常に覚えやすく使いやすく、現場からこれらを介して広く普及。

1990年代のパーソナルコンピューターブームで主流となっていたOSなどとの関係で、こうした言語のもととにもなっているC言語は、手に取りやすい存在となりました。



【C言語規格とは】







その使いやすさからC系後発言語とよばれるさまざまな言語を使い始めた人も増えました。が、やはり各部分で自分たちの分野や、作業に特化して、より使いやすいC系言語を開発する人たちも増えました。

ですがこれらも、自由に作れるわけではありません。

初期には、1978年出版の「The C Programming Language」が実質的なC言語の標準規格として数多くの人に参照されてきました。

ですがこの書籍自体は、言語の規定部分がこまかく詰められたものではないため、互換性のないC言語系が多数発生し、あとから規定部分を規格のように追い付かせる必要がでてきました。

規格が生まれた時点で、国際的に認められ成功が約束されたなんて言われます。Cの場合、その時代性もあり、あとからCを分析して規格化させてきたんですね。(##かっこいいじゃん、C)


すでに普及を見せていた1989年にISO/IEC JTC1とANSIがC言語の規格標準化を共同で行い、「ISO/IEC 9899 : 1990(E)」として発行。後に「C89 (ANSI C89)」 と「ISO/IEC C90」を追加。【これらはC89/C90と呼ぶ】

日本では、「JIS X3010-1993 プログラム言語C」として発行。


1999年にはISO/IEC JTC1 SC22 WG14 で広がりを見せていたC++を中心に機能拡張したISO/IEC 9899:1999(E)。日本では、日本工業規格 JIS X 3010:2003。【これらはC99と呼ぶ】


現在は2011年改定のISO/IEC 9899:2011【これらはC11と呼ぶ】。


【C系ってどんなのがあったっけ?】





リンクは、1985年6月21日リリース 中山美穂デビューシングル「C(シー)」(キングレコード) 。
お顔立ち、、白い歯が印象的https://youtu.be/SBWKI7GztvE




さて、そんなC。

いろいろな言語が「C系」「Cやったことあるならとっつきやすいよ」「組み込みやすいし」などとしてたくさん世に出ています。そこで、簡単なご紹介+列挙しておきます。


【1:C++】

C言語のスーパーセットだったC言語拡張をもとにオブジェクト指向化した言語。今は非互換仕様が増えていて、「C系っていうのに全然違うものじゃないか」とよく叫ばれているあれです。

もう今は、このC+++の下に、様々な別の方言が。利用者が多い上、処理系も大手中心にたくさんあるんですよね、 C++ Builder、Microsoft Visual C++、Intel C++ Compiler・・・

https://isocpp.org/



【2:Objective-C】


こちらも同じくC言語拡張でSmalltalk型のオブジェクト指向機能を持たせている上位互換言語。Cとの互換性はあり、さらにC言語拡張がC++と干渉しないため、C++とコード内共生可。

MacOSパッケージ版にDVDで開発環境が標準でくっついて、macOSやiOSの開発に多く使われてます。

メソッドとか定義あたりの呼び出し方がすごく変わってるので、全体コードを見る限りは「Cに似てるか?」的

apple



【3:C#】


MS(Microsoft)がつくったC言語やC++に似た感じなんだけど、できることはちょっと難しくDelphi(いるか)やJAVA(コーヒー)なんかに似ている、.NET Framework向けの言語。
visualstudio.com



【4:SystemC】

書式がC++のハードウェア拡張された言語で、IEEE 1666-2005。ISO 8866:1991の、それ。



【5:Cg】

GPUでの3次元CG用に特化させたC言語。最近、ここしばらくの技術開発内容でちょっと話題が続くNVIDIAが2012年までに開発した古いもの。
nvidia.com/cg-toolkit



【6:Cyclone】

C言語のポインタ実装部分を変えることで、上位互換セキュア実装させたりしたもの。
cyclone公式



【7:Impulse C】

書き方はほぼCそのもので、ハードウェア記述用に拡張されたもの。
impulsec公式



【8:Unified Parallel C】

規格のC99を拡張して、並列計算向けに特化した言語。名前そのままです。
Berkeley UPC





・・・ま・・・マズい。C系言語でCの入ってるもの、9個ないですね。



C言語をスタートとしたもの以外から、頭文字にCを持つ言語もいれるともうちょっと増えるかも!





◆Cから始まる、その他の言語のいろいろ◆





【COBOL】




米国防省 で事務用としてまとめ開発されたためか、英語文字などの表記が広く自然にとれることが好評だった言語。

そして、企業の基幹システムから、のち、汎用COBOL、OPENCOBOLなどいろいろ日本国内でも拡大。1960年代からですから、すでに半世紀たちましたね。まだ移植問題とかで需要大な言語でもあります。

大手は今でも、育成系コースの中にCOBOL入れてるところも。でも、新興系IT企業らによると、完全レガシイ技術らしいです。



【CASL】


高専や専門学校で学んでる人ならなじみが高いらしいCASL(きゃする/かする)。情報処理技術者試験のプログラミングのために使用が決定されたアセンブリ言語。ゆえに1:1対応の機械言語の基礎です。

https://www.jitec.ipa.go.jp/1_20casl2/casl2dl_001.html



【Crystal】




Ruby風の文法で、C言語バインディングの「型推論による変数・メソッドの静的型付け」に特徴のある言語。

現在言語仕様と、標準ライブラリ修正が行われているところらしいです。

http://ja.crystal-lang.org/



【CoffeeScript】


JavaScriptに比べて短く簡単に書けて、かつNode.js などを用いることでJavaScriptのコードに変換されるプログラミング言語。

http://coffeescript.org/



【Clojure】


洗練されたマクロを持つことで有名で、Java仮想マシンとMicrosoft .NETランタイムで動作する「LISPの方言の1つ」がこのClojure。対話型評価環境(REPL)なんかもあるので、アジャイル系プロジェクトや完全破壊スパイラル系が「必然多くなってしまうクライアント対策」に向いてますね。

新たにプロダクトに導入する方や、生産性が上がるといわれる方が多数。個人的には、「担当者の心と体の傷が少なくできそう」な点がおすすめ!

https://clojure.org/



【Common Lisp】




LISPの標準の一つでもあり、また方言の一つ。動的型付けが多いマルチパラダイムプログラミング言語で、ちょっと古さを感じる方もいるかもしれません。

前述のClojureや有名どころのDylan、SKILLなどに影響を与えた、1984、1994年にもANSI標準化された言語です。

https://common-lisp.net/



【C shell(csh)】




Unixのコマンドラインインタプリタのcsh。1970年代に登場。

実は、もともと「C言語に似せたスタイルで使え、対話型利用ができるように」を目標としたスクリプト言語。



https://common-lisp.net/





他にも、
【Curry】:函数論理プログラミング言語

【Coq】:INRIA (フランス国立情報学自動制御研究所) が開発する、定理証明支援系プログラミング言語

【Curl】:マークアップ言語とスクリプティング、重量機能が同じフレームワークに統合された、オブジェクト指向型言語。http://www.curlap.com/

【Clean】:Haskellににた純粋関数型言語で、ファイルの破壊的更新などができるもの。https://clean.cs.ru.nl/Clean

などなどがあります。



【#C言語、完全に理解した?】



さて、Cでくくれる(?)かもしれない言語について簡単にご紹介してきました。土日を利用すれば、簡単なところからすぐに9個言語達成できそう!



現在流行のテキスト系デザインファッションにもみられる「C完全に理解した」。
https://shapoco.booth.pm/items/749726 こうしたサイトで販売されている
2018年現在、ネットで「C++(あるいはC言語系など)完全に理解した(I COMPLETELY UNDERSTOOD C++)」といえば、それは別のことを指します。


ロックせず離席 → 帰ってきてキー操作 → 「あーーーっ!」











現在完成度がどんどん上がり適用範囲も広がる各種のAiによる自動コード生成実行。

1990年代にひろく海外で行われていたものからさらに高度になって、2010年代のAi自動系ブームになっています。

自動生成コード暴走などが当時も話題になっていましたが、暴走以前にこの「ロックせず離席」くらいで、僕らはけっこう挫折するものです。


最近の高度化以前に、数十年もたち「ロックせず離席」対応があまりなされてないことに、時代のニーズの読み方のいろいろを感じてしまいます。


C系言語人材は引く手あまた。

そんなこともあり学校や職場の若手技術者研修などでは「C系を究めておけば最強、就職転職でも説得力あるよ」なんていうことがよく言われます。

が、ベテランだれにとっても、おそらく年に幾度かはあるだろう、この「#C言語側にぼくらが完全に理解させられる現象」のほうが、C言語の最強性と、C言語が我々にごり押しする説得力をとくに強く感じさせる部分かもしれません。





間違いなく、降臨してますね。離席中に。

Additional Images




Comments

Loading…

We use cookies and other technologies to improve your experience on our website and to analyze our traffic. By browsing our website, you consent to our use of cookies and other tracking technologies.

Accept cookies and close this message