0

CとC++って低水準言語なの?

最終更新日 投稿日 2023年08月03日

はじめに追記

まず投稿後に私の言葉の拙さのせいでも勘違いをされそうだなと感じ追記としてはじめに言っておきます。
以下のケンブリッジ大学の記事によるとタイトルからCとC++は低水準言語ではないことが言われていますが、コンピュータ科学者のAlan Perlisの低水準の定義"A programming language is low level when its programs require attention to the irrelevant"に当てはまることが言及されており、Cの低水準言語的機能について紹介しています。そのために混乱する人もいるのかも知れません。
この記事は私自身はCやC++を高水準言語として理解していたため、CやC++を低水準言語として扱っている人が思った以上におりびっくりしたので書かせていただきました。

あと記事を付け加えたりして思ったのが高水準言語と低水準言語の違いやなぜCやC++は高水準なのかについて説明してなかったのですが、そこは他の方の記事であったりWikipediaなどを参考にしてもらえると助かります。

え、CとC++って低水準言語なの?

最近、海外のエンジニアからの投稿が目に入り気になりました。彼は「プログラミングを学び始める際には、低水準言語とされるCやC++よりも、Pythonのような言語から学んだ方が良い」と提案していました。

コメント欄には、「CやC++は高水準言語である」と主張する声とC、C++が低水準言語であるのを当たり前のように賛同するコメントも見受けられました。私が初めてプログラミング言語を学んだのはC言語で、それは8年くらい前のことです。当時、C言語はもちろんのように高水準言語として学び、アセンブリ言語や機械語は低水準言語として学びました。C言語から学んだ私は、メモリや構造体の概念に苦しみ、PythonやJavaScriptに触れるまで「プログラミングは自分には向いていない」と感じ、一時は諦めようとも思ったことがあります。だからこそ、Pythonのような言語から学び始めるという提案には異論を挟みませんが、C言語やC++を低水準言語として扱うことには違和感があります。

ということで調査を行ってみました。

その結果、非公式的に低水準言語と高水準言語の定義は、人やその状況により変化することが分かり、低水準と考える人が増えてきたのだとわかりました(ちょっとなんだそれって感じで、僕自身も納得していないのですが笑)

これから紹介する記事はCやC++が低水準であることを証明するものではないのですが、使われていた例であったり、議論されていた例であったりといくつかピックアップさせていただきました。

以下のリンク先であるstackexchange.comの記事'Is C programming language low level or high level?'では、
回答者はC言語は全体的な文脈による。PHPなどと比較すると低水準であり、しかしアセンブリと比べると高水準であるとの意見が見受けられます。また、この記事は7年以上前のものであり、C言語が低水準と認識され始めたのは最近の話ではないようです。

以下のjavatpoint.comのリンクでは、

  • 'The C and C++ programming languages come under the category of middle-level languages. Low-level languages provide little or no abstraction of programming concepts, whereas C and C++ programming languages provide the least degree of abstraction to performance and efficiency for the least amount of money.'

CやC++は抽象化の概念を提供しており、そのため低水準とは言い難いとのような記載をしていると同時に、中水準言語として考えられるとの言及もあります。

さらに、ノルウェーのオスロ大学の情報学部が発表した論文(下はリンク先)では、マイクロコントローラなどのデバイスでの低水準言語と高水準言語について議論しています。その中で、

  • 'Microcontrollers with little available resources, such as program memory, RAM and speed, are in most cases programmed in low level languages such as Assembly, C and C++, these languages can be hard to learn for new programmers and therefore hold them away from microcontroller programming.' (Jan Ole Skotterud, 2012)

と、C言語とC++が低水準言語として扱われています。また、知人の投稿のお題のようにプログラミング初学者にとってC言語やC++を学ぶのは難しいとの意見も述べられています。(しかもこれ2012年と10年以上前の記事なのね笑)

