アカウント名:
パスワード:
Cこそ至高。マクロで言語を拡張してオブジェクト指向を取り入れるんだ
> マクロで言語を拡張してオブジェクト指向を取り入れるんだ
そりゃ、C++ だ!!!
って突っ込んで欲しいのかな?
X11のことでしょ
X11というか、X toolkit(Xt)のことですか?
X Window System の最も基本なライブラリがXlib。Xのプロトコルに直結した描画機能だけを提供するレベルのライブラリで、ボタンなどの部品機能はないからXlibだけを使ってGUIを作るのは非常に手間がかかる。で、X11が最初期から標準で提供している「Xlib を使った GUIコンポーネントライブラリ」が Xt。昔はXのアプリを書くならXtはほぼ必須でしたけど、今時GTK+もQtもXlibベースで作られてるので、そういう今時なX11アプリを作るぶんにはXtの出番はありません。
で、XtはC言語ベースでありながらもオブジェクト指向で作られてますが、データ(構造体)の取り扱いと関数体系がオブジェクト指向なだけです。言語仕様的にはC言語のままで特別なことは何もしてないので、Xtは「マクロで言語を拡張してオブジェクト指向を取り入れ」たものには該当しないでしょう。
オブジェクト指向に基づいてコーディングする(されている)環境があるのならオブジェクト指向を取り入れたと呼んで良いのでは?それいったらC++だってオブジェクト指向ガン無視してコーディングできますし。
コーディングする際の考え方・パラダイムがオブジェクト指向ならばそれはオブジェクト指向ですよ。オブジェクト指向言語では無い環境でオブジェクト指向してるんです。
いや、話がずれてます。Cこそ至高。マクロで言語を拡張してオブジェクト指向を取り入れるんだ [srad.jp]というコメントに対し、X11のことでしょ [srad.jp]ってコメントが付いてたから、Xtは純粋なC言語のライブラリであり「マクロで言語を拡張」なんかしてない、という突っ込みを入れたんです。
XtがC言語ベースでオブジェクト指向なライブラリであることに異存はありません。
言語の範囲内で提供されているマクロでは言語を拡張なんてそもそも不可能という話?
元コメントでは、Cのマクロでオブジェクト指向な言語拡張をしたらどうか、というネタが挙げられていますがXtはマクロで言語を拡張したものではないので、そのコメントに対する回答として不適切である、という話です。
マクロによる言語拡張ができるかどうか、実際にそれをやっちゃった実例があるかどうか、という点については何も言及していません。
マクロでCを別の言語に作り変えて、それを使ってC言語を解説してる本があったような。
至高となればDelphiと言わねばならん。今は知らんけど…
#本当は先代の…
私もそう思ったけれど、
> GUIのないヘッドレスアプリケーション
ってわざわざ釘を刺されているんですよね。それに、x86 Linux上での開発を望んでいるようだし。(Delphiでもコンソールアプリは作れるけれど)
それぞれの条件が妥当か否かは兎も角、消去法で C++ と Objective-C が残っような、この二つを残すために条件を並べたのじゃあるまいか。
麿も意図的に誘導してるような気がします。fpcはどうでしょう。
#とんとご無沙汰でしたが育っていますね
> Cこそ至高。
同感です。
GUI部分のプログラミングがいらないなら、オブジェクト指向はいらないと思います。
Linuxカーネルのソースでも読んでみるといいのでは?関数ポインタをガリガリ使ってオブジェクト指向を取り入れていますよ。
関数ポインタは関数ポインタであって、オブジェクト指向という言葉が流行る前から使われていた明瞭な機能だ。
別にオブジェクト指向なんて言葉を導入する必要はない。
関数ポインタを使うとオブジェクト指向なのですか?
構造体メンバに関数持たせるとソースコードがクラスオブジェクトを使っているっぽい見た目になる、と言うのは解りますが。
オブジェクト指向を低レベルで実現する方法の一つとして関数ポインタを使う方法があるという感じ。C++によるオブジェクト指向は関数ポインタによるオブジェクト指向で実現されるのが普通だしね。
それがオブジェクト指向であるかどうかは、書いた奴がどういうパラダイムに基づいていたかの問題。オブジェクト指向を意識していたのならオブジェクト指向だろうし、そうでないならそうではない。どっちだろうね?
意識してなくてもオブジェクト指向の概念を取り入れてたりはするでしょうね。構造体をソースファイルや内部で使うヘッダだけで宣言してカプセル化するとか。一度そういう概念を知ったらそれから外れることはあまりしない。
構造体のメンバーに関数ポインタを使うと、継承やポリモーフィズムを使ったoopが出来るよ。c++では普通にclass宣言すればいいので関数ポインタをこの用途に使うのは見たことないな
静的コンパイルする言語でオブジェクト指向の実現をする手段の一つが関数ポインタと考えるとしっくりくるのではないでしょうか。今でも実装系によっては使われている技法だと思いますが、かつてC++をCにトランスレートしてからコンパイルしていた時代は途中のCファイルを見るとvtblという形で関数ポインタの配列を持っていました。仮想関数なんかはこれの○○番目を使うという形で呼び出されるコードが出力される感じです。
構造体に関数ポインタを持たせると仮想関数を実現することができる。逆に言うと、オブジェクト指向でも仮想関数が必要ないなら、必ずしも構造体に関数ポインタを持たせる必要は無い。
それよりも構造体へのポインタを関数の第1引数として渡すようにしないと、どう頑張ってもオブジェクト指向にはならない。
# その辺ちゃんと理解していないらしいコードを見た経験アリ。
Linux上の開発を前提としているなら、Cの資産が多くあるので勉強するメリットはある。クロスプラットフォームという視点だと微妙かも。
C++だと、QtがGUI以外の部分でも、移植性のあるコードが書けるので悪くない選択肢だと思う。(本家でも同じコメントがある)
Objective-Cは、使ったことないから知らない。
半分同意マクロとか使わんでもある程度以上は言語よりも書き方の問題だと思う
OSを作るのならともかく、アプリケーションを作るのにC++よりもCが良いケースって、組み込みの一部ぐらいでは?
あんた同僚が書いた酷いC++のコードに苦しめられたことがないだろ
その同僚がCで書いていれば苦しまずに済んだか?その同僚にリソース管理や文字列処理をCで書かせて大丈夫なのか?クラスを使えない言語を人が読めるように書けるのか?
> その同僚がCで書いていれば苦しまずに済んだか?
苦しんだだろうが、おそらくよりマシだったろう
> その同僚にリソース管理や文字列処理をCで書かせて大丈夫なのか?
C++で書いたのに大丈夫ではなかった
> クラスを使えない言語を人が読めるように書けるのか?
クラスを使える言語でも人が読めるように書けなかったのだから、事情は変わらないともいえるが、「読めそうで読めない」から「読めなさそうで読めない」に改善が期待できるのと、少なくともフローはいくらか追いやすくなることは間違いないさそうだった
そんな貴方に Delphi はいかがですか?
同僚が書いた酷いCのコードにいつも苦しめられてますからまったく共感できない
CにはCの醜さがありまして、C++にはそのCの醜さに加えてC++で導入された醜さが加わります。ここからC++の方がはるかに醜いコードを書きやすいことはおわかりいただけるかと思います。
fcloseだのfreeだの逐一真面目に書く事を美しく感じるセンスは持ってないな。並のレベルに達してない技術者に渡す言語はCのがマシだからCを支持するなんて判定はどうかしてるよ。
つ GObject
Valaもいい。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり
Cがいいぞ (スコア:0)
Cこそ至高。
マクロで言語を拡張してオブジェクト指向を取り入れるんだ
Re:Cがいいぞ (スコア:2)
> マクロで言語を拡張してオブジェクト指向を取り入れるんだ
そりゃ、C++ だ!!!
って突っ込んで欲しいのかな?
Re: (スコア:0)
X11のことでしょ
Re:Cがいいぞ (スコア:1)
X11というか、X toolkit(Xt)のことですか?
X Window System の最も基本なライブラリがXlib。Xのプロトコルに直結した描画機能だけを提供するレベルのライブラリで、ボタンなどの部品機能はないからXlibだけを使ってGUIを作るのは非常に手間がかかる。で、X11が最初期から標準で提供している「Xlib を使った GUIコンポーネントライブラリ」が Xt。
昔はXのアプリを書くならXtはほぼ必須でしたけど、今時GTK+もQtもXlibベースで作られてるので、そういう今時なX11アプリを作るぶんにはXtの出番はありません。
で、XtはC言語ベースでありながらもオブジェクト指向で作られてますが、データ(構造体)の取り扱いと関数体系がオブジェクト指向なだけです。言語仕様的にはC言語のままで特別なことは何もしてないので、Xtは「マクロで言語を拡張してオブジェクト指向を取り入れ」たものには該当しないでしょう。
Re: (スコア:0)
オブジェクト指向に基づいてコーディングする(されている)環境があるのならオブジェクト指向を取り入れたと呼んで良いのでは?
それいったらC++だってオブジェクト指向ガン無視してコーディングできますし。
コーディングする際の考え方・パラダイムがオブジェクト指向ならばそれはオブジェクト指向ですよ。
オブジェクト指向言語では無い環境でオブジェクト指向してるんです。
Re:Cがいいぞ (スコア:1)
いや、話がずれてます。
Cこそ至高。マクロで言語を拡張してオブジェクト指向を取り入れるんだ [srad.jp]というコメントに対し、
X11のことでしょ [srad.jp]ってコメントが付いてたから、
Xtは純粋なC言語のライブラリであり「マクロで言語を拡張」なんかしてない、という突っ込みを入れたんです。
XtがC言語ベースでオブジェクト指向なライブラリであることに異存はありません。
Re: (スコア:0)
言語の範囲内で提供されているマクロでは言語を拡張なんてそもそも不可能という話?
Re:Cがいいぞ (スコア:1)
元コメントでは、Cのマクロでオブジェクト指向な言語拡張をしたらどうか、というネタが挙げられていますが
Xtはマクロで言語を拡張したものではないので、そのコメントに対する回答として不適切である、という話です。
マクロによる言語拡張ができるかどうか、
実際にそれをやっちゃった実例があるかどうか、
という点については何も言及していません。
Re: (スコア:0)
マクロでCを別の言語に作り変えて、それを使ってC言語を解説してる本があったような。
Re:Cがいいぞ (スコア:1)
至高となればDelphiと言わねばならん。
今は知らんけど…
#本当は先代の…
Re: (スコア:0)
私もそう思ったけれど、
> GUIのないヘッドレスアプリケーション
ってわざわざ釘を刺されているんですよね。それに、x86 Linux上での開発を望んでいるようだし。
(Delphiでもコンソールアプリは作れるけれど)
それぞれの条件が妥当か否かは兎も角、消去法で C++ と Objective-C が残っような、
この二つを残すために条件を並べたのじゃあるまいか。
Re:Cがいいぞ (スコア:1)
麿も意図的に誘導してるような気がします。
fpcはどうでしょう。
#とんとご無沙汰でしたが育っていますね
Re: (スコア:0)
> Cこそ至高。
同感です。
> マクロで言語を拡張してオブジェクト指向を取り入れるんだ
GUI部分のプログラミングがいらないなら、オブジェクト指向はいらないと思います。
Re: (スコア:0)
Linuxカーネルのソースでも読んでみるといいのでは?関数ポインタをガリガリ使ってオブジェクト指向を取り入れていますよ。
Re:Cがいいぞ (スコア:2)
Re:Cがいいぞ (スコア:2)
関数ポインタは関数ポインタであって、オブジェクト指向という言葉が
流行る前から使われていた明瞭な機能だ。
別にオブジェクト指向なんて言葉を導入する必要はない。
Re: (スコア:0)
関数ポインタを使うとオブジェクト指向なのですか?
構造体メンバに関数持たせるとソースコードがクラスオブジェクトを
使っているっぽい見た目になる、と言うのは解りますが。
Re: (スコア:0)
オブジェクト指向を低レベルで実現する方法の一つとして関数ポインタを使う方法があるという感じ。
C++によるオブジェクト指向は関数ポインタによるオブジェクト指向で実現されるのが普通だしね。
それがオブジェクト指向であるかどうかは、書いた奴がどういうパラダイムに基づいていたかの問題。
オブジェクト指向を意識していたのならオブジェクト指向だろうし、そうでないならそうではない。どっちだろうね?
Re: (スコア:0)
意識してなくてもオブジェクト指向の概念を取り入れてたりはするでしょうね。
構造体をソースファイルや内部で使うヘッダだけで宣言してカプセル化するとか。一度そういう概念を知ったらそれから外れることはあまりしない。
Re: (スコア:0)
構造体のメンバーに関数ポインタを使うと、
継承やポリモーフィズムを使ったoopが出来るよ。
c++では普通にclass宣言すればいいので
関数ポインタをこの用途に使うのは見たことないな
Re: (スコア:0)
静的コンパイルする言語でオブジェクト指向の実現をする手段の一つが関数ポインタと考えるとしっくりくるのではないでしょうか。
今でも実装系によっては使われている技法だと思いますが、かつてC++をCにトランスレートしてからコンパイルしていた時代は途中のCファイルを見るとvtblという形で関数ポインタの配列を持っていました。仮想関数なんかはこれの○○番目を使うという形で呼び出されるコードが出力される感じです。
Re: (スコア:0)
構造体に関数ポインタを持たせると仮想関数を実現することができる。
逆に言うと、オブジェクト指向でも仮想関数が必要ないなら、
必ずしも構造体に関数ポインタを持たせる必要は無い。
それよりも構造体へのポインタを関数の第1引数として渡すようにしないと、
どう頑張ってもオブジェクト指向にはならない。
# その辺ちゃんと理解していないらしいコードを見た経験アリ。
Re: (スコア:0)
Linux上の開発を前提としているなら、Cの資産が多くあるので勉強するメリットはある。クロスプラットフォームという視点だと微妙かも。
C++だと、QtがGUI以外の部分でも、移植性のあるコードが書けるので悪くない選択肢だと思う。(本家でも同じコメントがある)
Objective-Cは、使ったことないから知らない。
Re: (スコア:0)
半分同意
マクロとか使わんでもある程度以上は言語よりも書き方の問題だと思う
Re: (スコア:0)
OSを作るのならともかく、アプリケーションを作るのにC++よりもCが良いケースって、組み込みの一部ぐらいでは?
Re: (スコア:0)
あんた同僚が書いた酷いC++のコードに苦しめられたことがないだろ
Re: (スコア:0)
その同僚がCで書いていれば苦しまずに済んだか?
その同僚にリソース管理や文字列処理をCで書かせて大丈夫なのか?クラスを使えない言語を人が読めるように書けるのか?
Re: (スコア:0)
> その同僚がCで書いていれば苦しまずに済んだか?
苦しんだだろうが、おそらくよりマシだったろう
> その同僚にリソース管理や文字列処理をCで書かせて大丈夫なのか?
C++で書いたのに大丈夫ではなかった
> クラスを使えない言語を人が読めるように書けるのか?
クラスを使える言語でも人が読めるように書けなかったのだから、事情は変わらないともいえるが、
「読めそうで読めない」から「読めなさそうで読めない」に改善が期待できるのと、少なくともフローはいくらか追いやすくなることは間違いないさそうだった
Re: (スコア:0)
そんな貴方に Delphi はいかがですか?
Re: (スコア:0)
同僚が書いた酷いCのコードにいつも苦しめられてますからまったく共感できない
Re: (スコア:0)
CにはCの醜さがありまして、C++にはそのCの醜さに加えてC++で導入された醜さが加わります。
ここからC++の方がはるかに醜いコードを書きやすいことはおわかりいただけるかと思います。
Re: (スコア:0)
fcloseだのfreeだの逐一真面目に書く事を美しく感じるセンスは持ってないな。
並のレベルに達してない技術者に渡す言語はCのがマシだからCを支持するなんて判定はどうかしてるよ。
Re: (スコア:0)
つ GObject
Re: (スコア:0)
Valaもいい。