1 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:13:54 ] これからプログラミングを始める初心者の人に言語を薦めるスッドレ 質問者の方へ どのプログラミング言語を最初に覚えるべきかは なぜプログラミングを始めたいのか、何を作りたいのかによってまったく変わってきます。 なんとなく、でもかまわないので動機、用途、使っているOSを明記しましょう。 各言語の特徴はこちらを参照 Wikipedia Category:プログラミング言語 ja.wikipedia.org/wiki/Category:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E Part7 pc11.2ch.net/test/read.cgi/tech/1200807067/ Part6 pc11.2ch.net/test/read.cgi/tech/1193132235/ Part5 pc11.2ch.net/test/read.cgi/tech/1187886538/ Part4 pc11.2ch.net/test/read.cgi/tech/1177285633/ Part3 pc11.2ch.net/test/read.cgi/tech/1152778344/ Part2 pc8.2ch.net/test/read.cgi/tech/1122205164/ Part1 pc8.2ch.net/test/read.cgi/tech/1034505166/
231 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:14:40 ] 自演にしか見えないモレは心が病んでるのか・・・ Perlが書き捨て用に適していて、その用途の場合はわかりやすいように 関数とか作らなくてもいいんじゃね、ってのには賛成するが。
232 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:15:38 ] 数分置きに、だらだらとチラシの裏を書くやつ、どっかの掲示板でも見たおぼえあるぞ。
233 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:34:30 ] コテつけてる時点で病気なのでスルー推奨
234 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:40:36 ] サイタマンは昔から自作自演ばっかりだったよ、 株板で相手にされないからこっちに流れてきたんじゃないの
235 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:41:56 ] スルーできてない人がスルー推奨してもね。 ボクはキミを無視しちゃいますよ〜というのを、無視できずにアピールしちゃうことほど 「負け」属性の強いレスは無いな。
236 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:43:08 ] さっさと市況板にもどったら? もう市場開いてるでしょ
237 名前:235 mailto:sage [2008/04/23(水) 09:43:45 ] は?俺コーディングテクニック最強なんですが? >>236 は負け宣言だと思って言いよね? バカジャネーノw
238 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 09:44:51 ] まあまあ、有益な情報交換しましょう。 自作自演はしてませんよ。
239 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:46:33 ] >>238 俺がレスしてるのを自演とか言ってる奴がいるんだが 別人なんだけどなあ、 ニュース速報でサイタマンが出たてのころと比べたら 本当に強化されてて感心したんだが。 2chブラウザ作るっての公言して本当に作ったしさ。すげーと思うわ。 というわけでサイタマン、さっさとソース出せ
240 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:51:39 ] そ ら ま た 自 演 だ
241 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:54:57 ] >>223 初心者用のスレだから、質問します。 普段からルーチンを一機能につき一つ設ける、のルーチンの意味がわかりません。
242 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 10:08:28 ] >>239 あれから音声読み出し機能を付けたのですが、 視覚障害者の為の2chブラウザにして配布しようかな〜と思ってます。 今のブラウザは株のトレードとセットになっているので、 2chブラウザだけを取り出しての配布になると思います。 いろいろやる事があって、今すぐには配布できませんが、 配布するので、待ってくださいね。 >>241 サブルーチンです。 perlで書くと my $d=&call(1,2); print $d;#結果は3 sub call{ my($a,$b)=@_; my $c=$a+$b; return $c; }
243 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 10:20:13 ] 上の単純な計算までサブルーチンで行うのは 無駄だと思います。 my $c=1+2; print $c; で済むのですから。 こっちのほうが普通の人には分かりやすいと思います。 数多く、同じ関数を呼び出すのであれば、 関数化すればいいと思います。 それは、個人個人の判断になると思います。 一つ言えるのは、あまりに関数を作りすぎると、コーディングが面倒な事、スピードが遅くなる事、 この関数はどこにあるのか、何をしているのか訳が分からなくなる事です。管理上、不便だと思います。
244 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 10:33:09 ] 再利用できると感じたら関数化、程度でいいと思う。
245 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 11:10:28 ] >>244 そうだね。 一応、上に書いた呼び出し方は古いから oopでの呼び出し方も書いておきます。 use Test; my $obj = Test->new(); my $d=$obj->call(1,2); print $d;#結果は3 package Test; sub new { my $pkg = shift; bless {},$pkg; } sub call{ my $self = shift; my($a,$b)=@_; my $c=$a+$b; return $c; } 1;
246 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:24:13 ] test(A,B) :- test(A,B,C),write(C). test(A,B,C) :- C is A+B. 非オブジェクト指向言語ですが、これで済むんだけどなぁ。
247 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 12:52:59 ] これは Prolog ですが、BASIC だって似たようなものでしょう。 >>245 があまりに厚化粧で、サイタマンさんが上の方で書いていた ご自分の好みとは随分と離れたコードを書くことも多いのだろうな と思ったから、敢えてシンプルなものを載せました。そこで質問 なのですが、Perl の使い手にとって、オブジェクト指向とはどう いう位置付けのものなのですか。
248 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 13:01:24 ] >>218 Pythonだと if a == b: print '1' print '2' Perlだと if($a == $b){ print '1'; } print '2'; この例じゃ、解りやすさに差があるようには思えん。 {}言語が好きか、 言語が好きか、好みの問題に過ぎないと思う。
249 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 13:15:13 ] perlってa,bって予約語だったっけ
250 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 17:57:38 ] >>247 OOPする時は、サブルーチンが重複するかもしれない、 大量のコードを利用する場合に使います。 変数の競合を防ぐには局所変数で対応できますが、 関数の競合を防ぐにはOOPでなければ出来ませんから。 サブルーチン競合を心配するようなプログラムになると、 自然と使うようになります。 >>248 perlの場合はコンパイルエラーを吐いてくれますが、 pythonの場合はインデントミスが生じた場合、 エラーを吐いてくれないので、どこでエラーが生じるのかの見極めが難しいのです。
251 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 18:00:23 ] エラーを吐いてくれないと、どこでミスしているのかが分からず、 プログラムが誤動作してしまい、バグ発見に時間が掛かります。
252 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 18:21:15 ] OOPは自分で作ったサブルーチンを、後で再利用したい場合にも使います。 自分は利用できそうなサブルーチンをまとめてあります。 package名を付けて、 そこにサブルーチン名を貼り付けるだけで、 簡単に出来ますし、関数の競合の心配がなくなります。
253 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:11:33 ] >>251 その点に関しては、perlの方がエラー出さなくて分かりにくいだろ。 未使用の変数を参照してもOKだし、さらに勝手に0や空文字と解釈してくれる。 あと、 if($x = 1){print "OK"} とかもエラーにならない。
254 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 21:29:59 ] >>253 Perlにはwaningsと言うモジュールがあり、 if($x=1){print "OK"} と書くと、 Found =in conditional, Should be == at Test.pl line 2 などと、 ==にしなさいと警告してくれます。 未使用の変数の参照に関しても警告してくれます。
255 名前:デフォルトの名無しさん [2008/04/23(水) 21:31:00 ] >>218 end = 1 if a == b : print '1' print '2' end でOK
256 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:35:34 ] >>254 だったら最初からやれ、って話だよ
257 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 21:45:23 ] >>255 それなら if a == b : print '1' #end print '2' こっちのほうがいいのでは? >>256 もう一つpythonが自分に向いてない理由は、 コピーペーストがやりにくいと言う点です。 自分は、怠け者なので、 コードを書くよりも、昔書いたコードをコピーペーストするほうが多いのですが、 Pythonだと、インデントに意味を持っているので、 コピーペーストするといちいちインデントを揃えるのが面倒なのです。
258 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:46:32 ] 上の話を見てると、PerlのOOPって大したことないのか?と思ってしまうが
259 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 21:46:37 ] 257はインデントを揃えたつもりでしたが、ミスしました・・ if a == b : print '1' #end print '2'
260 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 21:56:08 ] >>258 PerlのOOPはクラスのインスタンス化、操作、破棄はもちろん 継承、多重継承、デザインパターンで言うとsingleton やAUTOLOADを使ったDecoraterなど ほとんどの機能はありますよ。
261 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:03:36 ] blessって何だ?
262 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 22:09:12 ] オブジェクトを結びつける
263 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:42:31 ] Perlに今更持ち上げるだけの価値があるとは思えない 何かにつけてややこしいし
264 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 22:46:00 ] 自分も新しい言語模索してるんですが、 なかなか、いい言語が無くて・・・ 何か無いですかね・・・
265 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:56:14 ] 自演までして「出来る人」アピールしても、言ってることがすごく浅い 比較になってない比較で啓蒙するくらいperl大好きみたいだから、perlだけやってればいいよ
266 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 22:58:32 ] >>265 自演はしてませんよ。 そう言われるのなら、 あなたが具体的にレベルの高い議論してはどうでしょう?
267 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:07:14 ] >>260 ああ、一通りあるのね あんたが「PerlでのOOP導入の利点とは、関数名の衝突を避けられること」 なんて微妙なことを書いてるもんだから
268 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:08:06 ] サイタマンの過去の発言からして 自演は良くあること
269 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 23:15:17 ] >>267 自分がOOPを使う一番のメリットは、 関数の衝突を避ける事がメインですね。 動的束縛とポリモフィズムの利用や デザインパターンの技法を使って オブジェクトを細かくコマンド化したり 細分化する事には余りメリットを感じません。
270 名前:サイタマン ◆mYN3wsz7vE [2008/04/23(水) 23:17:52 ] まあ、業務用の同じようなものばかり作ってる人にはデザインパターンは 効果的なんでしょうが。。。
271 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:19:44 ] サイタマンに同調する気はないが、 デザインパターン本を見てまねするのは末期な感じがする。 さすがにそこまでやっちゃうと考える力、判断する力がつかなくなるw
272 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:24:07 ] デザインパターン的発想ができるようになるってのが重要なわけだぁね。
273 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:30:12 ] あくまで参考として見ておいたほうがよくて、 やはり自分で設計できるようにしたほうがいいと思うよ。 大規模開発などに携わる場合は、必要な知識かもしれないけど 個人でやる場合は無視したほうがいい。
274 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:33:55 ] そうかねえ 例えば有名なGoFの23パターンだが、あれを全部とは言わずとも 大体を自力で発見できるかと言われると・・・・・・いくつか自信がない 何よりもまず、有名な手法に名前がつけられているって事が重要 名前さえあれば議論のまな板に乗せられる。伝達できる
275 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:54:10 ] >>250 いや、やはり同じこと。 if($a == $b){ print '1'; } print '2'; を間違えて、 if($a == $b){ print '1'; print '2'; } と書いた場合、Perlのコンパイラはエラーを吐かないだろう。
276 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:56:03 ] このサイタマンとやらがデザインパターン知ってたら 「ほら、Perlだったらこのパターン作るの簡単ですよ」 みたいな事ばっかり言うんだろうな・・
277 名前:サイタマン ◆mYN3wsz7vE [2008/04/24(木) 00:53:00 ] >>275 その構文と比較するのはちょっと違います。 何故かと言うと、}の位置で一目で制御文の終了位置が分かるからです。 比較してpytyonではインデントしかありません。 >>276 デザインパターンくらい知ってますが 意味が無いので、使わないだけです。
278 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:54:33 ] つーか、Rubyじゃ駄目なのか? perlより格段にマシだと思うんだが
279 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:58:30 ] >>277 思考の硬直化が見られるな。 デザパタに固執する事とデザパタを無碍にする事は どちらも似たようなレベル。
280 名前:サイタマン ◆mYN3wsz7vE [2008/04/24(木) 00:58:41 ] >>278 Rubyの構文自体に不満は無いですが、 遅すぎるのと、まだ枯れていないので、 バグがあるのではないかと言う事、 Perlでは検索して やりたい事に合うモジュールを 直感的に見つけるられるのですが、 そのモジュールが少ない事がありますね。 Singleton Factory Template 辺りは良く使われてます。 Sladeにも使われてます。
281 名前:サイタマン ◆mYN3wsz7vE [2008/04/24(木) 01:21:51 ] 一応、Templateパターンもどきで書いてみました。 use Test; my $obj = Test->new(); my $d=$obj->call(1,2); #結果3 package Test; sub new { my $pkg = shift; bless {},$pkg; } sub call{ my $self = shift; my($a,$b)=@_; my $c=$self->do_task($a,$b); $self->do_print($c); } sub do_task{ my $self = shift; my($a,$b)=@_; my $c=$a+$b; return $c; } sub do_print{ my $self = shift; my($a)=@_; print $a; } 1;
282 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:33:53 ] $aとか$bとか使う時点でもうダメだな。
283 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 02:02:21 ] >>283 java,c,vc,basicくらいしか知らない学生だが そのプログラムを見る限りperlって直感的に分かりずらいな。 あとsageろ
284 名前:サイタマン ◆mYN3wsz7vE mailto:sage [2008/04/24(木) 02:16:00 ] まあ、perlは慣れないと難しいかもしれませんね。 ただ、慣れると非常に書き手にとってメリットのある言語です。
285 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 02:33:01 ] サイタマン独演会になってから初心者が来なくなったなw
286 名前:サイタマン ◆mYN3wsz7vE mailto:sage [2008/04/24(木) 02:38:21 ] 少し自重します・・・
287 名前:デフォルトの名無しさん [2008/04/24(木) 05:47:20 ] >>283 >>283 はsageているじゃん。
288 名前:デフォルトの名無しさん [2008/04/24(木) 05:57:45 ] 3年前にニュース速報でプログラムなら負けない自信があるとほざいているサイタマンが 初心者スレで書き込み&名無しで自画自賛の自演してて笑った 528 名前:埼玉mikky ◆jM/TIxxEd. :2005/04/25(月) 21:49:44 ID:A5d3v8LD ?## 2chはいろんな分野の博識者が多くて為になるなぁ。 おれもPCやプログラムの事なら負けない自信あるけど、 それ以外の専門的な知識がいろいろ手に入るから便利だわ。 ↓↓そして3年後↓↓ 初心者のためのプログラミング言語ガイド Part8 pc11.2ch.net/test/read.cgi/tech/1208186034/ 192 名前:サイタマン ◆mYN3wsz7vE [] 投稿日:2008/04/21(月) 15:12:24 まあまあ、荒れないで下さい。 初心者にもこの程度は作れるよと言いたかっただけなので。 自分で初心者って言い切ってるwwwwwwwwwww 他にもいろいろ初心者スレに出入りwwwwワロス 負けない自信のある人間が初心者スレに出入りしている矛盾!
289 名前:デフォルトの名無しさん [2008/04/24(木) 06:05:50 ] 【頭隠して】虚言病のサイタマン【尻隠さず】 live27.2ch.net/test/read.cgi/market/1188339064/ サイタマン発言まとめスレ 東京kittyに憧れ埼玉kittyというコテを名乗る、その後埼玉mikkyを経て現在サイタマン ニート歴10年。ニート鈴木という名前でテレビ出演歴あり 株を始めて3年目で100万円を70万に減らす 自称月収200万円のIT企業だが睡眠時間以外は投資一般スレ、 ニュース速報、プログラム板に常駐 特徴は初心者のスレッドにいって別のスレで読んだことをあたかも自分の意見のように コピペすることだけど、専門家につっこまれたら逃亡する。コテをつけはじめてから この行動パターンは不変である。自作自演も得意
290 名前:サイタマン ◆mYN3wsz7vE mailto:sage [2008/04/24(木) 06:06:44 ] ちょおおお こんなところまで出張しないで
291 名前:デフォルトの名無しさん [2008/04/24(木) 06:15:40 ] ◆ここが変だよサイタマン ・自称年収4000万のIT企業社長のはずなのに起きてる時間は2chの 投資一般、ニュース速報、そして最近はプログラム板に常駐 ・数億円ある両親の資産管理会社の社長の設定だったが、いつのまにか祖父の遺産を 相続して数億円は自分のものということになっている ・しかし3年間株をやって初期資金を70万以上入金できない ・MARCH卒といっていたのが最近東京六大学卒に変わってきている ・05年でプログラムは自信があるはずなのに06年にHTMLしかできないことが判明 ・05年でプログラムに自信があると言い切っているのに最近初心者スレにだけ出入り
292 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 07:56:29 ] >>284 敗北宣言ktkr 慣れた言語が書きやすいのはあたりまえだろ。
293 名前:デフォルトの名無しさん [2008/04/24(木) 07:57:59 ] あほのさいたまんに年金手帳の質問考えてきたんだけど 質問してもいいですか?
294 名前:デフォルトの名無しさん [2008/04/24(木) 07:58:00 ] つい最近まで1ソースに何万行も書いてたサイタマンはどこいったの
295 名前:キチガイ ◆Z4QrFDzwrY [2008/04/24(木) 08:26:25 ] >>182 >2chブラウザを作りたい人は質問に答えますよ。 では、サイタマンさんに質問します はなもげらって何ですか? 知らないはずがないですよねえ? 2chブラウザを作ったんですからねえ 私も2chに自作プログラムで書き込むぐらいのことはやったことがあるんですよ まさかまさか、SaitamanSpeedとかいう専ブラが実は画面しか作ってなくて、 機能は何も実装してないなんてことはないんですよねえ?
296 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 08:34:56 ] 関数型言語初心者で、ちょっと書けるようにはなったんですが、最近 CとかC++のソースを見なきゃいけない事態になりました。こっちは まったくやったことありません。 これって何でしょうか、何でこんなにあーでもない、こーでもない って書き方してるんでしょうかね。あと、一つの変数に何回も 値を代入して、それによって関数の戻り値が変ったりするなど、 すごく分かりにくいです。 あと、ポインタってありますね。これとか全く意味不明というか、 混乱の元だと思うんですが。何でコーディングしながら、メモリ の状態を考えないといけないんでしょうか。変数に値がbind されるだけではなく、アドレスを指し示している変数が存在 する必要が分かりません。 正直、今の作業が終わったらCやC++みたいなのはずっと やらないで済ましたいんですが、可能なんでしょうか。
297 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 08:39:05 ] >>296 今はサイタマンを糾弾している最中だ。 質問は禁止している。
298 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 08:52:42 ] >>296 可能性のお話なら、「可能」だろう
299 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:34:16 ] >>296 どこぞの表現を借りるなら、C系は「コンピュータがどう動くか」のモデル化を主目的としているのに対し、 関数型言語は「計算というものがどう振る舞うか」のモデル化を主目的としている。 マシン語は使いたくないが、しかしコンピュータの性能をそれなりに高い純度で引き出したい、という場合、 前者を使わないわけにはいかなくなる。 従って、君がCやC++を「やらないで済ます」ことができるかどうかは、たとえば、 君の作るものがコンピュータの性能をどれくらい引き出す必要のあるものか、に依ることになる。 あと、より「社会的な」問題としては、ユーザー人口の少ない言語は処理系のライブラリ、ドキュメント、 相談相手etc、色んな物の少なさで苦労するかもしれないから、それに耐えられるかどうか、なんてのも。 ただちょっと気になったんだけど、「関数型言語初心者」でC/C++を「まったくやったことない」ってことは、 つまり君の質問の「登場人物」のどれについても、まともに理解していない段階なわけだよね? そういう段階にいるうちは、批判精神は胸の内にしまって、黙々と勉強を続けたほうがいいと思うよ。 それよりも、>>298 が仄めかしているように、自分の立ち位置(作りたいものとか、業務内容とか)を ハッキリ表明して、「こういう状況にあるのだが、CやC++をやらずに済むだろうか?」という適切な質問を書く、 ということができない自分への批判精神を磨くほうが大事だと思う。
300 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:47:50 ] >>277 Pythonの場合も、インデントで制御文の終了位置が分かる。 >>277 の主張は、>>277 にとっては「}」のほうが分かりやすいという感慨にのみ立脚している。 だから、「{」〜「}」よりも「 」のほうが分かりやすい人にとっては 無意味。 現実には、Pythonのコードを読みやすいと思っている人は少なくないから、>>277 のような 感じ方をする人が多数派だとはいいきれない。 また、仮にインデントが分かりにくかったならば、{〜}言語や(〜)言語やbegin〜end言語で プログラマーがコンパイラによって必要とされていないインデントを多用してコードを書く理由は なんだろうか? Basic系みたいに、 If a = b Then Print '1' EndIf Print '2' なんてやれると、これは「{」〜「}」よりも圧倒的に分かりやすい。「}」は それ自体何の終わりかわからないが、「EndIf」が「If」制御文の終わりであることははっきりして いる。しかし、Basic系でも実際のコードではインデントが多用されている。 つまり、インデントが一番分かりやすい。 Perlの美徳としてはっきりしているのは、読みやすさではなく、書く場合の労力が 小さいことだろう。
301 名前:296 mailto:sage [2008/04/24(木) 10:06:05 ] >>299 ちょっと分からないのは、僕等がやろうとしているのは計算処理であって、特定 コンピュータがどう動くかを云々することじゃないって認識なんですが、違う ということですか? コンピュータのメモリがどうのって話は、ハード屋とか、コンパイラ作ってる 人とか、OSのコア部分作ってる人たちの分野じゃないのですか?こういう のはごく限られたその方面のエキスパート達がやればいいんじゃないかと 思います。 一般のプログラマってのは、そういう話とあまり関係なくやりたいことを記述 できればいいと思うんですよね。パフォーマンスがどうとか、そういうのは コンパイラがやればいいと思っちゃう。そりゃ無理難題をコード化すれば メモリオーバしちゃうでしょうけど。メモリのアドレスがどうとか考えるのは やり過ぎじゃないですか? 関数型がマイナーだというのが僕は信じられません。Cなんかと比べて 段違いにわかりやすいと思うのですが。
302 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:14:44 ] >>301 俺らがやろうとしているのは計算処理ではないよ。 コンピュータに計算処理をさせることだ。
303 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:16:09 ] 俺はCなどの手続き型言語で挫折して、 Lispを弄ってみた。するとどうだろう。 書き方も構文のあり方も、ルールも違う言語なのかわからんが コーディングが楽しくなってきた。 そしてHaskellに手を出してみた。面白い。 そのついでに、Pythonに手出してみた。おお、理解できるぞ。 そして今はCに手出してる。 関数型言語の考え方(リスト再帰、cdr再帰、無名関数など)は かなり有用であると思えた。
304 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:25:40 ] >>301 クルマでも、オートマの方がいいだろって人もいれば、マニュアル車じゃないとダメって人もいるんだよ。
305 名前:296 mailto:sage [2008/04/24(木) 10:52:11 ] >>302 計算処理をさせるんですけど、Cとかってズラズラと手順を長々と書いてて 面倒じゃないですか? >>303 Cに戻って感想はいかがでしょうか?やっぱり面倒じゃないでしょうか? >>304 マニュアル車はどんどん減ってきてますよね。コンピュータ言語も同じような 道を辿るべきじゃないかと思います。
306 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:56:27 ] 爆釣ですね。
307 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 11:06:50 ] >>305 手続き型は、面倒だね。 (setf x 10) とか、式一つ書くだけでそれで終えられる 関数型に比べると、変数の宣言とか パラメータの型指定とか {}みたいなブレースとか戻り値とか。 指定するのは面倒くさいw でも大半のLL言語及びLispなどの言語は Cで実装されてるので学習中w
308 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 11:08:09 ] >>305 > コンピュータ言語も同じような道を辿るべきじゃないかと思います。 べきっていうか、現に辿ってるよ。 関数型は残念ながら未だマイナーだけど、いわゆるLLが元気なのは、そういう流れなわけで。 ただ、実行速度を要求される場面というのは、君が思っているほど少なくないし、 従って、一部のエキスパートが何とかすればいい、と言い切るところまでは、少なくともまだ行ってない。 たとえばゲームは、遥か未来ならともかく、しばらくは「その時代のマシンの最高のパフォーマンス」を 引き出すことと戦わなくちゃならないだろうし、 一般人に広く使われるようなGUIアプリの挙動も、「待ち時間をどこまでもゼロに近づける」ことを あっけらかんと要求される以上、言語の実行速度の問題からはしばらく離れられないだろう。
309 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 11:11:38 ] >>307 最初の例、変じゃない? 手続き型でも、動的型付け言語なら x = 10; 的な記述で済むでしょ。 あとLLの後ろに「言語」は付けないほうが。
310 名前:296 mailto:sage [2008/04/24(木) 11:31:36 ] >>307 やはり、Lisp自体の実装レベルになると、Cなどが登場するって ことですよね。コンパイラレベルというか。そこまでやる気には ならないんですよ。 >>308 確かにゲームはそうですけど、一般のゲームプログラマってそれを 構成する基本部品のようなものまで自力で実装してるんでしょうか? その辺のライブラリはやはり一部の人たちの手によって作られる べきな気がしますが。 例えば、JavaなんかもVMが間に入って解釈するようなことやって ますけど、広く使われてますよね。実際にCなんかよりずっと遅い って言われてますし。関数型言語が遅いから広まらないっていう 理由がよく分かりません。Javaよりも遅いってことなんでしょうか?
311 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 11:35:21 ] >>309 確かにおかしいかも。 (defmacro)をつかったマクロのほうがよかったのかな。 L言語とすべきでした orz >>310 pythonだとstructモジュール使って キャストを行わせるとか、Cライクな書き方があったり、 またPython.hを使ってC内部にPythonのlistとかが使えるようになるとか そういうことが書かれてて、分からないとかなりまずいなあと思ったので、 何となく学習を始めてみた。
312 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 11:55:48 ] >>310 > 確かにゲームはそうですけど、一般のゲームプログラマって〜 俺がゲームの話をしたのは、「最高のパフォーマンスを引き出すことと戦わなくちゃならない世界」 の例としてなんだから、高い速度が出るよう組まれたライブラリを、高い速度の出る言語から 呼び出さなきゃいけない状況のことを言ってるのはわかるでしょ? 基本部品も、基本部品を使う箇所も、どこも速度で妥協できない、そんな世界ではCやC++の出番になる、 そしてそれは一部のエキスパートの世界というわけではない、という話をしてるんだよ。 「その辺のライブラリはやはり一部の人たちの手によって作られるべきな気がしますが」 って、ライブラリが一部の凄腕の手で高性能を叩き出すよう書かれるべきなのは、関数型言語も同じだってばw > 関数型言語が遅いから広まらないっていう理由がよく分かりません。 俺が書いてきたのはCやC++の存在理由であって、関数型言語が広まらない理由ではないから、 言ってないことをわかられても困るという意味で、わからなくて正解。 ちなみに、俺が趣味100%で長年ちまちま作ってるマイLispは、C++で書かれてるんだけど、 整数をインクリメントするだけの単純なコードで比較すると、Javaよりは遅いけど、Perlよりは倍くらい速い。 俺程度の人間の実装でこれだから、Lispはそんなに遅い言語ではないね。どうも世間には偏見があるけど。
313 名前:296 mailto:sage [2008/04/24(木) 12:06:10 ] >>311 なるほど、だけどPythonにポインタみたいなものが登場する わけではないんですよね?Cで一番気になるのが、ある変数 の中身が一体どうなってんのか分からなくなることなのです。 >>312 ゲーム業界では、末端のプログラマでもCとかで書いちゃって るんですか。自分はもっとツールみたいなものを操作している だけなのかと思ってました。凄いというか、大丈夫なんでしょうかね、 そんな末端のプログラマにまかせちゃって。尊敬できます。 Javaより遅いってなると、今のプログラム業界ではいまいち 使い道無いんですかね。そのMyLispはスクリプト言語ですか? コンパイラ作って最適化してもダメなんですかね。
314 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:10:56 ] >>313 > Javaより遅いってなると、今のプログラム業界ではいまいち使い道無いんですかね。 なんでそうなるの? ところで君、関数型言語の初心者で、CとC++については、今回いじる以前は未経験だったんだよね? つまり、どの言語をどのくらい経験してる人なん?
315 名前:311 mailto:sage [2008/04/24(木) 12:11:55 ] Cで書くといっても、ライブラリ全く使わないなんてことはあり得ないから、 よほどコマンドラインに特化したアプリ(viやらwcやら)じゃなければ 見た感じPythonと変わらないよ。
316 名前:296 mailto:sage [2008/04/24(木) 12:17:07 ] >>314 SchemeとHaskellを勉強中です。その他は概要をちょっと 聞いたことがあるぐらいですね。 今のところ、関数型がマイナなのは速度の問題だ、と仰って いたと思うので、率直な疑問を書いただけです。
317 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:17:16 ] >>313 ちなみにCommon Lispは大抵の処理系がネイティブ吐けるし、 速度が出るように書かれたコードをコンパイルすれば、Javaよりずっと速いよ。 C/C++よりは遅いけど。 ただし、そこまで速度を重視したCommon Lispコードというのは、 関数型言語特有の書きやすさとか美しさとかからは、いー感じに離れてしまっている。
318 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:23:40 ] >>316 >>308 で「いわゆるLLが元気」って書いた。LLがJavaより遅いことには、>>312 でPerlの例を出してる。 なのになんで > Javaより遅いってなると、今のプログラム業界ではいまいち使い道無いんですかね。 になっちゃうの? って話。 > 今のところ、関数型がマイナなのは速度の問題だ、と仰っていたと思うので、 いや、>>312 で「俺が書いてきたのはCやC++の存在理由であって、関数型言語が広まらない理由ではない」 って書いてるのに、なんで次の>>313 で「関数型がマイナなのは速度の問題だ、と仰っていた」前提の レスを書くんだよ? せめて人が書いたことは踏まえてくれよ。 > SchemeとHaskellを勉強中です。その他は概要をちょっと つまり、まだ何かソフトウェアを「作り上げた」経験は無い、ってこと?
319 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:32:42 ] >>296 おもしろく読ませてもらったお礼に、関係ない話を書きます。 ある中堅企業が、Workstationを入れて、C/C++でシステムを 開発していました。それを見習った傘下の企業が同じシステムを 入れてLispではるかに気の利いたアプリを量産しました。 中小企業ってすばらしいですね。それとも、この企業には 4GBのメモリーは不要で512MBのWindowsXPにするべき だと思いますか。
320 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:42:25 ] >>301 用途に応じて使用言語を変えるのが正解。HDDのデフラグやりたきゃCやC++、AIならLisp。 >>305 CやC++で手順をずらずら書くのは面倒なんだが、クソなアルゴリズムでも意外に速いことが 多い。 >>310 LispはCよりも古くからあるから、LispでLispを実装することもできるはず。 JavaのGUIの立ち上がりなどは見るからにもさーりだが、単純なことを反復させるのに Javaはそう遅くない。
321 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:42:45 ] ジャパン語でおk
322 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:51:17 ] Lispって言語というより式だから、 うまく言ってたらパスカルの計算機が発明されていた 時代に合ってもおかしくなかったような気がするわ
323 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:56:06 ] 演算も逆ポーランド記法みたいなもんだな いかにも計算機にとって処理が得意そうなフォーマットなのに、何で遅いんだろ
324 名前:323 mailto:sage [2008/04/24(木) 12:59:05 ] Lispが遅いっていう認識がそもそも誤り?教えてエライ人
325 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 13:01:52 ] 何とくらべて遅いのか、どういうコード・アルゴリズムで遅いのか とか全く書いてないから意味が無い。
326 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 13:03:35 ] >>324 Lispで実装されたLispは遅い。 Cで実装されたLispは実行速度はC並みに早い。 モノによるんじゃないか? SBCLとかCLISPとか色々あるから。
327 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 13:17:18 ] 「一般のプログラマ」ってのが何を指しているのか分からないけど、 一般にはソフトウェアってのは工業製品もしくはその部品だ。 よって、その立場に開発環境も縛られることが多い。 家電や組み込み機器のソフトウェアを、C+アセンブラで書けばメモリ16MB・ 200MHzのCPUでいけるけど、Javaで書けばメモリ64MB・300MHzのCPUが必要、 そのために1台あたりの製造コストは1200円上がる。3年で100万セット製造 するので、12億円のコスト増。 なんてときに、ソフトウェアの開発のしやすさの都合なんかが顧みられる ことは、ほぼありえないよ。それによってOEM受注のコンペに負ける かもしれないしね。
328 名前:296 mailto:sage [2008/04/24(木) 13:20:24 ] >>318 CやC++が存在しているのはパフォーマンスがよいからですよね。 だけど、コンパイラや必要部分だけの実装で使うだけでよいならば、 その他の領域では不要だということですね。 つまり、CやC++は通常のアプリ作成には基本的に不要だという ことでしょうか。自分はああいうものが一般プログラマの使用言語 として蔓延ってる状況が全く理解不能なのです。関数型言語の ほうが遥に労力が減るし、間違いも起きにくいと思うんですよね。 ちなみに自分は小さな練習程度のアプリぐらいしか組んだことは ありません。大きなシステムみたいなものの開発は未体験です。
329 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 13:26:18 ] Cが受け入れられたのは機械語を否定しなかったから C++が受け入れられたのはCを否定しなかったから 使ったことないけど、Luaなどはそういう空気を読めている で、問題は、C/C++を否定する言語が受け入れられるかどうかだと思う
330 名前:296 mailto:sage [2008/04/24(木) 13:26:50 ] >>319 これは要するにメモリや計算速度が贅沢に使えるんだからLispでも いいじゃないか?ってことでしょうか。 自分もそう思うんですよね。Javaも詳しくは知りませんが、登場したとき 同じようなことが言われていたそうですね。Cよりもずっと遅いけど、 マシンが早くなれば問題無いんだと。 CやC++なんかでちょっとくらい速度が早くなったって、関係無いアプリが 多いんじゃないかと思うんですが。だけど、関数型言語って何故かマイナ だとされちゃってますね。凄く不思議ですよ。
331 名前:296 mailto:sage [2008/04/24(木) 13:36:31 ] >>329 そこが理解できない。 何で人間が機械語を分からないといけないんでしょうか?そんなの 分からなくて当然でしょ。人間が何したいかを書けば、勝手に機械語に 変換できればいいわけで、それはコンパイラとかの役目ですよね。 コンパイラやOS作るんじゃないのにどうしてそんな低レベルなことを 知らないといかんのか?ってのが分からない。