CやC++は確かに低水準としての機能も持ち合わせて入るのですが、高水準としての機能を持っているため低水準とは言い難いです。(しかし、両方の特徴を持つため中水準として扱うのはいいかも?)
ただ、プログラミング言語の「水準」はある意味相対的なとこをもあり、それは学び手の経験や状況、使用するハードウェアなどによって変化することを理解することももしかしたら重要かもしれません。

また、知人の投稿に戻ると結局のところプログラミング学習の初期段階にどの言語を選択するかは、学び手自身の目標や興味、そして学習リソースに大きく依存するのではないでしょうか?

というわけで、知人の投稿内容そのものにはあまり関係ないのですが、私のプログラミング学習における固定概念みたいなところがまたひとつ崩され改めて水準とは何かについて学んだ機会ではある知人の投稿でした。
ついでにPythonなどの言語から学ぶことに対して反対ではないのですが、私個人ははじめにC言語から触ったことで得たメモリ等に関する発見や、エンジニア人生を送るにあたりどんな難しいものにも挑戦するといった基盤を築くことができたと思っているのでCから始めて逆に良かったとも感じます。

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について
takeyoshinitta
@takeyoshinitta(新田 剛良)
海外でCSの学士を取得し、その間にWeb系エンジニアとしての経験を経て、現在は帰国し外資系IT企業でITコンサルおよび技術営業として活動しています。でもやっぱりプログラミングもしっかりしたくなってしまい副業でフリーのソフトウェアエンジニアもしてます。
この記事は以下の記事からリンクされています

コメント

(編集済み)

その結果、低水準言語と高水準言語の定義は、人やその状況により変化することが分かりました。(ちょっとなんだそれって感じですが笑)

そんなことありません。
プログラミング言語を高水準言語と低水準言語に分類するなら、今も昔も低水準言語は事実上アセンブリ言語・機械語のみであり、その他の言語は全て高水準言語であるというのが一般的な理解だと思います。

探せば「C言語は低水準言語である」という意見がいくらかは見つかるかもしれませんが、それは少数派の意見であり、その数百・数千倍の記事や文献が存在するはずです。

2
(編集済み)

@error_401
コメントありがとうございます。私もそのように思っていましたし今でもヒトが理解しやすい言語だからやっぱり高級言語だよなと思っているところもあります。しかし、低水準言語の定義そのものが年々変わってきているというのもあるのではないでしょうか?今回は3つだけピックアップしたのですが、調べるとCは低水準言語である(となろうとしている)という英文記事が以前と比べ増えてきているように思います。もちろん高水準言語であるというのが一般的でその記事は数百倍、数千倍かもしれないですが、このような動きからこれからどうなってくるかわからないというのが正直なところではないでしょうか?

そのような観点でも興味深いなと思いながら私の記事を楽しんでくださると幸いです。

追記:
以下の記事は今年のものですが、昔はC言語は高水準だが現在は低水準として考慮され得ることと、低水準の定義がかなり変化してきたことを言及しております。では現在の高水準と低水準の違いはってところまで記しておりますので読んでみると面白いかもしれません。(ついでにこの記事はCは中水準言語として扱っております。)
https://www.coursereport.com/blog/a-guide-to-low-level-programming-for-beginners#:~:text=C%20and%20C%2B%2B%20are%20now,the%20inception%20of%20computer%20science.

0

高級言語と低級言語の違いについてよくわかってない人が増えたとしてC言語が低級言語になるわけはありません。多数決か何かと勘違いされてないですか?

0

このような動きからこれからどうなってくるかわからないというのが正直なところではないでしょうか?

うーん、そうでしょうか・・・。

もちろん、以前からC言語は低水準言語だと見なしている人たちがいることは承知していますし、高・中・低水準言語に分類するとすれば中水準に分類する意見が多いことは承知してます。

以下の記事

これ以上この件について突っ込んだ調査をするつもりはないんですが、(人をそれで判断するのはどうかとも思いますが)その記事のお二人りともCSを専攻していないようなので、ちょっと信頼度は個人的には低くなります・・・。

0
(編集済み)

@fujitanozomu
他の方の意見も聞けて嬉しいです。
間接的な話で言うと多数決の可能性も大いにあると思います。
ただ、開発に使われる言語が増えてきていることからそこに新たな定義を加え、過去に高級言語であったことと水準の本来の定義を理解したことを踏まえた上でC言語が低級になりつつあるという記事も多数みます。私もCやC++は高級言語だと思っているのですが、このような現実があると頭を硬くしてもいられないのかなと言った印象です。

0

新たな概念であれば別の用語を創るなりして割り当てるべきであり、従来からある用語の意味を捻じ曲げることに正当性はないと思います。
誤りに迎合する意味もないですね。

0
(編集済み)

@error_401
もしかしたらそういったCSを学んでいない方々の声が大きいので世間的にそっちに合わせている傾向があるのかもしれないですね…
(嫌味では全くないのですが、経験上ビジネス系出身でテクノロジーについて関わる人って声が大きかったり競争心とかが強かったりする印象があるので…特にアメリカは…不快に思った人には申し訳ないですが)

0
(編集済み)

@fujitanozomu
自分の持っている意見を変えてまで迎合する必要性は全くないです。ただ、特に英語圏ではそのように言われてきているのも受け入れ難いことかも知れないですが事実なので、そこに対してうまく説明できたり、なぜ彼らはそのように考えるのかを理解できたらさらに良いなと今さらながら思いました。

ついでに今見つけた記事である計算機協会(ACM)が5年前に提供したケンブリッジ大学の論文ではCは低水準ではないことが言及されていますが、同時に初代チューリング賞受賞者でありコンピュタサイエンスのパイオニアと呼ばれるAlan Perlisの低水準言語の定義"A programming language is low level when its programs require attention to the irrelevant"からするとC言語はそれにも当てはまることが記載されておりそれもあって混乱を招く人もいるようです。

後に記事に付け加えておきます。

0

なぜ彼らはそのように考えるのかを理解できたら

この話題は(ひょっとすると前世紀から)死ぬほど繰り返されてきた話であり、それをみてきた人は、なぜそういうことになるのか理解してると思います。

およそ、以下のどちらかです。

  • プログラミング言語の「水準」の定義を知らない人が、C言語が高水準言語と聞いて混乱する、あるいは納得がいかない
  • 定義は知っているが、他の言語と比較する文脈では、C言語は「低水準寄り」だと理解している
0
(編集済み)

計算機科学の研究者や本当のエンジニアからみた絶対基準はそれほど変わっていないと思います. 基準は, 機械語と一対一(ラベルやマクロは除く)かだと思います. Python, PHP, Javaなどと比較すれば誰でも低水準だと言うと思います.
ノルウェーのオスロ大学の情報学部が発表した論文, thesisで判断されても困るのですが, これも従来マイクロコントローラで使われてきた言語より高水準な言語を論じていますよね?
ACMの論文, これはなんだろarticleかな, についても, PDP-11のエミュレータを論じているのであって絶対的にC言語が低水準かについて論じているわけではないですよね? PDP-11に対する初期のC言語はほぼ機械語と一対一だから低水準言語だよね, 程度にしか書かれていないように読めました.

比較を持ち出してC/C++を低水準言語と定義したがるのは, 習得が難しい印象を与えた方が, ITコンサルタント, 技術営業, 人材派遣にとっては都合がいいから, 全体がそういう風に見えている(見たい)だけではないでしょうか?

0
(編集済み)

@taqu
意見ありがとうございます。
その二つの論文に関してですが、C言語についてそのような紹介をされていると言う意味で紹介をさせていただきました。私としてもその論文全体がCの水準を判断するためのものとして紹介されていないことは理解していたつもりですが、言葉足らずでそのような印象を与えてしまい申し訳ございません。

ノルウェーのオスロ大学の情報学部が発表した論文, thesisで判断されても困るのですが, これも従来マイクロコントローラで使われてきた言語より高水準な言語を論じていますよね?

オスロ大学についてですが、9ページに確かにアセンブリと比べて高水準言語と言及しておりますが、ここでは"C can be seen as a high level language compared to assembly"というフレーズが使われており、高水準言語としてみなすことができると高水準言語であることを強く宣言しておらず、Javaと比べて低水準との記載もあるのでそれに対し違和感を覚えているところがあり紹介させていただきました。ですので、ここに関してオスロ大学の論文はCが高水準であることははっきりと明言されておりません。ただ、おっしゃる通りこれは言語の水準について結論づけている論文ではないのでそこで判断するのは間違っているのかも知れません。Cが低級としてみなされている例の一つとして興味深いと思い紹介させていただきました。

ACMの論文, これはなんだろarticleかな, についても, PDP-11のエミュレータを論じているのであって絶対的にC言語が低水準かについて論じているわけではないですよね?

最終的にはPDP-11のエミュレータを論じておりそれが主題となっているのですが、タイトルから前半にかけて低水準言語の特徴とそれを踏まえた上でのPDP-11のエミュレータについて話しているのでCの水準そのものの断定はしていないのですが、Cの低水準的機能についての話をしているので参考資料としては十分だと判断しました。また、私の言葉足らずで非常に申し訳ないのですが、この記事に関しては私はCが低水準言語として紹介されているとの紹介をしたつもりではなく、混乱を招く理由の一つとして紹介したつもりでしたのでご理解いただけると幸いです。

比較を持ち出してC/C++を低水準言語と定義したがるのは, 習得が難しい印象を与えた方が, ITコンサルタント, 技術営業, 人材派遣にとっては都合がいいから, 全体がそういう風に見えている(見たい)だけではないでしょうか?

私も皆さんの意見や他の記事を見るとそのように感じますが、それにしてもCが低水準言語であると思っている人の数が圧倒的に多くそのような記事が当たり前のようにあるので驚いたところです。日本語の記事ではそのようなものは少ない(というよりも見つけることができませんでした)のでそこも不思議に感じておりました。

0
(編集済み)

@error_401

プログラミング言語の「水準」の定義を知らない人が、C言語が高水準言語と聞いて混乱する、あるいは納得がいかない
定義は知っているが、他の言語と比較する文脈では、C言語は「低水準寄り」だと理解している

それはもちろんそうだと思うのですが、だとしてもCを当たり前のように低級言語と思っている人や意見を変えて思い始めた人が想像以上に多いなという印象を持ち驚きました。そう言った意味でもこれから変化していったり、わかりやすい方向へと持っていくムーブメントが増えエンジニアとしてのあり方も結果として変わったりするのかなと思っていた次第です。

0
(編集済み)

プログラミング言語の水準について論じていない論文を, 単語や文節だけ抜き出して自分の論説の補強とするのはおかしくないですか?
ほとんどのプログラミング言語と比較すればC言語は低水準ですし, 初学者も含めて誰もがそのレベルで議論しているだけなのではないですか?

0
(編集済み)

@taqu
それは申し訳ございませんでした。
私としてはこのムーブメントが拡大されCが段々と当たり前のように低水準として扱われていることついて例をいくつか紹介し将来的にどうなるのかを含め議論をしたいと思って投稿したつもりでCが低水準か高水準についてしっかりと議論したかったわけではないのですが、このような投稿は初めてでしたので、うまく伝えることができなかったのだと反省しております。
これ以上の誤解を生んでしまうのは申し訳ないのですが、急に投稿を削除してしまうのもこれまでコメントされた方に失礼だと思いますので、しばらく時間をおいてから本日中に投稿は削除させていただきます。

0
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
記事投稿キャンペーン開催中
100万人に伝えたい!失敗を乗り超えた話を共有しよう
~
100万人に届けたい!私のお気に入りガジェット
~
0