【Perl,PHP】LLバトルロワイヤル19【Ruby,Python】
1 :
デフォルトの名無しさん :
2011/11/04(金) 20:22:50.23 最強のLL=軽量プログラム言語は、どれよ?
エントリーは、Perl、PHP、Python、Ruby、JavaScript・・・
さあ、死ぬまで語りやがれ!!!
■LLとは?
軽量プログラミング言語(Lightweight Language,LL)とは、取り回しに優れ、
コードの作成や修正が容易と見なされるプログラミング言語のことを指す。
ここでいう「軽さ」はプログラマの負担の軽重を指し、
実行速度に優れているという意味ではない。
現在の水準では
・インタプリタ
・動的型
・正規表現
・クロージャ
などを利用できるものがLLと呼ばれることが多い。(Wikipediaより)
前スレ
【Perl,PHP】LLバトルロワイヤル18【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1310082014/
2get
>>1 >エントリーは、Perl、PHP、Python、Ruby、JavaScript・・・
Tclも仲間に入れてやってください。
機能が少ないと思っている人が多いようですが、
汎用言語として満たすべき機能は一通りそろってます。
高階関数や無名関数だって使えます。
残念ながら、クロージャーは素のTclにはありませんが、
Jimという処理系にはちゃんとあります。
覚えることも少ないので学習コストも低く、生産性も高いです。
ある問題を解決しようとして、それがPerlやJavaやCで可能な場合、
そのほとんどはTclでも可能だと考えていただいて差し支えありません。
クセが強くてなじみにくいという評価をされることが多いTclですが、
本当は結構イケてる言語です。
といいつつ最近はPythonに夢中ですけどね。
haskellはLLに入りますか?
LLとか間違った用語使ってるのは日本のうんこプログラマーだけな
LLという呼び方にも賛否はあると思うけど、 みんなが自分の好きな言語について語ればいいと思うよ。 でも、LLVMはここで言うLLとは違うからな。
アメリカは日本以上にLLが多い
アメリカのMは日本ではM いわゆるアメリカンサイズ
世界ではLLは動作やリソースの使用が軽量な言語という意味な 一部のバカがスクリプトのことを手軽・簡単の意味でLLとか勝手に間違ってるだけ ほんと恥ずかしいわ
一部のバカの名前あげてみろよ
5周ぐらいしてるな。
京都大学霊長類研究所では、未知の感染症が蔓延し、 感染した研究員はどのスレッドにも同じコピペを 繰り返すといった症状が報告されています。 研究員によると思われる書き込みがあっても 近づかないようにしてください。 京都大学
13 :
デフォルトの名無しさん :2011/11/05(土) 18:18:36.32
動作やリソースの使用が軽量ならC言語もLL?
>>13 むしろ、海外だとC言語みたいなもののことだと思われるらしいな
>>6 亀だけど、ありがとう
じゃあhaskellも参入と言う事で逝きます
>>14 そうなんだむしろ逆なのかよw
もう言わないようにしとくわ
scripting languageと言っとけばOK 日本でも通じる
スクリプトでいいだろ、バカじゃねw
日本語でいいならLLでいい 和製英語なんだから 英語圏の人間とやりとりもしないのに 海外で……とか言ってるほうが滑稽だわ
和製英語・・英語圏・・ww
I can't make sense of why you hate to call scripting languages as "LL" in Japan. We use words in order to communicate, but you never communicate with an English speaker, I guess.
次のスレタイは「お手軽スクリプトでエンジョイプログラミング」だな
「お手軽スクリプトでエンジョイバトルロワイヤル」が良いな
スクリプトって言うと恥ずかしいんじゃない? スクリプトキディって言葉とかぶるから バカかよ 見下されるのがいやなんだろ C使いとかに スクリプト(笑) みたいに だからLLとか造語つくってんだろうな かっこいい風に
そもそもLLって単語を考え出したのって誰だろ
スクリプトとインタープリタを混同しているやつも多いだろう。 前者は言語の特性、後者は処理系の特性。 だからどうしたっていう話だけど。 でも、記述が容易な言語がどうして軽量言語になってしまうのかは意味が分からないよね。 スクリプトでいいじゃん。
LLなんて言葉使うな 安易言語でいいじゃん
いや意味わかるだろバカかよ 記述が容易=書くのが少ない だろ だから軽量だろ あほかよ 風変わりに物事を捉えてかっこつけてるジャップ乙
perlは重量級
31 :
デフォルトの名無しさん :2011/11/11(金) 20:18:20.14
いまだにPHPを使い続けている人いるんだろうか?
そりゃあWordpressではお世話になってます
>>32 Googleも認めた本物のスクリプト言語、Pythonがあるにもかかわらず
その他の情弱言語を使ってる奴らって、ほんとにプログラマなのかな
プログラマ気取りの素人が、冷やかしでム板に書きこんでるだけなのだろうか
あれ?GoogleはJavaも認めてるんだけど?w
JavaはLLじゃないだろアホ
>>34 ひとつの言語しか使えない奴って、ほんとにプログラマなのかな
Javascript ってスレタイに入ってないけど LL ?
含めちゃってもいいように思う IO関係の標準が無さ過ぎだけど、基本的な要件は揃ってるし
[言語別]人の印象 C・・・キレたらうるさそうな親父ばかり。 Java・・・体育会系でもないのに体育会系のオーラを出している。わからないが、何か自信がありそう。 PHP・・・気の弱そうな奴が多い。何にも自信がなさそう。 Ruby・・・頭ハゲ散らかしてたり、顔が日焼けでボロボロの障害者が多い傾向。 Python・・・使ってる奴しらねぇ。
いまどきPerl使い続けてるやつは情弱
pythonの方が弄れる対象が多いのに、なんでウェブ系だとPHPの方が流行ってんだろ 端末からのテキスト処理も楽だし、数値計算周りのライブラリも充実しているのに PHPが優遇されているのって歴史的な経緯以外に何か他の理由でもあるのか? けどまぁ、情弱な文系SEが大半を占めているバカだらけの日本じゃ別にPHPで困ることもないか
PHPが未だに現役なのは、単に歴史的な経緯でしかないだろ Pythonに関しては、ZopeさえコケていなければWebサーバ用LLとして大成功していたはずなのに、 Railsなんかが登場したおかげで、すっかり影が薄くなってしまいますた....
zopeってコケてたんだ ってか、railsにインスパイアされたフレームワークって今じゃ幾らでもあるよね djangoとかCakePHPとか。rubyってRoRを使いたいユーザを除くと、 pythonやPHPの方がユーザー数は圧倒的に多いと思うんだけど 本家のrailsって、他を遥かに越えるほど良いものなんだっけ?
>>42 数値計算や端末からのテキスト処理なんてWeb系じゃ大して使わないからなあ…
馬鹿が何使おうと知ったこっちゃない そいつらの面倒一生見る訳じゃないし
PHPってクッキーやセッション処理等のWEB機能が言語に組み込まれていて、何も考えずに使えるからとか? PHP使ったことないから想像だけど。
>>44 Zopeが登場した当時、「RDB+PHPはもう古い、これからはOODB+ZopeがWebの中軸になる!」と
さかんに宣伝され、雑誌でもZope特集が組まれていた
少なくとも自分はZopeからPythonという言語を知ったし、その時点でRubyは知らなかった
そして、その後のORM(RDB)+Railsの出現と華々しい革新性への注目は、誰もが知っているだろう
今でもZopeの開発は継続されてはいるが、結果的に当初の期待が大きく裏切られたという事実は動かしがたい
djangoとCakePHPについては実際に触っていないので憶測になるが、おそらく技術水準ではRailsと同等だろう
しかしRailsはRailsでコミュニティの活動が活発だし、その進化は異常に早い
Railsに何か致命的なトラブルが発生して開発が停滞する、あるいはdjangoやCakePHPから
何かのイノベーションが提示されでもされない限り、後発のdjangoやCakePHPがRailsに追いつくのは無理
Railsは決して技術的に完璧なWebフレームワークではないんだけどね....(たとえばSeaSideのような.... )
だからこそ「もしもZopeが....だったなら」という「たら・れば」感はPythonコミュニティの潜在認識になっている
実際のところ、当時は低価格のレン鯖で動く言語っていったらPerlのCGIかPHPくらいしかサポートされてなかったからな。 そこで、本来のPHPの役割を超えて大規模なシステムを組もうとするやつが現れて、 低品質なPHPフレームワークが乱立することになる。 でも今はどうだろう? VPSのように自分でいじれるサーバーを簡単に調達できるようになったし、 HerokuのようなPaaSもたくさん出てきている。 しかも今までのCGIとは違って動作も早いんだよ。 もはや言語仕様が糞なPHPを好き好んで使う理由なんて全くなくなったんだよ。 元々仕方なくPHPを使ってた人も多いだろうけど。
低価格なVPSは普及してきているけど、レン鯖と比べると運用スキルが要求されるんだよね 自分はプログラミングはできても、鯖運用には自信が無いや.... 国内にHeirokuみたいなサービスってあるのかな?
CakePHPはうんこ 遅い、設計が古い、動作がおかしいの3重苦 日本では流行ってないけど海外だとYiiが流行ってきてる
>>51 なんかまた馬鹿が喧嘩ふっかけにきたな。
にやにやして次の発言を待つかw
求人がPHPばかりだから、PHPやるしかないだろ。 ここの奴がPythoPythonいうから、Pythonやろうと思う。 LinuxにはPython2がデフォルトで入ってるみたいだが、 3を入れたほうがいいよな? あとmod_wsgiってのを入れるのか。
レン鯖で運営するって、簡単な静的ページだけのサイトだけじゃないの? 昔から専鯖でもPHP使ってる所が多いと思うが。
>>52 CakePHP使ってんの?
可哀そうにw
VPSもレン鯖だけど とりあえずVPSとの対比としてのレン鯖があるとして レン鯖で済むようなwebサイトならPHPで充分かなと思う
でもやっぱりいつもの使い慣れたLL(Python/Ruby)で Webサービスを書きたいってのがある ただ、まあ重いフレームワークを使わずに、 直にDBI+SQLで操作するCGIでも 何とかなってしまう(何とかしてしまう)という話もある
PHP で GUI 書いてる阿呆もいるしね
>>59 オオッ、スゲーヨ、コレ... 正直驚いた、ここまでするかw
gtkのことかと思ってた 日本にも物好きがいるんだな。それもFLOSSとは関係なさそうなのが
ってか、HPよく見りゃwinbinderで作られてるって書いてんじゃんw
どうしてもPHPでしか書けないカタワも居るんだな
PHPって、javaやc#ほど面倒くないし、c++と違ってガベコレも付いてるし、 ウェブ系から入ってネイティブアプリ作りたい人には割と良い言語じゃないか?
奇形のPHPよりC#のが100倍マシ つかネイティブアプリの意味分かって言ってるのか?
ウェブ系から入ってネイティブアプリ作りたい人にはPythonを薦める
ネイティヴアプリは.exeとかの実行ファイル形式のアプリ そう言うのは、デスクトップアプリと呼べ
たいていのスクリプト言語は〜.exeにパックして 直接実行できたりするするので 実行ファイル形式のアプリがネイティブとは限らない 1.純粋なマシンコード 2.C#(Javaも?)みたいなJITコンパイル型VMのバイトコード +α 3.スクリプト言語をパックした系の、インタプリタ+スクリプト(orバイトコード) プログラミングしない人には区別つかんと思う
windowsだと*.vbsとかもネイティブ扱い?
ネイティブコードではないけど、Windowsならダブルクリックで起動できればネイティブアプリケーションと呼んでいいような
>>69 javaのjarファイルも、もっと言えばスクリプトの.rbや.pyも、処理系に紐付けされてればダブルクリックで起動出来るから、ネイティヴアプリと分けてデスクトップアプリと呼ぶんだろ
馬鹿には区別つかんと思う
73 :
デフォルトの名無しさん :2011/11/15(火) 17:32:46.07
RubyはRails以外に使い道がないから
海外ではRubyは昨今のRailsバブルのお陰で もはやWeb系スタートアップの共通語になってるらしいからね 求人数が多いのはそのためだと思うよ
76 :
デフォルトの名無しさん :2011/11/15(火) 18:03:23.05
なんかのミスかと思ったがアメリカでもRuby on Railsは人気があるのかなあ・・・ Pythonのほうが使いやすいと思うのだがフレームワークはRailsが優位なんだろうか
Djangoは周辺ライブラリが微妙だし本体も鈍くさい感じがする。 でも、FlaskはSinatraより好きだから、Pythonが嫌いってわけではない。むしろ好き。 ただ、いざ作り始めるとやっぱりRailsが楽だなあってなって、Railsを使い続けている。
>>77 同感だ
同じように思っている人が他にもいて安心した
PHPやJava、Scalaには Railsみたいなフレームワークあるのに Pythonにはいいのないんだよな
PHPはフレームワークが乱立しすぎているから、RailsをPHPで実装してみようというやつが出てきた。 Scalaも注目されだしたのはつい最近のことだしな。 それに比べてPythonは、Zopeというデファクトスタンダードが既に存在していたけど、 いつの間にかフェードアウト。 ただ、どうやってもRailsもどきがRailsを超えることはできないのは間違いない。
> RailsもどきがRailsを超えることはできないのは間違いない。 それはありえないな。根拠が無いだろ?
82 :
デフォルトの名無しさん :2011/11/15(火) 21:23:12.91
単にRubyとRailsが一括りにされてるから。 実際に利用されてる数は、ウェブではPHPに遥かに劣るし、システムツールならPerlPythonに遥かに劣る。
パクリはオリジナルを超えられない(キリッ って定型句だけど、 これってキリッって言いたいだけだと思う。 後発品が先に出たものを超えたものなんていくらでもあるから。
84 :
デフォルトの名無しさん :2011/11/15(火) 21:30:04.39
D言語って超えたって?
B言語って超えたって?
でもRailsはRubyの黒魔術を使いまくりだからな PHPで同じ事をできないわけではないだろうけど、Ruby on Railsほど簡潔にはできない
Railsにはもううんざりだって Scalaに移った人が言ってた
expressって、まだまだバギー?ヒャッハーな感じ? ここ最近って、M$もgoogleもjavascript押してねぇ?
>>87 RailsにはうんざりだからZope/Djangoに移ったというのなら分かるけど、
そこでScalaに移ったと言うのだと、このスレでは説得力が皆無だな
ただ単にdisりたいだけちゃうんかと
>>73 精神的なものじゃね?スタートアップなんて根無し草の集まりにとって、
googleが囲った言語にcoolさを見出せないんだろ
そういう理由じゃなくてRailsのほうが単純に情報もプラグインも多いからでしょ
その情報とプラグインって、ほとんど全部を37signalsが書いてるわけ? どういった理由で、djangoの情報とプラグインが増えないのよ? linuxじゃデフォのツールなんだし、ツールとの連携を考えたらpython一択じゃん わざわざ不合理で不完全な言語を使うなんて 社会からハミ出た奴らの精神的な作用によるものじゃないの?
>>83 未来について語る事は子供にでもできるからね
というか、世界中のPythonプログラマが Remeber Zope!! を合い言葉に
打倒RailsたるWebフレームワークを開発しているはずだけど、
いまだにRailsを超えるプロダクトが登場しないのはナゼ?
Railsも登場してから、かなりの年月が経過しているんだけどなぁ....
その間にもRailsはRails 3が登場して、REST/AJAXの強化等の進化が継続しているよ
>>91 それが先発品の優位さ、という事なんじゃないかと思う
>>93 djangoの情報とプラグインが増えないという、
現実に対する鬱憤を吐いてるようにしか聞こえないな
もしも
>linuxじゃデフォのツールなんだし、ツールとの連携を考えたらpython一択じゃん
が真実であるのなら、今頃はdjangoの情報とプラグインが溢れかえっているはず
96 :
89 :2011/11/15(火) 23:41:17.10
>>92 それは知っているよ。自分も関数型言語を触るから。
ただし、いくら有名人の言葉とはいえ、
LLバトルスレでScalaを引き合いに出しても「説得力が皆無」ということ。
Railsのどの部分がPHPでは簡潔にできないん?
>>97 ちょっと違う。
RailsではなくRubyという言語の機能でメソッドのフックができる。
これはPHPでは実装できない。だからPHPではフレームワーク側で
メソッドのフックに近いことが出来るような仕組みを用意している。
RailsはRubyが持っている機能を使ってフレームワークが比較的シンプルになっている。
そのおかげでRailsの開発もスムーズに行った。
PHPのフレームワークはその部分が少し複雑になっている。
が、できないことはない。フレームワークと言語の仕事の範囲が代わるだけで
RailsとPHPフレームワークを比べれば、大きな差はない。
>>89 サイトを立ち上げてから修正を繰り返していくところまではRailsのほうが簡単だけど、
RubyではScalaのようなJVM環境には実効速度の面で太刀打ち出来ないから、
システムが本格的に固まってきたら、RubyからScalaに移るんだろ。
Twitterなんかがまさにそうじゃないか。
>>97 まず文法が簡潔じゃない
> Twitterなんかがまさにそうじゃないか そんな話、Twitterぐらいしか聞かないじゃないかw
>>95 yumもgdbの拡張も、gnome周りの拡張もpythonがデフォだ
4、5年ぐらい前はpythonはプリインストールされてんのに、
rubyはソースコードから入れないとダメな状況だったぞ
ウェブ開発だけrubyが優遇されてる意味が分からん(htmlに埋め込み辛いからか?)
セキュリティ周りのツールやルータはluaで書かなければならんし…。
ここいらでjsに妥協して統一されてしまわんかなと思う奴は少なくないはず
103 :
89 :2011/11/16(水) 00:46:36.39
>>99 だからそんな話は分かっているって。
でもその話は「Rubyから関数型言語(Scala)へ移行した理由」だろ?
同じ事を三度目の繰り返しになるけど、
その理由を「LLバトルスレ」で語っても「説得力が皆無」と言っているんだが....
RubyがXXXだからPython(あるいはPerl)へ移行しました、という話なら議論の価値はあるよ
>>95 Python信者乙。
yumや、gdbとgnomeの拡張がpythonであるからといって、それをwebアプリでも使いたいと思う人は少ないというだけのこと。
ソースからインストールする必要があったとしても、web開発ではrubyを使いたいという人が多いというだけのこと。
106 :
デフォルトの名無しさん :2011/11/17(木) 09:28:13.01
TPP反対派とかわけわからん。 Tokuhirom Perl Player!! Go Go!
PowerShellみたいなのが出てこないかぎり、Perlの代替はないから困るよ。 無理やりアプリを書かないようにすればいいだけ。
109 :
名無し :2011/11/17(木) 19:00:37.64
どれも洗脳言語だからまとまるはずない
>>104 まぁ、Cで拡張する必要がない人にはgdbはいらないけどね
おまえみたいなのASPでも弄ってろ
>>109 なんでハッカー()ってツールを祭り上げたがるんだろうな
115 :
デフォルトの名無しさん :2011/11/19(土) 15:19:12.06
e?
とりあえず、javascriptでOSを書くような奴以外はgeekですらないと思うことにするよ
情弱はjavascript(プログラミング)・・・
githubに登録されているプロジェクトの2割がjsで、 これはruby,pythonを越えて一番に多いんだぞ
ウイルス作ってたほうが楽しいだろ?情弱諸君
君がウイルスを作っていたほうが楽しいと思っている人だってのはよく分かった。 そして他の人が同じだと思わないほうがいい。
真面目ぶんなって低脳
普通だと思いますが、あなたには真面目に見えたのですか? 真面目に見えるのなら、本当に真面目なのかもしれませんね。 自分ではよくわかりませねん。
まあくだらねえWEBサービス作って喜んでる情弱は早く死ねって事だよ ”人に喜ばれる” ”技術を追う楽しみ” ”大規模なシステムを組みたい” とかわめいてるバカは情弱かよ 脆弱性報告してんじゃねえよ 情弱かよ 報告することが美徳かよ 正義ぶってんじゃねえぞ 悪用しろよ 悪いはかっこいい お前らはバカ 悪用できる勇気がないのか?低レベルだから 逮捕されそうだな君たちは
つまり、逆に言えば、くだらなくないWEBサービス作ってるなら問題ないってことですね?
125 :
デフォルトの名無しさん :2011/11/20(日) 16:04:07.39
>>125 なんかそれ「もうちょっとOtherをkwsk」と言いたくなるグラフだなw
githubはrubyのgem扱えるから当然
よくわからんのだが、サーバーサイドのjavascriptが無茶苦茶性能良いらしい ScalaとかJavaよりいいのか?
akiyan 秋田真宏 akiyan.comの秋田真宏 ペニー・オークションを絶賛で有名なあのakiyanこと秋田真宏 アルファブロガー兼詐欺師のakiyanこと秋田真宏 株)ロケットスタートの秋田真宏ことakiyan 広告主からも掲載者からも見放されて風前の灯KauliのCTO 最近は2ちゃんでの度重なる失策でナーヴァス・ブレイクダウンでakiyan.comも更新途絶 ことakiyanがご降臨と聞いて鳩ろだからすっとんできますたが、 それほどでもないカキコなので帰ります。
>>129 ピーク時20万でAppサーバー20台って
1台あたり1万じゃん?
C10K問題(Client 10000問題)到達してないじゃん?w
え
私はssig33といういい教師がいる いい教師である いい教師
反面教師の間違いだろ
node.jsもてはやされてるけど、プロセス使わないって設計方針に沿わせれば、 ほかの言語でも同じことできるんじゃないのか?
>>136 できなくはないけど、他の言語で同じ事をやると、
それその言語を使っている意味あるの?ってなってしまう。
node.jsはスレッド(プロセス)を使わないだけじゃなくて
ブロックするI/Oを使わないという特徴がある。
ファイル読み書きやデータベースアクセスなど一定時間処理かかってしまうものをnode.jsは非同期で行うようにした。
もし同期的なものを使うと、スレッドは一つしか無いためすべての処理が止まってしまう。
所でJavaScript標準でファイル読み書きやデータベースアクセスなどをする関数は何でしょう?
答えは、無い。この無いっていうのがnode.jsにぴったりな言語だった。
他の言語ではファイル読み書きなどの命令が標準で存在するがそれらはいずれも同期的なもの。
node.jsの用途では使えないから、別に作ってそれを使わないといけない。
node.js用のライブラリばかり使うのでその言語でやる必要性がない。
他の言語はその言語の資産、ブロックするI/Oが含まれているライブラリが、仇となってるんだよ。
ちなみにブラウザに搭載されたJavaScriptはスレッドがないから、既存のJavaScriptライブラリは自然とブロックしないものになってる。
だからnode.jsで既存のJavaScriptライブラリを資産として使うには問題ない。
ブロックしない命令だけによるライブラリを構築するには、ブロックするI/Oによって
作られた世界が存在しないJavaScriptが一番最適だったとそう俺は考えてる。
詳しい解説トンクス。 node.jsが普及したら、非同期でノンブロッキングI/Oなpythonやrubyの実装が出たりするかな
node.jsってまだ流行ってるの?
まだというかこれからだろw 企業による運用実績とか出始めてきてるし
物珍しさで一時期流行るけど そのうち話題にならなくなるでしょ
物珍しさのはやりだけで企業がサービス提供したり 大規模開発したりはせんだろw
物珍しさのはやりだけで ↓ 物珍しさや、流行りだけで
Node.jsみたいな考え方に則った新しい言語でNode.hogeをやって欲しいお
じゃあ、Death Node
文字って、Dart Node
ちょっといい? Pythonの例外処理って例外クラスのクラスオブジェクトを投げるよね 他の言語だと例外クラスのインスタンス投げると思うんだけど、あれは何故?
またまた〜
Perlなんかそもそもいまさら使いたいやつなんていないだろうし、 Python なんてブロックの終了を省略出来るくらいしか認知されていない言語をそうそう使おうなんて思わないし、 PHPも新規で使いたいなんてそうそう思わないだろうし、 消去法でRubyしか残らないだろ。 と思ったが、いま自鯖で Redmine 入れようとしてかなり苦戦しているw
Rubyは情報が日本に偏っているって時点でダメだろう。
>>151 アナタハニホンゴノフジユウナハントウシュッシンシャデスカ?
OC
セイコーで必要十分だろw
ごばくしたw
157 :
デフォルトの名無しさん :2011/11/23(水) 21:03:08.23
Closureってどうです? Scalaよりすごいらしいですけど
158 :
デフォルトの名無しさん :2011/11/23(水) 21:05:05.71
☓ Closure ○ Clojure
>>151 求人とかみると
結構アメリカでも使われているっぽいけどな
160 :
デフォルトの名無しさん :2011/11/24(木) 13:24:42.16
なくはないけど、主要LLの中じゃ一番少ない。 WORD PRESSとかのCMSカスタマイズみたいなの入れると更に割合下がるし。
161 :
デフォルトの名無しさん :2011/11/24(木) 15:51:19.17
Luaが簡単で使いやすくて最強すぎる。 もっと早く有名になればRubyやらPythonがいろんなソフトのスクリプトに使われまくることもなかったのに。 本当にRubyとかPythonとかスクリプトに使われてるプログラムとか困るわ。 スクリプトのくせに言語自体がでかすぎて覚えるのが面倒くさくてしょうがない。 Lua最強、組み込み最強、これからはLLじゃなくて組み込みが流行ってほしいわぁ。
Luaとか 実行速度以外にメリットないから
>>161 拡張/埋め込み型言語が汎用スクリプト言語と見なされるようになった例としてはTcl/Tkがある。
Tcl/Tkは初期のバージョンこそ低機能でストールマンにも酷評されたほどだが、
現在はかつてより機能も増え、Tkの利便性もあって、
かつてほど流行らないとはいえ一定の地位を確立している。
Luaも同様に単独で用いても十分な汎用スクリプト言語と見なされるようになる可能性はある。
Tclより文法の癖がないので、もう少し機能を増やし、IUPあたりを標準GUIライブラリーとすれば
ありえない話ではない。
Luaの重要な要素はDouble、連想配列、文字列、クロージャだけ、 これだけでオブジェクト指向もばっちりできるんだぜ。 (メタテーブルは使うと馬鹿を見るからおいといて、) 文法も分かりやすい、処理速度もスクリプト系最高、全てが良いこと尽くめじゃん。 Rubyのくっちゃくちゃな制御構文を必死に覚えて、 Pythonの意味不明なデータ構造を解読してたのが馬鹿みたいだわ。 所詮、超高級言語とか言われてるスクリプト言語の行きつく先は C++やらJavaやらの機能をまねることだから これからも見栄張って複雑化、巨大化してだんだんスクリプトとして使いにくくなるわな。 その逆で簡素にすることを目的とする組み込み系は やっぱり本来のスクリプト言語のあり方で、分かりやすく使いやすい言語に進化するんだと思う。 Lua最強!組み込み系最高!
こうしてまた一つ、信者のキモい言語が生まれた
>>163 tcl/tkはtkが優秀すぎた
tcl自体はダメ言語だよな
あれなら素直にlisp使う方がいい
>>166 しかし、ストールマンの思惑どおりにはSchemeがTclの代替になるほどには普及しなかったけどな。
いくら「Tcl使うな。Scheme使え」と言っても普通のプログラマが急にLisp系の言語に馴染むのは無理だし。
何だかんだ言われても、シェルスクリプト感覚のコマンド言語であそこまで使えれば上出来だよ。
lispのひとも死んだんだっけ
老害は淘汰される。
>>167 昔から言われてるが
tclは外のカッコ抜いた劣化lispだよ
tkとの馴染みはいいけど
lispはシンプルで永遠のマイナー言語だから
今後も細く長く生きるだろな
171 :
デフォルトの名無しさん :2011/11/25(金) 17:58:03.94
>>170 tclはなまじlispに似てるからそういう批判ってよく耳にするけど、
だからってlispなんて使いたくないけどねぇ。
lispはシンプルだっていうけど、マスターしやすさ比べればTclのほうが簡単だし。
lispの書籍に乗ってるような非実用的なサンプルで遊んでる暇があったら、
手っ取り早く業務アプリの一つでも作りたいのが普通の人なわけで。
たかがちょっとしたツール作るのにlispを学習するのはコストに見合わない。
だからこそいつまでもマイナーなのであって、孤高ぶっても意味は無い。
tclになじめないならpythonでもrubyでも好みに合う言語を使えばいい。
何が悲しゅうて万年マイナーで挫折者続出で、
簡単じゃないのに簡単だと宣伝されるlispなんぞ使わなきゃならんの?
172 :
デフォルトの名無しさん :2011/11/25(金) 18:01:21.18
S式の単純さは読み下す時のヒントが少ないことを意味する。すべてがS式なので、ここはデータ、ここはロジックという情報もプログラムの字面からは得られない。ヒントが多ければ良いというものでもないが、あまりに少ないのはつらい。 また、生産性の向上に寄与したマクロは、任意に定義されたユーザ言語を定義することと等しいので、このプログラムが利用しているマクロについての十分な知識がなければ、コードの構造も理解できないことになる。
173 :
172 :2011/11/25(金) 18:02:16.96
akiyan VS ssig33 大戦争勃発しました 誰も止められない戦い
175 :
デフォルトの名無しさん :2011/11/25(金) 18:21:50.76
普通のプログラマが言語を選ぶ基準って、やりたいことに手が届くかどうかなんだよね その「手が届くかどうか」という基準の前には美しさだの簡潔さだのなんて二の次、三の次になる まぁ、「プログラミングやりてぇぇーーー」って人にとってlispは神言語なんだろうね でも、多少冗長でも理解しやすい言語を使って、とりあえず色々作りたい普通の人にとって、 lispの素晴らしさを熱く語り、「どうしてみんな使わないんだろう」くらいのことを吐く人は気持ち悪いだけ
>>171 Tcl、マスターし易いか?俺は未だに[ ] と { }のどっちを使うべきなのかが判らなくなることが多い
>>176 そんなことで迷う人がいるんだね
lispが驚くほど簡単で便利なら、どうして全てのプログラマが使うようにならないのか、
それを考えたことがあるのか?
みんな自分が一番って思ってるかぎり結論は出ないわ
ガベコレを使わない言語の中ではTclが最良。 Cで書きたいところはCで書けるので。
tclはぱっと見普通に見えて実はやらしい 同じことするならlispのがいいな まあ両方使わずに別な言語使うがw でもlispは実験的なことしやすいから マイナーとして残るだろ
Lispを当たり前に使える人には理解できないようだが、世間の大多数はLispなんて使えない。 そもそもLispを必要だと感じず、別の言語で大過なく仕事をこなしている。 S式だcarだcdrだconsだ再帰だマクロだと言っても、普通の人にとってはだから何としか思わない。 やりたいことを手続きとして順に書くほうが直感的に楽だし、それで不便を感じない。
Lispの初心者向け書籍やサイトは難しいのが多い。
というか、ナンセンスな難しさで満ちている。
たとえばここのwc。
ttp://www.shido.info/lisp/scheme_sym.html たまたまtclが話題になってるのでtclで書くとこうなる。
if {$argc == 0} {
puts "ファイルが指定されていません"; exit
}
if [catch {open [lindex $argv 0] r} fd] {
puts "ファイルがオープンできません"; exit
}
puts [regexp -all {[^ ]+} [regsub -all {[[:space:]]$} [regsub -all {[[:space:]]+} [read -nonewline $fd] { }] {}]]
close $fd
あくまで上で話題になってるからtclで無理に書いただけで、
得意でないので変なところもあるかもしれんが笑って許してもらいたい。
lisp派から見れば、「正規表現使ってるんだから短く書けて当然。アンフェアだ」と思われるだろう。
でも、実用的なプログラミングを教えるなら最初からこういう書き方を教えるのが普通だ。
lispに馴染めず嫌いになる人が多い理由は、ただプログラミングがやりたいだけなのに
「Lisp流派」の「プログラミング道」の修業をさせられるから。
手続型言語ならば、極端に言えば適当に書けばなんとなく動くわけで、
らくだが針の穴をくぐるような困難さはない。
>>182 wcといっても、それやってることが全然違うべ
lisp入門に難しいのが多すぎるってのは同意だけど
Lisp使うくらいならProlog使うよ。
kamomeの次はhibariの番か?
なんでスクリプト言語がLLなんだよ。 Utiltyクラスもそうだけど、日本人の自称エリートは 海外の用語を音だけ借りて自分の逃げ道にするの好きだよなァ・・・。
全然違うだろw ネタは各単語の頻度じゃねえかw まあperlあたりで書くと数行かな? ていうか、言語なんて適材適所だし 普通いくつか使えるだろ tclは今更感が強いがね
>>186 ここ、日本なんで、
日本語でお願いしますね。
どうでもいい
Perlが最強
>>187 tcl愛用してる俺は今更な人間なんだね
悪いねぇ
俺の言語の利用頻度
bashスクリプト>awk>tcl>python>c>basic
職業はプログラマじゃないんで、動きゃいいって発想
プロって大変だね
素人だったら極力古いBASIC並に覚えることが少ない言語で済ませるところを
難しくしなくちゃいけないんだから
『とある非情報系企業の実話』 現場の人「仕事の能率上げたいからこういうの作って」 社内SE「デキネ」 現場の人「仕方ない自分で作るか」 数日後・・・ 現場の人「なんだ、簡単に作れるじゃん。あんたやる気あんの?」 社内SE「普通にやったら難しいんです」 現場の人「普通にやらずに簡単にやればいいだろ」 社内SE「・・・」
簡単に作れるなら最初から自分で作ればいいじゃん、と思うのは自分だけ? (ことわっておくが、自分は現場側の人だよん)
>>193 一応相手はプロフェッショナルだからねぇ
プロが真面目に作ろうと思ってもできないのに、
アホな言語、劣った言語で素人が作ったらプロの面子丸つぶれだろ
それと、作るのは簡単でも社内で業務に用いるものだから
一応伺いをたてないとマズいってのもある
どこでも通用する汎用言語を使うのが普通と思われているんだよな。 特定のジャンルで強いがそこでしか使わないローカル言語が過小評価されている。
んなことしてたら仕事にならんだろ 奴隷は言われたことを言われたとおりにやってりゃいいんだよ
文法や環境が変わると非効率だよね。jsかpyに固定した方が効率いいのに
>>194 社内SEがプログラム出来るとは限らないだろ。
Excelとパワポしか使えないのにSE名乗っているのなんてそこら辺にいるし。
まず作成のための承認とって 仕様書とか管理文書とか工数見積り作って レビューと承認とって バカでも使えるようにエラー処理も万全に さあ、もうやる気でねえだろ
>>194 プロの面子丸つぶれとか、くだらない話
社内SEは面子のために仕事をしているわけじゃない
彼らは彼らなりの責務がある
社内SEはご用聞きや雑用係でもなければ、お母さんでもない
現場で課題が見つかったのなら、まずは現場で解決を図るのが当たり前
その上で解決の困難な課題があれば社内SEへ相談する
社内の情報システム部門の人達に対して
技術力への向上心を強く期待する考えは自分にもあるが、それとこれとは別の話
最初から相手を見下した態度をとる
>>192 や、くだらぬ面子にこだわる
>>194 の姿勢は
とても理性のある大人の行為であるとは思えない
後半の伺いを立てるという部分については理解する
tcl嫌いでtkだけ使いたいひとにはpythonオヌヌメ
202 :
176 :2011/11/26(土) 09:17:40.24
>>177 いや俺はLISPがマスターし易いとも思わんさ
括弧アレルギーはすぐ克服出来るけど、マクロ絡みは慣れが要るしな
ただTclもそれと対比するほど簡単じゃなくね?ってツッコミたかった
そのひとつとして出したのが括弧の選択ね
>>182 を見ても if の引数が [ ] だったり { } だったりする
ループなら { } 一択とかはまだ判りやすいんだが…
それぞれの意味は解ってても、パッとどちらが最適かは出てこないし
他人のコードでなぜこちらを使ったのか、本当にこちらで正しいのかは
しっかり読み込まないと見えてこないよ
これなら無茶なコマンド形式よりも
分岐やループとかは専用構文のほうが簡単だったよ…
リストっていろんな言語に実装されてるけど、
carだのcdrだのconsだのドット対だの言ってるのはlispだけだよな
他の言語だとデータが長い入れ物に順番に入ってるっていう認識で使いこなせるのに
>>202 tclで[]を使うのってlispで言う所のcarのコマンドを解釈させるってだけじゃないの?
単なる慣れの問題としか思えないんだけど
俺もTclは昔ちょっとかじっただけだけど Tclはシェルを知ってるならシェルだと思うのが一番わかりやすい シェルを知らない・かつ本当に初心者なら、とっつきにくい言語だとは思う Tclではすべてがコマンド関数であり、データはすべて文字列である (Lispで言うスペシャルフォームすら存在しない) Tclは基本的にeagerに評価するが、Tclの評価とはシェルで言う文字列展開である 関数の評価っぽいことをしたい場合には[]を使う(シェルのコマンド展開と同じ) ifのthen節else節のように、eagerに評価されては困る場合は{}で遅延させる 変数のlvalueにアクセスする場合には$をつけない、rvalueにアクセスする場合には つける(シェルと同じ) とりあえずこんぐらい知っとけばなんとなくわかるんじゃね
Lispでは(list 'hoge)と'(hoge)の違いを理解するためにポインタを理解する必要がある Tclにはポインタがない 昔のPerlもポインタがなかったようだが今のPerlにはポインタがある
Tclは「空白を含む文字列」と「文字列のリスト」の区別が 時々ごっちゃになって混乱する
要するに Perl の劣化版か
オブジェクト指向か関数型の信者にならないと、Perlの劣化版と言われるよね この状況が続く限り信者は無限に増え続ける
俺はPythonとTclは同じくらい好きだ
CLIだったらPython、GUIだったらTclを選ぶことが多い
以下、"
http://www.nslabs.jp/monkey-python-02.rhtml "より抜粋
# -*- coding:utf-8 -*-
import Tkinter
class Scribble:
def on_pressed(self, event):
self.sx = event.x
self.sy = event.y
self.canvas.create_oval(self.sx, self.sy, event.x, event.y, outline = "red", width = 5)
def on_dragged(self, event):
self.canvas.create_line(self.sx, self.sy, event.x, event.y, fill = "red", width = 5)
self.sx = event.x
self.sy = event.y
def __init__(self):
window = Tkinter.Tk()
self.canvas = Tkinter.Canvas(window, bg = "white", width = 300, height = 300)
self.canvas.pack()
quit_button = Tkinter.Button(window, text = "終了", command = window.quit)
quit_button.pack(side = Tkinter.RIGHT)
self.canvas.bind("<ButtonPress-1>", self.on_pressed)
self.canvas.bind("<B1-Motion>", self.on_dragged)
window.mainloop()
Scribble()
210 :
209 :2011/11/26(土) 12:46:51.93
Tcl/Tkならこうなる proc mousePress {w x y} { global mousePressed startX startY set mousePressed 1 set startX $x set startY $y .c create oval $startX $startY $x $y -outline red -width 5 } proc mouseDrag {w x y} { global mousePressed startX startY .c create line $startX $startY $x $y -fill red -width 5 set startX $x set startY $y } pack [canvas .c -bg white] -expand 1 -fill both pack [button .b -text 終了 -command exit] bind .c <ButtonPress-1> {mousePress .c %x %y} bind .c <B1-Motion> {mouseDrag .c %x %y}
211 :
209 :2011/11/26(土) 12:48:29.93
失礼 変数mousePressedは不要です
>>207 いやlispの劣化版
perlはある意味割り切ってる
lispでRPG作ってください お願いします
RPGとはロリペドガールの略です。
>>212 そもそもlispと同じである必要なんてあるの?
暗記量が少なくて済むお手軽言語なんだから、それでいいのでは?
http://cpptk.sourceforge.net/ Tk版
button ".b" -text "Say Hello" -command hello
pack ".b" -padx 20 -pady 6
C++版
button(".b") -text("Say Hello") -command(hello);
pack(".b") -padx(20) -pady(6);
きめぇwwwいくらC++だからと言って - 演算子オーバーロードかよ
こういうC++界隈に多い「やれるからやってみますた」みたいなノリって何なんだろうな
>>216 『RPGサンプル仕様』
ウインドウを表示する
ウインドウはリサイズ不可
マップの大きさは16x16マス
マップチップ1個の大きさは32x32ピクセル
マップは平地と木で構成し、平地には石を置ける
木と石は障害物なので、そこへは移動できない
障害物とキャラの重なりがある場合、前後関係を意識して表示する
マップ上の特定の位置でごく簡単なイベント発生
キャラ移動の方向は東西南北の四方向
キャラは常にウインドウの中央に表示し、
キャラ移動の画像は東西南北の各方向につき3枚(直立、右手が前、左手が前)
キャラのステータス情報を表示したり消したりできる
ここまでおおざっぱに作って、tcl/tkではシェバング行等、
動作に必須でない行も含めて148行でした
wcすると、
$ wc rpg.tcl
148 1020 4657 rpg.tcl
という結果でした
結構無駄があるのでもう少しスリムにする余地もありそうです
劣化してないLispならほんの数行でできるのではありませんか?
>>210 Ruby/Tkにしてみた Ruby 1.9以上で
小さいスクリプトしか書いたことないので
Pythonみたいにclassを作ったほうがいいのか
トップレベルにべた書きしほうがいいのかよくわからない
#coding:cp932
require 'tk'
sx,sy = 0,0
Tk::Canvas.new bg:'white' do
bind 'ButtonPress-1' do |event|
sx,sy = event.x, event.y
TkcOval.new(self,sx,sy,sx,sy, outline:'red', width:5)
end
bind 'B1-Motion' do |event|
TkcLine.new(self,sx,sy,event.x,event.y, fill:'red', width:5)
sx,sy = event.x, event.y
end
pack expand:1, fill:'both'
end
Tk::Button.new text:'終了' do
command {exit}
pack
end
Tk.mainloop
220 :
218 :2011/11/26(土) 21:46:16.39
尻切れになってましたね >キャラは常にウインドウの中央に表示し、 これは、正しくは キャラは常にウインドウの中央に表示し、背景を動かすことでキャラの動きを表現する でした。 あと、もう一つ条件があるのを忘れてました 「ウインドウに任意のタイトルをつける」
221 :
218 :2011/11/26(土) 21:57:49.49
またまた忘れてました
>マップは平地と木で構成し、平地には石を置ける
砂地も使ってましたので、正しくは次のとおり
「マップは平地と木と砂地で構成し、平地には石を置ける」
>>216 別に冷やかしでRPG作ってくださいってお願いしてるわけじゃないんですよ
Lispでどれくらいのことがどの程度の手間でできるのか知りたいんです
私はスクリプト言語をいくつか齧った程度なので視野が狭く、
Python、Tcl、PHPなどがすごく手軽で便利に見えてしまってます
世の中にはもっと便利な言語もたくさんあるのだということを知りたいんです
>>217 Ruby/Tkもわりと変なことしてます
一番ベタな書き方で省略なしだと
b = Tk::Button.new(Tk.root,{'text' => 'Say Hello', 'command' => proc{hello}})
b.pack({'padx' => 20, 'pady' => 6})
オプション名をシンボルにして、親ウィンドウ指定&メソッド呼び出し括弧&ハッシュ引数の括弧を省略して
b = Tk::Button.new :text => 'Say Hello', :command => proc{hello}
b.pack :padx => 20, :pady => 6
Ruby1.9のハッシュ記法で
b = Tk::Button.new text:'Say Hello', command:proc{hello}
b.pack padx:20, pady:6
ウィジットのインスタンスメソッドで
b = Tk::Button.new
b.text 'Say Hello' #セッターメソッドでも可 b.text='Say Hello'
b.command{hello} #セッターメソッドだと b.command=proc{hello}
b.pack padx:20, pady:6
オプションをブロック内に記述
ブロック内ではselfがウィジットのインスタンスにすりかえられてます
(Rubyで内部DSLを作るときの常套手段)
b = Tk::Button.new do
text 'Say Hello'
command{hello}
pack padx:20, pady:6
end
ウィジットの引数つきのインスタンスメソッドはselfを返すのでメソッドチェーンでつなげてみたり
b = Tk::Button.new.text('Say Hello').command{hello}.pack(padx:20,pady:6)
てか最古参の言語のひとつであるLISPに何を求めてるのだろう 得意分野であるリスト処理は最近のスクリプト言語にかなり輸入されてる それこそ挙げられたPythonでそのリスト処理の手軽さをしっかり享受してると思うぞ
(in-package :cl-user) (asdf:oos 'asdf:load-op :ltk) (in-package :ltk-user) (with-ltk () (let ((c (make-instance 'canvas :background "white")) (b (make-instance 'button :text "終了" :command #'(lambda () (setf *exit-mainloop* t)))) sx sy) (defun press (evt) (setf sx (event-x evt) sy (event-y evt)) (create-oval c sx sy sx sy)) (defun drag (evt) (create-line* c sx sy (event-x evt) (event-y evt)) (setf sx (event-x evt) sy (event-y evt))) (pack c :expand 1 :fill :both) (pack b) (bind c "<ButtonPress-1>" #'press) (bind c "<B1-Motion>" #'drag)))
225 :
デフォルトの名無しさん :2011/11/27(日) 14:16:15.96
ゲームは創作物の中でハードル高い CGだけでも奥深いのに
音楽やプログラムも必要だしそれらを束ね合わせるセンスもいるし
更に全てハイレベルで無いとしょぼくなる
お前らLLジャップじゃ相当太刀打ちできない
>>213 みたいなゴミカスは本当にカスだと思う
何がRPGだよ何がLISPでRPGだよ
不向きな言語で物を作ろうとする美徳 気持ち悪いねジャップは
カスLLじゃゲーム作りは向いてないよ
全てにおいて中途半端
WEBサイトなんて中途半端
グラもゲーム並みに緻密でかっこいいものもいらない 平坦な素材とかだけ
音楽すら使わない ただのクリック音 ファミコンぐらいの音
プログラミングもゴミ ただのレベルの低いLL すべてにおいてカス
LLはゴミ
226 :
デフォルトの名無しさん :2011/11/27(日) 14:21:16.61
お前ら情弱は大人しく 低レベルのスマートフォンアプリかゲーム作るか 不向きな言語でゲーム作って "LISPでゲーム作ってみた" "COBOLでゲーム作ってみた" "Haskellでシューティングゲーム作ってみた"とか くだらない車輪の再発明してればいいんだよ 真の欧米のインテリゲンチャはもっとレベルの高いオンラインゲームだよ レベルの差だねジャップは ゲームに不向きなLL 馬鹿WEBのにわかがゲーム(笑) 笑わせんなってw David M. Bourg+Glenn Seemannの靴でも舐めとけばいいよジャップはw
インテリ原チャって何?
ゲームの外の世界にはレベルなんてないんだぜ。 だからゲームを作ってゲームの中に篭ってレベルを競うのだ。
>>228 > ゲームの外の世界にはレベルなんてないんだぜ。
あるぞ。
将棋二段とか
ここまで頭の悪そうな文章を書ける人は逆に尊敬してしまう。
225の言ってることは事実だけどね >>ゲームは創作物の中でハードル高い CGだけでも奥深いのに 音楽やプログラムも必要だしそれらを束ね合わせるセンスもいるし 更に全てハイレベルで無いとしょぼくなる
>ハイレベルで無い 漢字の使い方くらい勉強しようぜ それとも小学生なのか
ハイレベルなんだから仕方ない
JavaScriptでWebGL使った3Dとかも作れるのに 情報が古いと言うかなんというか
WebGLなんて速攻でOFFにするだろ
On/Off関係無いだろ それならゲーム等の3D映像だって必要無い奴は買わないわけだし 必要であればOnにするだろ?
238 :
デフォルトの名無しさん :2011/11/28(月) 00:08:58.93
ジャップって何でクズなの? ニコニコ動画のデブチンもすげークソだし なにが凄腕プログラマだよ 日本の2chのその下らへんで有名だけ ねえ?!??! ニコニコ動画はウンコじゃん Youtubeはログインしないで見れる ニコニコ動画はログインしないと見れない くだらない ニコニコビュアー使えば見れる(失笑) Yotubeは誰でもコメントできれば最高 ニコニコ動画はウンコ お前らクズ ゲームでもゴミ 欧米がやったあとやるだけ いつも欧米のあとゲームはな??? 消えろよいい加減 ゲームの緻密さで勝てないと UIとかくだらねえ発想(体感ゲーム、トイレでゲーム) とかくだらねえので勝とうと必死 くだらねえんだけど
どうでもいいけど、アーマードコア5楽しみだな。
240 :
デフォルトの名無しさん :2011/11/28(月) 00:21:54.82
ジャップってガンダムとかロボット好きだよね 本当にそう思う 機体の力に頼るジャップ アーマードコアもロボット エヴァとかも ジャップが好きになるものはわかる
そういや、PS VITAってC#なんだよな。
PlayStation Suite SDKだけじゃなくて?
243 :
デフォルトの名無しさん :2011/11/28(月) 00:33:33.24
な ん で P C で プ ロ グ ラ ミ ン グ し て る の に P C ゲ ー ム の 話 題 に ふ れ な い の か ? ? ? な ん で 家 庭 用 ゲ ー ム 機 ?
244 :
デフォルトの名無しさん :2011/11/28(月) 00:35:35.32
怒 ら せ な い で く れ
よくわからんけど、スレタイ嫁。
scipy弄りだして、octaveもRも触りたく無くなったわ 言語に対する情熱なんて持たずに、ただ単に使い勝手の良い糊として 使いたいだけの人にはpythonが唯一の選択肢。 ウェブ系?何それオイシイの?てか、ちょっと前の関数型ブームって何だったんだろう node.jsもhaskellみたいに、ちょっと騒がれて消えるような運命を辿るのかな
Pythonはブロックがインデントじゃなけりゃなー 非常に惜しい言語
インデントでのブロックは割と慣れだ どちらかと言えば問題は self.__ が長過ぎることかと 一行にフィールドがいくつも現れる場合に、書きにくいのは当然ながら、読みにくい…
with(self) とかあったら便利なのにな
>>250 いや、素直にprivateフィールドをサポートすればいいと思うよ…
self自体は名前変えられるけど、アンダーバー2つがウザいからな
名前を被らないようにしようとしてること自体、なんかとってもカッコ悪い あんまり使わないからいいか、と思ったのかもしれないが、残念ながら巷では多用されまくってるな
Rubyの悪口はそこまでだ
sl4aでは、Beanshell/Lua/Perl/PHP/Rhino/JRuby/Shell/Pythonが選べますが、 情報量で選ぶとpythonになりますかねえ
PHPって解説書読んだくらいしか知らんけどなんか変数とか宣言もなくいきなり出てこない?あとなんか連想配列の=>がなんじゃこりゃって感じた。使ってない言語見たらどれもそんな感想なのかね。
クイズ 私は誰でしょう?のコーナーです。
今日の問題は、
>>255 がなに言語プログラマか?です。
その理由も一緒にお応え下さい。
PHP->JavaScript->Java->C#->C->JavaScript->PHP って感じで触ってきたけどJavaScriptにどっぷりだったせいもあって PHPめんどくさい事多すぎ Javaとかもっとめんどくさいけどw
大して使っていない学生か趣味でやってるひとだな。 Java、C#、Cのほうが遙かに面倒だろ。
>>256 何言語プログラマーもなにも俺初心者だしなぁ。覚えた言語はマークアップ言語以外ではまだ一つだけだ。
>>258 確かに面倒だけどまだJavaとかC#とかの方が書きやすいよ
Cに関してはただただ面倒くさい言語
PHPは書くには楽な部類だけど微妙だわ
組込みやら下回りには神言語だけどなC
もう組み込みはC++に移行している
マヂで組み込みでc++つかうの? かえってバグ作り込みそうだしメリット不明で、にわかには信じ難いんだけれども
楽な方で作ってみて問題出たらC言語やアセンブラに手を出せば良い。 昔のファミコンはアセンブラしかなくて不便だった。
>>264 それはC++に移行したとはいえないし
部分的に移行したともいえない
なぜなら移行する範囲について何も言っていないから
俺の周りはCが多いな 組み込みでもアプリ寄りなのは C++使ってるとこもあるみたいだが
STLなどブラックボックスに近いライブラリを組み込まず、C++基本文法を使っている限りではC言語と性能差は出てこないだろ。 クラスなどは開発効率を上げるという点で使える。
面倒かそうでないかって、開発環境の影響が大きいだろ。 Javaなんて、開発環境側で、例外処理の自動生成(空の)が出来るし、 変数名やクラス名が気に入らなければ、リファクタ>名前の変更で、 プロジェクト内のすべての出現箇所を変更してくれる。 この変数・メソッドはどこで使われいるのだろうかと、調べたくなったら、 呼び出し階層を開くで、プロジェクト内のすべての使用箇所を表示してくれる。
ループよりコールバックが良いという奴が関数名をリファクタリング 関数ポインタよりtypedefが良いという奴が型名をリファクタリング lambdaよりclassが hashよりclassが このパターンに付き合わされるのが面倒
組み込みだとC++というより、betterCなんじゃね? STLゴリゴリ使うワケにもいかんだろうし、かと言って今更純Cには戻れんという感じの
>>267 new / delete は基本文法な訳だが?
new / deleteは不味いのか? 環境によったら動的確保がやばいのかもしれないが。
つ placement new
newやdeleteが演算子である利点って何か、知ってる人がいたら教えて下さい。 たんにメソッドでいいと思うんだけど。
newがメソッドだとして 1.そのメソッドはなにを返すのか? 2.コンストラクタ名は何になるのか? 3.コンストラクタではなにを返すのか?
>>270 C++がbetterとも言えないからCが多い
new/deleteとかvirtualとか要らね
mallocなんて必要ねえ
起動したプログラムは二度と止まらないとか普通だし
コーラ缶グラスがもらえると聞いて
>>245 それぞれの言語で書いたバトルアルゴリズムを闘わせろって意味ですね
>バトルアルゴリズムを闘わせろ やってみたいけど言語関係なくアルゴリズム勝負のような気が
デュエル! まずは俺のターン、ドロー! eaxレジスタにゼロをセットし、リターン!
馬鹿には無理
昔は相手プログラムの領域を破壊しあう対戦ゲーム(?)があったとか 聞いたことがあるような
話がちょっとそれるけれど、 doom のクローンで敵を倒すと対応するプロセスが kill されるのがあったはず。
core warsだな アセンブラで書いて壊し合いする奴は
>>275 >newがメソッドだとして
>1.そのメソッドはなにを返すのか?
レシーバであるクラスのインスタンスオブジェクト
>2.コンストラクタ名は何になるのか?
initializeでも__init__でもお好きなように
>3.コンストラクタではなにを返すのか?
何も返さなくてOK
で、newやdeleteが演算子である利点って何?
たんに建前で組み込み関数ないからだろ
>>286 たぶん流れ的には C++ の話だと思うんだけど…
オブジェクトの生成をメソッドでやる言語って、だいたいクラスそのものを基本的にオブジェクトとして扱う言語だと思う。
だからこそ、クラスに対してメソッド呼び出しをする、って形が自然になる。
でも C++ とかって、クラスは「型」であってオブジェクトではないという考え方じゃないか?
オブジェクトではないものに、メソッド呼び出しはヘンだということじゃないかなあと思う。
まあ、JavaScript みたくオブジェクトであるハズのものに new 演算子を付ける言語とか
Delphi みたく、型なのにメソッド呼び出しみたいな書式でインスタンス生成する言語もあるにはあるけどさ。
>>288 なるほど。でもC++にもクラスメソッドってあるんじゃないの?
あー…そこは、C++にゃ基底クラスがないから、ぐらいでいいのかな でもそうすると、Javaはどうなんだよって話に…確かにわかんないやw
基底クラスじゃないマチガエタ すべてのルートとなるクラスね 親クラスないのに、作ってもいないクラスメソッドがあるのはなんでだよって話になるってことね でも結局Javaの説明がつかないので投げた
もしJavaのObjectクラスにnewメソッドがあったら 引数と戻り値の型が書けないから、Dartみたいに笑いものにされて終わっていた
>>286 クラスにnewメソッドがあるがこのメソッドは
特殊なメソッドで通常のメソッドとは全く違う。
っていうのなら、メソッドにしないほうがいいと思うんだが。
そのほうが綺麗でしょ。
Perlのnewは通常のメソッドと全く同じだよ。
そのせいでblessで値を返すみたいな面倒なコードを
量産しなければならなくなったけど。
JSのnewは不要だったよな。混乱の元じゃん。
それはJavaScriptの文法に限って言えばnewが不必要ってだけだな。
JavaScriptそこそこ覚えた後にPHP勉強中なんだが新たにrubyに興味湧いたんだ。んで聞きたいんだが もしruby覚えたらPHP使う機会なくなるかな?適材適所って感じで使い分けられるならrubyもやりて〜んだが。
>>293 >クラスにnewメソッドがあるがこのメソッドは
>特殊なメソッドで通常のメソッドとは全く違う。
どう違うの?
>っていうのなら、メソッドにしないほうがいいと思うんだが。
>そのほうが綺麗でしょ。
ぜんぜん。なんできれいだと思うの?
>Perlのnewは通常のメソッドと全く同じだよ。
>そのせいでblessで値を返すみたいな面倒なコードを
>量産しなければならなくなったけど。
それはPerlの設計がクソなだけ。話がそれてる。Pythonを見ればいい。
なんでみんなケンカするの? 一つのLLしか使わないの? みんな色々使って仲良くしようよ。
喧嘩するのがこのスレの趣旨です
>>296 出力がHTMLならPHP、プレーンテキストならRuby
利用者が使うのがブラウザならPHP、コマンドラインならRuby
出力がHTMLならnodejsでJavaScript、プレーンテキストならnodejsでJavaScript 利用者が使うのがブラウザならnodejsでJavaScript、コマンドラインならnodejsでJavaScript JavaScriptだけでいいな
296です。聞いておいて遅くなってごめん。
>>301 ブレーンテキストが初耳なぐらい素人なんで難しいんですがphpも使い分けで選択する余地有りってことですよね。
>>302 JavaScriptを勉強するのが結構楽しいのでサーバーサイドも気になるのですがレンタルサーバーで使えるとこ少なくないですか?
>>303 PHPを使うフリーソフト?というのがよくわからないのですがエディタでPHPを書くだけでは出来ないような機能を拡張したようなフリーソフトということでしょうか?
ブレーンじゃなくてプレーンか。
PHPでwindowsとかで動くexeが作れるよって事でしょ。 まぁ昔からそれ系のライブラリはあったが。 nodejsとかは無料で使えるサーバもある。
>>306 PHP勉強しつつもPHPでそうゆうことが出来るとは思ってなかったです。
node.js無料サーバーで使えるとか俄然興味でてきたなぁ。
>>296 Web系はJavaがいいなー
PHPは触りたくない。
そういう意味ではRubyがおすすめ。
ま、実際世の中 C/C++ , JAVA , PHP , JavaScript , HTML で回ってるから。
漏れもPHPにはかかわりたくないな っていうかexe作るんだったらPHPじゃなくても出来るのに わざわざPHP使いたいっていうのが笑える webやるならpython快適だよ
>>308 Javaって企業で使うイメージなんだけど趣味で使うにも覚える価値ありかな?Androidアプリも完全にJavaというわけでもないとか聞いたんだが。
でもLLしか学んでない俺には難しそうだ。
高校時代に授業で学んだはずのC言語は1%も覚えてないし。
iphone、androidアプリもJavaScriptで出来るしJavaScript最強でよくないか
全部覚えりゃいんじゃね 言語なんて10位使えるのは普通だが
>>286 >
>>275 > >newがメソッドだとして
> >1.そのメソッドはなにを返すのか?
> レシーバであるクラスのインスタンスオブジェクト
>
> >2.コンストラクタ名は何になるのか?
> initializeでも__init__でもお好きなように
>
> >3.コンストラクタではなにを返すのか?
> 何も返さなくてOK
>
> で、newやdeleteが演算子である利点って何?
>
newが演算子である利点って別にないよね。
PerlやJSの場合、任意のメソッドでハッシュリファレンス返したり、オブジェクトリテラル返したりしてインスタンス作るわけだけど、それで不便があるかって言ったら別にない。
>>315 newメソッドが通常のメソッドと性質が違う
特殊メソッドという扱いにすればそうかもね。
でも特殊メソッドという例外的な仕様を作るのなら
new演算子のほうがいいでしょ。
317 :
デフォルトの名無しさん :2011/12/08(木) 21:17:33.59
「Perlで有名な小飼弾に暴言を吐いたキチガイw OSSコミュニティから物凄いパッシングw」
http://blog.livedoor.jp/dankogai/archives/51733482.html 北畠徹也氏が代表の「テラ・インターナショナル」がPerlを勝手に商標登録
>>この北畠って人は、ツイッターとかでも自殺するって言って話題になったり
よく分からないNPOか何かに募金をしてくれってメールを数万人規模のMLに流したり
それらは実はチョットした技術的ミスだって釈明してたりする人らしいね
Tetsuya_K 北畠徹也
@dankogai の家に電話したら、「小飼弾は死にました」らしい。ざまみろ。ざまみろ。というか、死んだ方が社会にとって幸せ。以上。# どうでもいいが、jcode.plなんて簡単につくれるじゃろ。あんなので調子に乗るアホもどうかしてるぜ。
Tetsuya_K 北畠徹也
I compared my @klout with @dankogai, how does your @klout compare? klout.com/user/dankogai/… @Tetsuya_K に比べたら全く大したことねーな。大口叩く愚か者が。
コメントの一覧
「みんなおもしろいおもしろいいってるけど北畠さん完全にかわいそうな精神病の患者ですよね」
「コメント欄が病的で怖い。人格が分裂してる?」
「本当に何がしたかったんだろう・・・」
「無事取り消されたそうで。本当によかった。」
>>316 だからどう違うのかを聞いているのに、まともに答えてないじゃん。
「newは特殊」という馬鹿りで、どう特殊なのかまるで説明されてない。
Rubyだけでも勉強したら?
まだこのキチガイ生きてたのか apacheコミュでも散々暴れてたのに
>>319 どうちがうのかって実際い書いてみれば分かるでしょ?
newはインスタンスを返すメソッドだよね?
擬似言語で書くけど、
function new() {
return ○ ← これはどうやって生成するのか? new Class()とでもするかい?
}
うわ、すげえアホ
反論しなよw
うわ、(こんな簡単なこと気が付かなかった俺)すげえアホ
new OrenoClass() より、OrenoClass.new() のほうが、 開発環境の入力補完機能で、 n を打った時点で補完してくれそうな気がする。
3文字くらい書こうよ
別にnewじゃなくてもできるんだけど blessすれば アホかよ 予約語じゃないしnewは
ほらな。newをメソッドにするとblessなんてものが出来る。 こんなの他の言語にはないよ。特殊な仕様だ。 大体newの実装をいちいち書かないといけないのがめんどくさい。 それを省くためのモジュールもあるけど、 それを使うとnewは特別扱いされることになる。 newをメソッドにしたために 別の複雑なルールができあがっていく。 しかもそのルールを破ることも可能。 違うルールのものを混ぜるのが難しくなっていく。 このように特殊なメソッドになっていくわけさ。
アホやなあ
>>328 他の言語に無いとか特殊とか言われても
SmalltalkとかEiffelとかSatherとかPerlとかRubyとかPythonとかは
インスタンス生成にnew演算子とか使わないのだが……
つうかC++の系統のOOPLしか知らない?
> 大体newの実装をいちいち書かないといけない
んなこたあない
これ以上面白おかしいことを言う前に、ひとつメタクラスのことでも
勉強したらどうだろう
それで? ちゃんと説明したら?
new演算子の実装見てから来い
>>328 バカもいいかげんにしろ。
blessが必要なのはPerlというクソ言語だけ。RubyもPythonも、blessを必要としない。
newがメソッドにできない理由なんてない。できないとしたら328のような無知が原因。
誰もnewをメソッドにできないとは言ってないよ。 ただし他のメソッドと違う特性を持った 特殊なメソッドになる。 違うものは違う書き方にしたほうがわかりやすい。 そういう話。
オブジェクトはインスタンス生成するまでは作られていないのだから 当然だがインスタンス生成はオブジェクトではなくクラスへのメッセージになる (クラスベースのOOPの場合は) よってそれはインスタンスメソッドではなくクラスメソッドであるか メタクラスのインスタンスメソッドであるということになる Smalltalk系ではnewメッセージはメタクラスが実装しているはず Pythonも似たようなもんで、関数コールと同じインタフェースになるが typeというメタクラスがinstantiationを行う こういう共通なものはいちいちユーザが記述する必要がない 実際に必要なのはクラス毎の初期化処理なので、普通は「コンストラクタ」に記述する メタクラスがインスタンスをこしらえたあとで、そいつを呼んでくれるわけだ というような話は誰かさん以外は分かってるような話だから いちいち誰も説明したがらないんだろ
なおメタクラスとはクラスのクラスだ 誰かさん以外には言うまでもないことだと思うが
>>334 だからどう特殊なのかを聞いてるんでしょ。日本語わかってる?
blessはPerl固有の事情なんで、それをもって特殊とかいうのはおかしい。
RubyもPythonも、コンストラクタは特殊でもなんでもない、ただのメソッド。
で、なにがどう特殊なの?
端的に言えばmallocして初期化呼ぶだけだからな 特殊でもなんでもない
>>337 Rubyで言えば、fooを呼び出したら、、
クラスに定義したfooが呼び出される。
そしてfooでreturnしたのがfooの戻り値だ。
fooじゃなくて○○○というメソッドという形に一般化しよう。
○○○を呼び出したら、クラスに定義した○○○が呼び出される。
これがメソッドだ。
しかしnewはクラスに定義したnewが呼び出されるわけじゃない。
そしてreturnを書いてないのに、newから戻り値が返ってきている。
このようにnewは特殊なものだ
>>339 ここまで理解力がないのもいっそ素晴らしいな……
クラスFooのインスタンスfooがあるときに
foo.bar()と書くとfooのクラスであるFooに定義されてあるbar()というメソッドが
呼ばれるという話だろ
Rubyのようにメタクラスという概念がある言語では、
クラスもまたインスタンスであって、クラスのクラスはメタクラスとよばれ、
FooはメタクラスClassのインスタンスだ
Foo.new()と書くと、FooのクラスであるClassに定義されてあるnew()という
メソッドが呼ばれるわけだ
ルールはfoo.bar()の場合となにも変わらないことがわかるだろう
ちっとも特殊ではない
普通なんの脈絡もなく突然blessを使うだろ? #!/usr/local/bin/perl my $x = bless {}; # ブレス! ref $x; # メインが〜 メインが〜
newが演算子だろうがメソッドだろうがどちらでもいいな 面倒じゃない記述で明示的にインスタンス生成できるのならば、些末な文法の違いなんてどうでもいい
ドカタにはメタクラスが理解出来ないってことが分かった
>>340 つまり、メタクラスという特殊なものと。
いや全然 役割の名前がないと他人に説明するときにえらい不便なのでメタクラスと呼ぶ人がいるというだけ Rubyに至ってはClassクラスのインスタンスをクラス名と同じ名前の定数に代入して「クラスのように見える」ようにしてるだけに過ぎない String = Class.new class String def sub; ... end ... end 実際には速度の関係で定義をCで書いているが
「全てがオブジェクト」なら「クラスもオブジェクト」なのは必然 オブジェクトなんだから、クラスというオブジェクトにもクラスがあるというだけの話 何も特殊な話ではない Smalltalkほど純粋なOOPLではないJavaにだってClassというクラスがあって ClassにはnewInstance()というメソッドがあるだろ 普通はnew演算子を使うが
347 :
デフォルトの名無しさん :2011/12/09(金) 10:16:35.22
Ruby では ary.map {|x| x**2} となるものが、Python では map(lambda x: x**2, ary) となり、lambda の本体が1つの式では表現しきれなくなると def mapper(x): ..... map(mapper, ary) と書き換える必要があります。
348 :
デフォルトの名無しさん :2011/12/09(金) 10:24:20.94
Pythonのlambdaを用いた階乗計算 f = lambda x:(x and f(x-1)*x)or 1 RubyにはPythonのように「lambda本体は式でなければならない」という限定がありませんから、 andやorを使った不自然な記述をしなくても f = lambda{|x|if x == 0 then 1 else x*f.call(x-1) end} または f = lambda{|x|x == 0 ? 1 : x*f.call(x-1)} と書けます。lambda内でreturnが使えますから、書きたければ f = lambda{|x|if x == 0 then return 1 else return x*f.call(x-1) end} でもOKです。
いまどきのPythonのlambdaを用いた階乗計算 f = lambda x: f(x-1)*x if x else 1 なわけですが
350 :
デフォルトの名無しさん :2011/12/09(金) 11:12:13.28
要素に対する関数の適用と、抽出を組み合わせる場合 Python print [x*2+100 for x in [1,2,3,4,5] if x > 2 and x < 5] 暗号のように見える。 Ruby puts [1,2,3,4,5].select{|i| i > 2 and i < 5}.map{|i| i*2+100} 思考の流れと、コードの流れが一致しているので書きやすい。
だれだPythonなら書き方はひとつとか言ってるのは map(lambda x: x*2+100, filter(lambda x: x > 2 and x < 5, [1,2,3,4,5]))
>>348 >lambda内でreturnが使えますから、書きたければ
>f = lambda{|x|if x == 0 then return 1 else return x*f.call(x-1) end}
>でもOKです。
Rubyの場合、(Pythonと違って <== ココ重要!!) if/caseといった条件分岐は
(文ではなく)式だから、return文は無くてもいいし、その方が簡潔になると思う
f = lambda { |x| if x == 0 then 1 else x * f.call(x - 1) end }
>>350 >puts [1,2,3,4,5].select{|i| i > 2 and i < 5}.map{|i| i*2+100}
とても理解しやすい比較例だね
Rubyの場合には、左から右へと無名関数がデータフローあるいは
パイプラインのように並ぶから、コードが読みやすい
関数型プログラミングに不慣れな初心者でも、参照透明性のあるコードが自然に書ける
プログラマにとって優しい or プログラミングの楽しさを教えてくれるのがRuby
それと比較すると、Pythonのコードは、関数型プログラミングというものが
いかに高度で難解なものであるかという事をもったいぶってプログラマに押し付ける
もしもPythonしか知らないプログラマであれば、関数型 = 難解 という印象を持つだろう
pythonて可読性が高いのをうたってる割にはそこいまいちだよね
>>353 map/filterはfor/ifと同じだと言っているだけだから、難解という印象は持たない。
それに、イテレータを難解だと思わせていたのは関数型だけではなくて、
イテレータやコールバックをパラダイムを覆す概念として印象付けたのはむしろOOPだ。
>>348 >RubyにはPythonのように「lambda本体は式でなければならない」という限定がありませんから、
これも関数型プログラミングを実践する上で、Pythonには無くてRubyにはある重要なポイントだね
階乗計算くらいだと単純すぎて、ナゼ重要なのかが分かりづらいと思うのでコードで示す
result_list = source_list.map { |elem|
x = foo(elem.x) # ここが局所宣言を書く部分
y = bar(elem.y) # ここも局所宣言の続き
x + y # 最後に評価された式の値が、無名関数のリターン値になる
}
Rubyでは、map等に与える無名関数の中で局所的な環境(クロージャ)が作られるから、
x = foo(...) のような代入文がいくつでも(= 複雑な処理でも)書ける
このポイントは、実用的なプログラムを関数型風で書こうとした時に、威力を発揮する
余計分かりづらくなった
リスト内包表記が暗号みたいと言ってる奴は 高卒ドカタなんだろうなぁと可哀想になる 大学で数学に触れる機会があれば 集合の表記に似せてることが分かるから
>>355 >map/filterはfor/ifと同じだと言っているだけだから、難解という印象は持たない。
関数型プログラミングに慣れた、あるいは得意な人であれば、そういった印象なんだろね
でも残念ながら
>>353 で指摘したのは、これから関数型プログラミングを学ぼうとする初心者、
あるいはそんな初心者へ教える立場から見た、優しさ or 分かりやすさなんだ
たとえば「あるリストからある条件で抽出してそれを変換する」処理は、絵で書くと以下のようになる
[ 入力リスト ] ---> ( 抽出処理: select ) ---> ( 変換処理: map ) ---> [ 出力リスト]
これをRubyで書いたのが、(
>>350 から引用)
puts [1, 2, 3, 4, 5].select { |i| i > 2 and i < 5 }.map { |i| i * 2 + 100 }
であり、同じ処理をPythonで書くと、なぜか
print [x * 2 + 100 for x in [1, 2, 3, 4, 5] if x > 2 and x < 5]
になってしまう
どちらが「初心者にとって」理解が容易なコードであるかは、客観的に見て一目瞭然じゃないのかな?
Rubyだと直感的に書けるコードも [1,4,3,2].sort.reverse.map{|x| x.to_s}.join('-') Pythonだと読みにくいです。 '-'.join(map(str, reversed(sorted([1,4,3,2]))))
>>360 Pythonでは思考の流れと一致しないばかりか、「カッコだらけ」のコードになると.....
>>359 抽出処理・変換処理は分かりやすくないだろ。
名詞を並べているだけで、説明になっていない。
それを「絵」だといってごまかしている。
Ruby [1,2,3].product([0,1,2,3]).select {|i,j| i * j > 2 and i * j < 5}.map {|i,j| i * j} Python [ x * y for x in [1,2,3] for y in [0,1,2,3] if 2 < x * y < 5]
カッコだらけのコードを分かりやすくする基本的な方法は静的単一代入じゃないか Rubyのやり方は基本ではなく玄人のやり方だろ
メソッドチェインでコレクションを操作できるのって次期Javaでも入るっぽいね
>>353 >1に挙がってるスクリプト言語では、関数プログラミングに近い表記が出来るってだけで
参照透明性はないんじゃない。例えば、階乗計算の例に挙がってるコードの再帰のfはグローバル変数参照。
> パイプラインのように並ぶから、コードが読みやすい
別の視点も提供してみる
* リスト内包表記では、行頭だけ見れば何の型のリストか分かる。
* パイプラインのように並べて書くと、行末まで読まないと何のリストかわからない。
どちらが読みやすいかって主観的な意見は人それぞれ、
日本語と英語どちらが読みやすいかみたいに意見分かれそうだけど。
プログラムのコードを読むにあたっては、自分にとっては前者の方が都合が良いです。
後、比較の為に合わせてるのかもしれないけど、
>>350 x > 2 and x < 5 は、Pythonでは 2 < x < 5 って書きます。
----
集合って高校で習ったような気がする・・・というのはさておき、
リスト内包表記は SQL をイメージすると覚えやすいよ。
Rubyをやってると、普通はメソッドチェインのほうが読み書きしやすいかな
左から右に目を動かせばいいから
ただし二つ以上の要素でリストを生成するような場合は
リスト内包のほうが書きやすい気がする
つまり
>>363 みたいにproductを使わざるをえないようなケース
>どちらが読みやすいかって主観的な意見は人それぞれ そうかもね、なのでメソッドチェイン方式も内包表記もどっちも持ってる言語が最強だわな
>>368 >メソッドチェイン方式も内包表記も
LINQ
でも、メソッドチェインなんかは構文糖衣でなんとかなりそうな範囲。
print I([1,2,3,4,5]).select(lambda x: 2<x<5).collect(lambda x: x*2+100).to_list()
http://codepad.org/fTb7LwTm
>>369 これ似たようなこと誰でも思いつくみたいだなw
俺もまったく同じようなものを書いたことがあるよ……が、実際に使うかと言えば
使わない
PythonとRubyのどちらを学ぼうか迷っています それぞれの言語に愛着のある方もいるでしょうから偏った意見もあると思いますが そういうのも含めて色々な意見を聞いてみてどちらから学ぶか決めたいと思っています 皆さんはどちらが良いと思いますか
372 :
369 :2011/12/09(金) 16:21:03.82
>>370 同じく、全く使わない。
簡単に同様の機能を実装できるので、言語でわざわざサポートするまでもない例ってことで。
それに、Pythonでは組み込みの型でメソッドチェインはやって欲しくないな
listにmap,filterメソッドができたとしても、
似たようなコレクションtuple,deque,array,queue等にも同じメソッドが必要になってくるし。
シーケンスプロトコルの利点が活かせない。
>>367 rubyはブロック変数が右側にあるから、
メソッドチェインのみで完結するなら、確かに左から右の方が自然な流れですね。
Pythonでは、 for x in ... と変数が左側に来るのでデータの流れは右から左
変数への代入は右から左 x = arg
関数の評価順も右から左 outer(center(inter( arg )))
慣れてる言語の方が読みやすいのは当然だけど、
こういう所も、それぞれの言語においての読みやすさに影響する。
Pythonの書きにくさ、多分カーソルを戻さないといけない煩わしさだと思うけど、
対応する括弧のハイライト、括弧単位でのカーソル移動や、閉じ括弧を自動で入れてくれる機能を持つ
プログラマ向けのエディタを使おう。この点は、エディタの習熟度で印象がかわってきそう。
メソッドチェイン方式だとやっぱ無名関数の書きやすさに影響されるな キーワードが必要かとか値返すのに明示的にreturn書かなきゃダメかとか きょうびjavascriptの配列にもmapやらfilterとかあるけどfunctionとかreturn書かなきゃいけないのめんどい罠
そこで coffee script。 (x * 2 + 100 for x in [1,2,3,4,5] when 5 > x > 2) [1,2,3,4,5].filter((x) -> 5 > x > 2 ).map((x) -> x * 2 + 100)
Pythonは「何かを便利に書くためのしわ寄せ」をはっきり寄せてくる 得意と不得意を言語レベルではっきり主張するのでメリケン好みと言えなくもない Rubyは全方位になんとなく八方美人なので、全体的になんとなく書きやすくてなんとなくキモくて遅い
>>376 それにしても、Erlangの伸びが不気味だね。来年中頃には20位以内に入って
くるのは確実。他の関数型ではF#が目立つくらいのものだが。
Pythonのユーザー調教っぷりは異常 「書きにくいってことはその処理に向いてないってことだから諦めろ」を地で行く
>>358 高卒だけどPythonのリスト内包は解るよ(Haskellのも複雑なのでなければ解るかな)
…逆に、数学の表記にはかなり苦手意識がある(集合もしかり)
数式を見ると「関数型言語とかで書いてくれたほうが解りやすいのに…」って思うw
> >371 Pythonを学んでみて不満があったらRubyでいいと思う
>>372 Rubyは大クラス主義なもんで
eachメソッドで列挙可能なクラスはmapやselectできますな
mapやselectの実装はEnumerableモジュールにあって
eachメソッドさえ持ってればEnumerableモジュールをimportするだけで使えるので
外部のライブラリでも列挙可能なものは、たいていEnumerableモジュールをimportしてますね
Rubyユーザーは列挙可能なものはmapやselectできて当然だろって思ってる気がします
> outer(center(inter( arg ))) これを読みづらいと感じるのは、左から右に流れる 日本語文に慣れているからだと思うが、 もしかしてアラビア語ネイティブな人からすると逆に読みやすいのか?
なるほど、ということは右から左、左から右どっちでも行ける言語が最高ですね F#のパイプライン演算子最高ということで
数学とかで慣れてるし区切りが関数のがわかりやすい
リストの内包表記はシンプルに書けるときは使うけど 基本その場でdefするのがPython風なんだと思う。 名前空間が汚れるとか、そもそも関数名そのものを考えるのがウザい てのもわかるけど書きにくいとは感じない。 むしろ関数名がドキュメントになるし、書き方も統一されるしわかりやすい。 これって調教?
名前は既に知っているものを思い出すためにある。 知らないものの意味を名前から推測できる保証はない。
無名関数が文を使うほど複雑なら名前を付けるのが Python 流と想像。
>>348 これはPythonをdisっているように見せかけてRubyをdisっているのか?
と一瞬思ってしまったw
だってRubyのほうが長くない?CLのfuncallみたいなcall()がちょっとうざいし…
そしてどっちもlambda式の中で束縛変数の名前で再帰可能、と
>>350 これはPythonの内包表記が単に無駄にforループっぽくてあんまり簡潔じゃない
ということだろーな
Haskellの
[ x*2+100 | x <- [1..5], x > 2 && x < 5 ]
だったらどう?
俺はこう書けるのにfilterとmapで書くかと言ったら書かない
Haskellの内包表記は"What"をそのものズバリで書いている
filterとmapのほうがずっと"How"で手続き的だ
そのまま「思考の順序そのままで」「書きやすい」という順序に依存した発想が
手続きよりなんじゃないの
392 :
デフォルトの名無しさん :2011/12/10(土) 15:48:19.75
>>386 数学だったら合成関数で記述するかな
outer(center(inter(x))) = (outer・center・inter)(x)
outer・center・interで考えれば引数を除去できる
つまりポイントフリー
List comprehension ruby vs python [1,2,3,4,5].select(&:even?).map(|x| x*3) That is almost readable code even in English! I would read it as something like this.."From the list 1,2,3,4,5 select even numbers and map it to number times 3". Really nice! This vs the clunkier Python code ... [x*3 for x in [1,2,3,4,5] if x%2 == 0] I mean it both works just that it seems more elegant in ruby.
>>390 >そしてどっちもlambda式の中で束縛変数の名前で再帰可能、と
pythonのそれは自由変数。rubyも同じだったはず。
JSのarguments.calleeみたいに自身を呼び出す機能はないの?
>>394 あーなるほど
関数スコープだから代入文の右辺の時点ですでに名前が可視になっていて
lambda式から見ると、自由変数扱いということかな?
これは見慣れないとびっくり要素かも……
確認した >>> def make(): ... g = lambda x: 1 if x == 0 else x * g(x - 1) ... return g ... >>> fact = make() >>> fact.func_code <code object <lambda> at 0x7ef87698, file "<stdin>", line 2> >>> fact.func_code.co_freevars ('g',)
>>395 pythonはないよ。自身を呼び出す関数は作れるけど、その関数自体が式内では自由変数になる。
ここで必要なのは callee よりも letrec
>>396 関数内だとその通り。モジュールのトップレベルだとグローバル変数参照になる。
399 :
398 :2011/12/10(土) 20:26:29.81
宛先間違えた s/396/397/ でした
トップレベルでもglobal宣言をしないとグローバルにならないんじゃないのか。 それとも、まるでPerlのように古い仕様を残す方針になったのか。
JavaScriptならこんなことも var f = function fact(x) { return x ? x*fact(x-1) : 1 };
>>400 >>398 ではないが、その辺はPythonでは以前からなんもかわってない筈
「古い」というのがどういう意味か分からないが
Pythonの「グローバル」は実際にはモジュール名前空間の中での話なので何も困らない
>>> fact = lambda x: 1 if x == 0 else x * fact(x - 1)
>>> fact.func_code.co_freevars
()
>>> import dis
>>> dis.dis(fact)
1 0 LOAD_FAST 0 (x)
3 LOAD_CONST 0 (0)
6 COMPARE_OP 2 (==)
9 JUMP_IF_FALSE 5 (to 17)
12 POP_TOP
13 LOAD_CONST 1 (1)
16 RETURN_VALUE
17 POP_TOP
18 LOAD_FAST 0 (x)
21 LOAD_GLOBAL 0 (fact) <------ コレ
:
:
<php? echo done; ?>
<?php echo done; ?>
405 :
デフォルトの名無しさん :2011/12/11(日) 21:25:43.18
スクリプト言語でブロックスコープってPerlだけだよな。 Rubyって1.9からブロックスコープになったんだっけ?
ここに来ている人達は、PHP、ECMAScript 以外のLLな言語で、 仕事をしている人達ばかりなの?
perlやtcl/tk,ruby,pythonでのヤツは納品した
俺はRubyで仕事してるよ^^
問題は、Rubyでなにを作っているかということだ。
おれはperlで病的折衷主義なガラクタを出力しているんだぜ
よく言われるのは、Rubyスクリプトのソースを直接納品することは シェスクリプトのソースを直接納品するのと同程度には稀だということ Rubyスクリプトはシェルスクリプトのように普段(使い捨てで)くるくる動いてこそ意味がある 大人数でスキルも目的もバラバラな人間に年単位でプログラム作らせたいなら、そりゃJavaを使えばいいのさ
大人数でスキルも目的もバラバラな人間に年単位でプログラム作る場合 Rubyでは無理ってことかね。そこが重要なんだが。
むしろ、LL のなかでは、Ruby の方が向いているだろ。 Java は徹底しているからな。C# みたいに、検査例外がないなんてことはないし。
他人の書いたRubyのコード読めない
ぼくも
>>413 そもそもRubyはコード書く人=利用者な言語だと思う基本的には
というか、なんか、パッケージに入って店頭で個人向けに売られてるやつとか 制作委員会や予算がついて何人月で作るような業務用のやつとか そういうのしかプログラムと呼ばないような人がいるような気がする ホテルや料亭で作るのも料理だし、定食屋や弁当屋で作るのも料理だし、一般家庭で作るのも料理だぞ
>>418 いるよ
会社に入って正社員としてプログラムを初めて習って業務でしかプログラミングしない人というのは一定数いる
そういう人にとってのプログラムは、会議して予算つけて社員が複数人で何ヶ月も開発してクライアントに納入するものだろう
個人が作って個人が使って個人が出力を受けて個人が利益に与るようなものはプログラムとは呼ばない
たとえそれが会社の社員個人のパソコンの中や社内サーバの中で、データが業務(の補助)に使われていてもね
そういう人は家にパソコンがないとか、家に開発環境が入ってなかったりする
ちょうど、ごつい大工道具や金属加工の旋盤なんかは仕事道具であって、そんなものが家にあるわけがないのと同じような理屈
RoR が流行り出す前に、2年くらいRubyを仕事で使ってたよ。 社内業務向けのアプリだし、GUIじゃないけどね。
>>418 Rubyは家庭料理やね
食うのは自分と家族(同僚)、みたいな
Rubyが実際使われるって、その程度だったんですね
>>422 そうだよ
クライアントがJavaを求めてるならJavaで書けばいいし、
Perlモジュールに便利なのがあるならPerlで書けばいいし、
PHPができる人しか集められなかったならPHPで書けばいいし、
Pythonしか知らない人がうるさくて仕方ないならPythonで書いて黙らせればいい
Javaを使えなかった負け組企業がRuby(正確にはRoR)になだれ込ん(でまた負けた)だだけで、
Rubyユーザーの立ち位置は昔からあんまり変わらない
>Javaを使えなかった負け組企業がRuby(正確にはRoR)になだれ込ん(でまた負けた)だだけで、 あんた、いいこと言うねえ
そもそも、パッケージを売れないから派遣型の企業になったのではないのか
あれ、あんま事情は詳しくないが、RoRはそんなちゃちなものじゃなかっただろ? 昔ちょろっとぐぐってみたとき、IBMのSIerの記事でRoRのことが結構書いてあったような。
Ruby側から見るとRoRはぶっちゃけ別物よ?
RoR側の人はRoRこそRuby的に思ってそうだが
>>422 Programmer's Best Friend が謳い文句だからな
自分が使うツールを作るための言語ってのが本来の立ち位置
>>405 >1にある言語の中では、概ね yes
JavaScript 1.7 では let でブロック・スコープが使える。
が実装されてるのは一部なので、ブラウザの互換を考えるとweb用途では実質使えない。
ruby1.9の変更はブロック・スコープというか、
rubyの機能「ブロック」の引数のスコープだったと思う。
>Javaを使えなかった負け組企業がRuby(正確にはRoR)になだれ込ん(でまた負けた)だだけで、 うへぇ、Java-erが傲慢でプライドが高いのは相変わらずだな。他人を見下しながら生きている。 最近はScala-erも鼻持ちならないけど。
SIとWebを分けて見れない奴がいつまでも騒いでる スクリプト言語系の話題はいつもそう
一番性格がいい言語erはどれですか。 LLじゃなくてもいいです。
Lisp....かな....
Lisperはマジキチしかいないぞ
JavaScripter
Rubyistは攻撃的すぎるし、 PHPerは卑屈すぎるし、 間をとってPythonistaかな。
Rubyist: ネクラ、オタク、キモメン PHPer: 土方、DQN Pythonista: イケメン、リア充
永久凍土
439 :
デフォルトの名無しさん :2011/12/13(火) 23:09:44.31
Lisp見づらいって挫折したくちだけど、ptyhonのインデントでスコープってのに 慣れたら、けっこうLispも見れるじゃんって思うようになってきた。
Lispは括弧でインデントするとかっこよく見える
Rubyistってなんであんな小学校の図書室で毎日読書してそうな いじめられっこネクラチビメガネみたいな色黒とかキモオタ 顔面オジサン、オバサンばっかなの?
レッテル貼り乙
Rubiyst乙
顔面おじさんおばさん、吹いたわ
Javaer: 傲慢でプライド高い、土方 Scalaer: 鼻持ちならない、モヒカン Lisper: マジキチ Rubyist: ネクラ、オタク、キモメン、いじめられっこネクラチビメガネ、色黒、キモオタ、顔面オジサン、オバサン PHPer: 土方、DQN Pythonista: イケメン、リア充、永久凍土
Perler: マニアック 知的 人間的
PHPで(ファイル名は、.phpがつく)echoでhtmlを作成するようにして、ブラウザでみれば、GUIができるよ。 コンボボックス(ドロップダウンリスト)、ボタン、テキストエリア… コマンドプロンプトの黒い画面がいやなひとへ
448 :
デフォルトの名無しさん :2011/12/14(水) 01:59:42.44
>>447 それって実質 GUI 操作をするJavaScriptのコードの方が多くなりそう
プロンプト苦手なら普通にIDE...
というかPHPはサーバあってこそのもんだろ
>>447 はどうやって本体を実行するかまでは考えてないな
グラフィカルユーザーインタフェースというか、グラフィカルアウトプットだねえ ユーザー入力がないならこれでもなんとか、というか別にHTML書き出せば他の言語でも
454 :
デフォルトの名無しさん :2011/12/14(水) 21:36:29.44
一般ユーザー、サンデー・プログラマ、事務職、管理者等に適した習得しやすく使いやすい言語が少なすぎる。 そういう言語は、習得が容易でうろ覚えで適当に書いてもそれなりに動く必要があるが、 そのような言語設計にすると「文法が変」、「最新のパラダイムが導入されておらず時代遅れ」等のナンセンスな指摘をされて普及しない。 こういう話が出るとPython、Ruby、Scheme等をすすめる人がいるが、 プログラミングの専門教育を受けておらず、なおかつ特別にプログラミングの適性があるわけでもない人々が それらの言語を本当に容易に使えると思っているのだろうか? Tclはシェル言語に近い文法であり、オブジェクト指向に過度にこだわらないため プログラミングの専門教育を受けていない人でもアレルギーを起こさず、 覚えるべきことも少なく学習に時間がかからないので、ほぼ条件を満たしているように見える。 だが、現状ではその真価が発揮されていない。 プログラミングを専門としない人々が日常的に使える言語の普及を希求する。
やったこと無いけどSmall Basicとか?
つ【十進BASIC】
一般ユーザ向け言語を作ることは簡単だが、普及させるのはその1万倍難しい 理由は4つ 1. プロが使おうとしないものは普及しにくい 2. かつての8bit機のBASICのように、デフォルトのスクリプト言語にならなければ デスクトップ・ユーザーは使おうとしない 3. かつての8bit機のBASICのように、パソコンに命令して自在に操る喜びを 現在のデスクトップユーザーは知らないし、知ろうともしない 4. たとえごく簡単にでもプログラミングができれば便利であるが、 デスクトップ・ユーザーはそれを知らないし、知ろうともしない
>>454 おそらく期待に沿ったレスではないと思うけど、現実的な解は「プログラミングしない」こと
一般の人々にとって、コンピュータは目的を達成するための道具(手段)にすぎない
だから、そんな彼らへ無理にプログラミング言語を押し付ける必要は無い
過去を振り返るとVisiCalcに始まった表計算ソフトは、
それまでプログラミングが必須だと思われていた複雑な計算処理を、
普通の人でも対話的に組立てることが可能な環境を提供した
繰り返しになるけど、普通の人々はプログラミング言語そのものを欲しているわけではない
率直に言うと、Unix/Linuxの人で小規模なものしか作らないなら シェルスクリプト(awk等を含む)とTcl/Tkだけで済んでしまう。 シェルスクリプトで日常的なことはほとんどできる。 シェルスクリプトが苦手とするGUIはTcl/Tkで補える。 速度が要求されるとか、オブジェクト指向が必要であるとか、 そういう場合は他の言語も勉強しなければならないだろうけど。
>>454 TclはLispのマクロのようなこともできるので
やろうと思えばアレルギーを起こすこともできる
>>454 >>458 ともかぶるが、一般人は簡易な言語は求めていないと思う。むしろ簡易な操作で作業を効率化できる方がおそらく重要。
そうゆう点では、言語仕様はどうあれ、Excel VBA(マクロ記録)はうまくニーズにフィットしてると思う。
Excelのマクロは、Excelをもってないとうごかないでしょ
世の中には、ExcelのファイルをEメール添付でおくりつけられて迷惑するひともいる まず、どうやってExcelをひらくか ひらいてマクロが実行できるのか
>>465 すまん、Excelのことは忘れてくれ。あーゆーマクロ記録のほうが有用では?ということが言いたかっただけだから。
秀丸のKeyマクロみたいな物か?
フローチャートみたいな物でいいだろ あれでも一応brainfuckやunlambdaみたいな完全な言語が作れるぞ
いわゆるビジュアルプログラミング言語は 生産性を改善するという触れ込みでありながら、事実上普及していない 何でかは知らんけど、同じ大きさのモニタに表示できる情報量で テキストに負けちゃうからっていう説を聞いたことがあるような
テキストは文字と文字の間に無駄な隙間がないな Excelもなんか敷き詰められてるし
あれはねえ、ビジュアルオブジェクトの付随テキストで説明なり値なりを書いてる時点で 「これを直接書き下したほうがわかりやすい」と気付いてしまうからだ
Python厨のRubyネガキャンは異常だなwww
http://java-etc.cocolog-nifty.com/blog/2009/09/post-93c8.html Perl、PHP、Ruby、Python はどれも今後の互換性の問題が解決していない。
この中で最もまともなのは、おそらく、Pythonだろう。
言語仕様、使用実績、ドキュメント、ライブラリ、を総合的に見て、
Pythonが最も無難であると判断する。
しかし、残念ながらPythonは3.0で過去との互換性を捨ててしまった。
PHPは有望なのだが、残念ながらver5.3で大幅な仕様追加と変更が発生した。
PHPは来るべきver6に対して現在変化している最中のようである。
Rubyはver1.9で過去との互換性を捨ててしまった。
Rubyは来るべきver2.0に向けて変化の最中である。
また、Rubyは残念ながらサンプルコード、ドキュメントが充実していない。
また、ver1.9での変更によって使用できなくなったツールやフレームワークが多すぎる。
米国でもRubyの人気が落ちているようだが、それは互換性が消滅したことが影響しているだろう。
Perlは一応は安定しているが、来るべきver6.0がリリースされると過去との互換性が無くなることになる。
ただしCPANというライブラリの集合が存在する以上、それらライブラリの流通性によって、互換性維持の圧力がかかり、
結果としてPerl6.0は受け入れられないと予想される。よってPerlは比較的安全な言語である。
しかしながら、その言語仕様は非常に古く問題点が多い。
これら4つの代表的なLL言語を見ると、Pytohnの互換性問題さえ解決するのならば、
Pythonが最高なのだと思われる。
次点でPHPだろう。
しかしいづれの言語であっても、現時点でコードを大量に書いた場合、
将来においてそれらのコードの互換性が維持されている可能性は低いと思われる。
よって私はそれら4つの言語に手を出すのは止めようと思っている。
おそらく、これら4つの言語は情報も豊富でやると面白いと思う。
しかし、今現時点においては、将来的な互換性問題が解決していない。
PHP6は一旦仕切りなおしになったけどな 前PHP6として作ってたのはPHP5.4になったし
>>474 2009年の記事か。
python は後5,6年は2系でいけると思うんで、2系を今からでも大丈夫なような。
5,6年の根拠はないけれど。
perl は来年のクリスマスにはでるかなあ。
Perl,Python,Rubyは過去の資産が多いし、 旧バージョンも当分メンテされるでしょ。 互換性を期待するのならLispが一番じゃないのか。
使ってない人にはそう見える それはたとえばアセンブラ命令のように
Lispは元々複数のデファクトが乱立してて 纏めるために後から規格作ったパターンだから 今もある程度環境差が残ってるんじゃねえかな だいたいそういうのって完全にはまとまらない
> 互換性を期待するのならLispが一番じゃないのか。 そんな使われない言語を出されてもなぁ。
>>478 アセンブリ言語のようにアーキテクチャによって
互換性が左右されるとは知らなかった。なるほど。
おい!ちゃんとRubyistには、頭ヅルハゲチ○ポと顔面日焼けでボロボロ野郎を追加しろよな! Rubyist: ネクラ、オタク、キモメン、いじめられっこネクラチビメガネ、色黒、キモオタ、顔面オジサン、オバサン、頭ヅルハゲチ○ポ、顔面日焼けでボロボロ野郎
>>474 結局何も言ってないに等しい部ログじゃね
484 :
デフォルトの名無しさん :2011/12/17(土) 03:22:54.24
>おそらく、プログラマがメインとして開発をすることが出来る言語は、3つが上限ではないかと思っている。 >メインとして開発をするというのは本格的なアプリケーションを作成するという意味だ。 >ちょっとかじったくらいの意味ではない。 最高に頭悪いなこいつ
いや、3つ程度が限度だろう まさか夏休みの学生のように入門書や文法書読破して「○○言語極めた!」とか言ってるわけではあるまい その言語のトークンを勉強すればいいだけなら、今でも全員アセンブラでプログラミングをしているはずだ
Javaとか.Netみたくライブラリが共通なら 言語なんていくらでも増やせるだろ 意味がないからやらないだけで
487 :
デフォルトの名無しさん :2011/12/17(土) 11:46:08.96
>>485 お前がなぜ、このスレに居るのか理解できない。
スレなんて適当に巡回するもんだろ? 特に理由とかないよ。 お前は理由があって見てるの? 2ちゃんねるごときに
インディーズゲーム会社は凄い 凄すぎる 何であんなに凄いんだろう 凄い 凄いよ!?!?!?!!!!!!!!!!!!!!!!!!!!!!!!! 凄い!!!!!!!!!!!!!!!!!!!!!!!!!!!! とにかく凄い ゲーム会社は凄い 最強 コンピュータ技術者として最強
インディーズゲーム会社はぱねぇ ぱねすぎる 何であんなにぱねぇんだろう ぱねぇ ぱねぇよ!?!?!?!!!!!!!!!!!!!!!!!!!!!!!!! ぱねぇい!!!!!!!!!!!!!!!!!!!!!!!!!!!! とにかくぱねぇ ゲーム会社はぱねぇ 最強 コンピュータ技術者として最強
492 :
デフォルトの名無しさん :2011/12/17(土) 16:48:56.90
ゲーム会社は凄いと思う WEB業界と違って WEB業界ってただユーザーから送られてくる ”数キロバイト”のデータを処理して ブラウザに返して 「WEBサービス!! モバゲー!!」(キリッ!) とか言ってるバカだから アホじゃん 頭おかしいって思われてる ゲーム会社のやつは凄いと思う あんな人間離れした 3Dグラフィック+C++プログラミング+サウンド すべてを束ねるコンピューター技術者最強 最強だよ そうおもわないかい?
うん。ぱねぇよ。
そもそも創作物のレベルが違うだろ。
495 :
デフォルトの名無しさん :2011/12/17(土) 18:13:18.59
だってあいつらC++とかだろ? LLの俺らが勝てっこねーわ
ま、率直に言って、ゲーム系はウェブ系よりずっと高度だと思うよ。
それほどでもない
ウェブってテキスト整形するだけじゃん。
それを言ったら、ゲームは色のついた点を打つだけ。
ブラウザとサーバが共通だから簡単なんだよな サイトごとに専用ブラウザや専用プロトコルを作ればハードルが上がる
ゲーム系はやっぱり高度だよな。 WEBでゲームって言ってもソーシャルゲームとかだし。 格が違うわ。
はっはっは、自分で言って楽しいか?w
何がWEB系か未だに分からん。 例えばストリーミングシステムやオンライン決済システムだと どこまでの範囲がWEB系の仕事になんの?
うぇb系がドカタだとすれば がめ系は一級建築士
創作物の感動が違うな
人文系って人間のことばかり話題にしてよく飽きないよな
【ウェブアプリケーションという不幸 】 現在、多くのプログラマ(素人)が ウェブアプリケーションというものが ベストな正しい方向だと勘違いしている。 ソフトウェアの作るにおいて そのアプリケーションに応じた 状態遷移を実装するというのは 基本中の基本である。 その点においてウエブブラウザという ある状態遷移が実装されているアプリケーションの上に また別のアプリケーションを実装するのは 論外である。 そこまでするなら普通にアプリケーションを実装 してダウンロードして使って もらえばいいのである。 ウェブアプリケーションとは 虚構にしか他ならない。 ウェブアプリケーションを 作ろうとしているあなた。 今すぐ普通のアプリケーション とし設計し始めては いかがだろう。 そうすればきっと後悔しないですむ。
HTMLやHTTPを悪者にはしていない。 TCP/IPができあがり、その応用として、ファイルを送ったりするようになった。 ファイルの中身のテキストにデータ構造をもたせ、それはつまりツリー構造なわけだが その実装としてのハイパーテキスト、つまりHTMLという送る側と送られる側で決め事(プロトコル) をつくり、画像や音楽など表現の幅を広げることは当然の成り行きだっただろう。 そして、その送る側としてのHTMLファイルサーバ、つまりWebサーバ、送られる側としてのプロトコルの解釈・表示系としての ブラウザというアプリケーション。 ここまではいい。 だが、そこから先が素人の発想というか、いそがばまわれを忘れた者の愚かな発想。 つまりブラウザ上で、アプリケーションを動かすという発想なのである。 ブラウザというのは、おくられてきたステートレスな通信内容の一瞬の表示手段でしかない。 つまりアプリケーションのためのひとつのパーツなのである。 Windowsでいえば、コントロールのひとつ。(実際WebBrowserというコントロールがある。)JavaならWebClietnだ(これは、ブラウザではないが。)。 包含関係が逆なのである。 ブラウザ上にアプリケーションを作るのは愚かなブームである。
ソーシャルゲームの開発してるけど技術者の心は満たされない Flashでの淡々とした作業、こんなのでいいのか?と疑問に持つレベル 使い回しのコードをいじって、とりあえず納品 C++で書いてるゲームエンジニアはそりゃレベル高いわな
ゲーム開発に夢見過ぎwww
511 :
デフォルトの名無しさん :2011/12/18(日) 00:14:52.03
>>509 早くゲーム作れ
最強
ゲーム開発者は最強
お前らじゃ絶対に勝てない
これだけは言える
お前らじゃ
絶対に
ゲーム開発者に
勝てない
まあ、ウェブ系と言っても、MySQL作ってるとか、Apache作ってるとか、それなら高度だと思う。それをウェブプログラマーと呼ぶのか知らないけど。
本格的なデータベースを実装できる人を尊敬する ちょっとだけかじったが、あのトランザクション周りの 複雑奇怪なアルゴリズムは何なんだよw
>>513 超同意、あとOSの排他制御関連もすごい
Web系で凄いのはインフラとか。 HTMLとかCSSでドヤ顔してるのは、ね
HTMLはまぁあれとしてCSS3はなかなか面白いよ
>>516 にCSS3だけでドヤ顔できそうなレベルの物を作れる奴居そう
518 :
yuitest :2011/12/19(月) 19:49:14.71
HTML5とか誰でもできると思いますが。
CSS3なんてざらですね、ちなみに私はcjhatというWEBサービスを展開しております。
http://cjhat.net/ 新潟在住です。
私の父はIT企業に勤めております。
519 :
yuitest :2011/12/19(月) 19:50:36.99
520 :
yuitest :2011/12/19(月) 19:59:33.68
生物の進化は、何か vs 何かで、片方がすり減っていくけれど、概念の進化はそうでもないよね。両方が進化していっても、同じ名前で呼ばれる。 Perl6 はもはや全然 Perl じゃないんだけどね。
変なの沸いたなNG追加
ツイートみたけど軽く統合失調症入ってるだろ
>>520 誰も新規がつかないところはPerlだな
R6RSとかPython3とか
タルルート君にじゃばじゃばおって居たよな。
習得した際にできることの多さで言うと python》ruby》PHPでおk?
どの言語を使っても出来ることはほぼ一緒。
PHPは明らかにライブラリが少ないと思う。ウェブ以外には向かない。Perl、Ruby、Pythonならだいたい似たようなものと思う。
何のライブラリが足りない?
pearとcpanとgemsと絶望的な差がある。
phpclassesつーもんがあってだな
>>530 ねらーは基本ズボラだから
無駄な努力はしたくないのさ
糞スレ立てれるかな?
PHPはHTML出力テンプレートであって、汎用プログラミング言語ではない だからこそ強力で手軽なわりに誰でも使えるものになっている
数値シミュレーション(本当はCが推奨なんだろうけど大学のレポート程度の サイズならpythonで間に合う)みたいな使いかしかしないから HTMLなんてコンテンツのインデックスが並んでるやつをちょっと手打ちしたことしかないから どんだけ便利なのか分からんなあ。みんなホームページとか作ってるの?
PHPとHTMLはちょくせつはかんけいない。 ネット機能を多く盛り込んだスクリプト言語。 サーバー無くとも動作する。
>>535 汎用プログラミング言語ではないという根拠は?
PHPのHはHTMLのH
HTML処理が得意な 汎用プログラミング言語ですよね? それで?
プレーンテキストでなく、書式付きのテキストを吐きたいなーってときに便利かも
そういえば、gems, cpan, pear はわかるけど、 Pythonってなんかあるの?
公式でメイン用途がserver-embbedと謳われてる珍しい言語ではある というか、PHPがHTMLテンプレートプロセッサなのは周知のことだと思ったのだが、何が不満なのだろう
>>542 何かあったはず、俺もPython詳しくないから忘れたけど…
ただPython自体の方針が「本体に大量のライブラリを添付する」なワケだから
究極的にはそれも本体に添付すればいいじゃん、みたいになるんじゃねーの
そのHypertextの代表的な規格がHyperTextMarkupLanguage つまりHTMLなんだけどな 無関係とは言えないだろう、どう考えても
ruby覚えたらPython覚えるの簡単かな?
そうだけど、Pythonだけやった方がいいと思う そうすればRubyにイラつくこともないからさ 仏のような心でRubyを見守り続けることができるよ
PHPがHTMLが得意ということは無いだろ。 Python、Rubyなどと同程度の装備だろ。
>>548 俺がそのパターンだけど、確かに大筋は覚えるの早かったかも知れんが細かい点で躓きまくった
Pythonが目当てなら初めからPythonでいいし、Rubyが目当てなら初めからRubyでいい
うん、だからといって PHPが汎用プログラミング言語じゃないとする 理由はないよな?
>>542 pypi
>>545 >Python自体の方針が「本体に大量のライブラリを添付する」なワケだから
Pythonやってるけど、この方針は知らない。PHPではなくて?
>>546 同マニュアルのFAQに”PHP と HTML は深く関係しています。”って書いてるよ。
まぁ、プログラミング言語として独立して使えない事もないって意図だろうけど。
えとさ、Perlが「practical extraction and report language」の略 つまり、実用的なデータ取得レポート作成言語 って知ってる? 汎用プログラミング言語じゃないんだよw
だからPHPがHTMLと深く関係しているからって、 汎用プログラミング言語というのは間違い無いだろ。
PHPはHTMLを扱うのに適している 汎用プログラミング言語ということでいいじゃないか? それじゃなんかダメな理由でもあんのか?
C++言語のスクリプト化がPHPだろ。 Javascriptも似ているがどっちを選ぶかと言ったらPHPだな。
そういや、C++に一番似ているのはPHPかもしれんなw
JavaScriptは汎用でないよ。 これこそブラウザ内で使うのに特化している言語。 ファイルの読み書きとか標準で付いてないだろ。
今時、JavaScriptをブラウザ組み込み言語って認識はないよ。
>>560 バーカ。
元々の話してるんだよ。
Perlはレポート作成言語だし、
PHPはHTML組み込み言語だし
JavaScriptはブラウザ組み込み言語だ
これらは汎用プログラミング言語ではない。
>>561 > これらは汎用プログラミング言語ではない。
元々はなw
今は違う。
>>549 本当にPython信者ってのは、Rubyに敵愾心を持っているんだなw
これがいわゆる「Zopeのトラウマ」って奴?
実態はともかく、PHPもJavaScriptもWeb開発以外で使うっていう認識もやる気もないれす
PHPはかなり便利だが。 C++でできてPHPにできないのは3Dグラフィックくらいでは。
変数から$なくして 型宣言付ければ C++に似ているな
>>553 >Pythonやってるけど、この方針は知らない。PHPではなくて?
電池付属哲学
実際、ElementTreeとか本体に取り込まれてる
>>569 この記事の内容では、速いというのはPHP3と較べてだし、コンパイルされるのは中間コード。
JITコンパイルには触れてない。
PHPのJITコンパイラ「HipHop Virtual Machine」、Facebookがオープンソースで公開
2011年12月12日
Facebookは10日、PHPを高速に実行する仮想マシン「HipHop Virtual Machine」(hhvm)を公開しました。
The HipHop Virtual MachineHipHop Virtual Machineは、PHPを高速に実行するためにPHPのコードをC/C++に変換してg++でコンパイルし、
バイナリコードにするHiphop compiler(hphpc)と、PHPのインタプリタであるHipHop interpreter (hphpi)を組み合わせたもの。
PHPのコードをダイナミックにバイナリコードへと変換することで、高速な実行を目指しています。
コンパイラと同等以上の実行速度へ
HipHopはFacebookが開発し、オープンソースとして公開しています。今回のHipHop Virtual Machineも、これらの開発の延長線上にあるものです。
http://www.publickey1.jp/blog/11/phpjithiphop_virtual_machinefacebook.html
PHP汎用言語なんだから なんでもできるでしょw
PHP は OpenGL の他、SDL、Truevision3D が使える。 SDL はPHPエクステンションがあるし、Truevision3D は COM で扱える。
535 名前:デフォルトの名無しさん[sage] 投稿日:2011/12/25(日) 06:27:33.78 PHPはHTML出力テンプレートであって、汎用プログラミング言語ではない (キリッ)
初歩的なPHPの知識を持っている人なら簡単にWindows用GUIアプリケーションを作ることができるソフトです。
ウィンドウ、ボタン、エディットボックスなどの作成・配置には
プログラムを用いることなくグラフィカルに作成することができます。
統合環境になっていて、ビジュアルの作成だけでなくプログラムの作成、テスト起動、
さらにはコンパイル・ビルドしてEXEを作成することまで可能です。
http://hirata-create.lar.jp/?page=HC-wbRadStudio
>>548 Ruby 覚えてから Java 1.4 程度の言語仕様なら1日で余裕だった。
どの言語でも言語仕様を知るのは大して時間かからないよ。 時間がかかるのは、その言語で一番最適な開発方法。 コードの書き方から使用するライブラリの選定と その使い方とかな。 言語仕様ってのはマニュアル読めば済むが 開発は試行錯誤が必要。
やっぱPHPは楽しいなw エラーログを消すために原因を調べようとエラーログでググったら、 そのエラーログをページ上に出力してしまってるページだけが 腐るほど引っかかるw
それがPHPとどんな関係がるのか
よく使われてるってこと。
メンテナンスされてないサイトが多いんだね
583 :
デフォルトの名無しさん :2011/12/25(日) 19:01:55.71
PHPって、ウェブフレームワークは大量な種類あるけど、全部独自のフルスタックで、横断的に使えるクラスライブラリがないんだよな。 qdmailとか個人的に作ってるライブラリはあるけど各自勝手にに開発されてて、まとまった形になってない。
スクリプト言語でいちばん標準装備が充実してるのがPHPだろ。 本家がもっともPHPに貢献してる。
586 :
デフォルトの名無しさん :2011/12/25(日) 20:05:50.57
pearに登録されてるモジュールとcpanやgemsに登録されてるモジュールを比べて見よう。
バイナリでどの環境でもほぼ動くphp_*.dllをまずは使っていくべき。 テキストのソースコードはやむを得ないとき。
589 :
デフォルトの名無しさん :2011/12/25(日) 20:54:26.35
どの環境でも動くようにピュアPHPのライブラリ使うんじゃん。
590 :
デフォルトの名無しさん :2011/12/25(日) 21:15:19.18
PHPって基本煽られてるけど煽られる欠点を埋めていって いつのまにか非がつけられないような言語になっちゃうんじゃないか
埋める必要のない欠点は埋めなくていいのにな 基本何もしなければ損もしない
>>551 >>549 あーごめん変なこと書いた
もうRubyで半年くらい書いてるんだ。で、Ruby以外の言語も覚えたくてCとかJavascriptとかやったけど
CはめんどくさすぎるしJavascriptはブラウザでやるかWSHしかないし。
で、Rubyの経験がいきるかな?と思ってPythonはどうかな、とおもって書いた
やりたければやればいい わざわざ他人に聞いてどうすんの 馬鹿じゃね
JavascriptならLinuxのコンソールでだって動くじゃないか。 まだまだ経験が足りんな。まあRubyで半年じゃその程度か。
やめといた方がいい きっとRubyが嫌いになる
>>592 まあ、別に覚えて損はないと思うよ
じゃあ、とりあえず同じようにRubyを先に、Pythonをその後に覚えた俺が躓いた部分を教えておく
Pythonでクラス自作するときには、必ず親クラスをobjectと明示しとけ。
暗黙でObjectが親だから明示する必要はないなんて考えを捨てるべし。
言語構造・文法よりも使いやすさ、軽さだな。 特にサーバーで動かすのに、一気に沢山来ても裁けるやつが優れている。
つまりnodeさん最高と
>>596 なんかこのスレ見るまでは、
Pythonってインデントでブロックを表現する変な言語だが、
それ以外は比較的まともな言語ってイメージだったんだけど、
いろいろ問題がありそうだな。
そう思う俺は Java がメイン。
Rubyは5年くらい前に使ってたかなw
600 :
デフォルトの名無しさん :2011/12/26(月) 23:48:25.19
>>597 Twisted on pythonだな
>>599 昔との互換性で残っちゃってる仕様、ってのがあるみたい。
上に挙げたのもその一つで、objectを最終的な基底クラスとしないものは
classic classと呼ばれ、現在の通常のクラスとは様々な場面で似て非なる動作をする。
>>602 知り合いが「なんでreduceが無くなったんだ」とか
いくつか不満を漏らしていた記憶がある
いわゆるPythonらしいアプローチってのは、手続き的でも関数的でもないのかな?
Pythonらしさか…関数的な用語や表記を使うこともあるが 基本的には手続き的だと思うよ 個人的に面白いなと思ったのは forを使ったイテレータの多用と、それがリスト内包にまで絡んでるのと オブジェクトに対する呼び出し操作、の応用範囲が広いことかな 関数オブジェクトに対する呼び出しが関数呼び出しなのは当然だし メソッドが、メソッドオブジェクトとバインドされたフィールドに対する呼び出しなのも JSとかで似たような実装だから分かるが インスタンスの作成がクラスオブジェクトに対する呼び出し操作なのは驚いた
> インスタンスの作成がクラスオブジェクトに対する呼び出し操作なのは驚いた 構文的にはC++と一緒なので特に驚かなかった もっとも中身はメタクラス経由なのでSmalltalk系統だけど > いわゆるPythonらしいアプローチってのは、手続き的でも関数的でもないのかな? ファーストクラスの関数はあるけど、末尾最適化がなくリストが配列なので Pythonで関数型をそのまま真似ても上手くいかない Pythonの方向性はSTL登場以降のC++に一番似ていると思う つまり手続きベースのマルチパラダイムでジェネリック指向
へっ?
いろんなモノが文な言語よりいろんなモノが式な言語のほうがより関数型言語って感じする
Rubyのブロックが便利すぎて、Pythonをやめたくなった。 いちいちtemporaryな関数を作成してから目的の関数に渡していたのがばからしくなった。
リストやジェネレータ式の内包表記が便利過ぎて PythonからRubyには移行できないな
610 :
デフォルトの名無しさん :2011/12/28(水) 11:03:14.91
日本人が開発の中枢にいるような言語はやめとけ。 どうせ廃れる。
Pythonさんは、どうしてこう排他的かなぁ 両方やっても問題ないべ
似たようなの2つもやるより 他のやったほうがいいわ
他のも当然やればいいじゃん 新しい言語を覚えるってのは面白い発見があって楽しいよ
Rubyの用途ってワンライナーとちょっとした処理の小物アプリがメインだと思うけど、 Pythonも同じような感じですか?
>>614 Pythonならそれなりの規模のプログラムも書けるよ
俺はよく5000行ぐらいのクラスを書いてるけど、可読性も高いしバグも少ない
>5000行ぐらいのクラス それは分けろよ…
5000行でそれなりってどんだけ規模小さいんだ
> 俺はよく5000行ぐらいのクラスを書いてるけど、可読性も高いしバグも少ない この一文でどれくらいのプログラマか判断してやれよ そっとしておいてやれよ
>>614 出来なくはないが、ワンライナは向いてるとは言いがたいなぁ。
自分はプロトタイプ作成や、小物ユーティリティ・ツール、アプリ組み込みに使ってます。
>>617 Pythonで *クラスが* 5000行もあるのはそれなりの規模と言えるよ。複数に別けてもいいサイズ・・というか別けた方がいい。
LLでは一般的に、Java等よりも短い行数で書けるし、その中でもPythonは end とか } 要らない分、更に少ない行数で済む。
よく5000行ぐらいのクラスレベルのやつが何言っても説得力無いだろ
クラスを書く
Python2.7.1に含まれる*.pyの総行数は約60万行だが 5000行超えてるのは Lib/decimal.py だけ
>>617 ライブラリだと十分大きいと思うが。
業務アプリしか書かないお前にはわからないんだろうな。
皆それぞれ クラス、ファイル、プロジェクト全体の行数で誤読してる
小さくて速いのがいいのだ
>>609 >リストやジェネレータ式の内包表記が便利過ぎて
おれもそう信じてたけど、Rubyの、メソッド呼び出しを続けて書けるほうが便利だわ。
まるでjQueryみたい。といってもjQueryのほうが後発だけど。
たとえば「xsから0以上のものを選んで、その二乗の和を求める」場合
sum([ x*x for x in xs if x > 0 ])
これだと、後ろから読まないといけないんだよね。でも
xs.select{|x| x > 0}.map{|x| x*x }.sum
これなら頭からひとつずつ読めばいいから、わかりやすいし、考えたとおりに書きやすい。
まさにスクリプトって感じがする。
Ruby にも Python にも yield あるけど意味が全然ちがう?
Rubyのメソッドチェーンって内包表記より弱いと思う ネストするmapとかflattenとかわかりくいよ Python: [[x,y] for x in xs for y in xs] Ruby: xs.map{|x| xs.map{|y| [x,y] } }.flatten(1)
http://toro.2ch.net/test/read.cgi/tech/1249737531/593 [ プログラム ] Rubyについて(アンチ専用) Part004
593 名前:デフォルトの名無しさん [sage]: 2011/12/28(水) 14:05:05.31
本書くのはいいし、寄付をお願いするのもいいんだけど、
○○さんは5万円以上寄付してくれましたって、
具体的な金額が分かるようにするのはなんなの?
寄付金額で順位付けするって失礼だぞ!
そういうの分からないか?お前は?
多くの方は千円以上って、おいおい。
最下位の人は数百円ですって言ってるじゃん。
なんて言うか、今回のは不謹慎ではないけど、非礼だよね。
寄付者を順位付けて公開するのは止めたら?
書籍の執筆料を寄付方式で集めるのはいい方法だと思うけど、
集まった寄付金額について具体的に触れるのは失礼、礼を欠く行為だぞ。
> たのしいなかまがぽぽぽ〜ん君
彼の上司はこういう人間教育をしないのかね?
それか、寄付を集めなくてもいいように給料増やしてやれよwww
寄付者を寄付金額で順位付け
って失礼な行為だと自覚できないかな、ゆとりは
Pythonは sum(x*x for x in xs if x > 0) かな 自分にとっては、逆に、後ろまで読まないと何を返してるかわからないのがデメリット。 後、そのメソッド・チェインでは ブロックが呼び出される回数や selectとmapでそれぞれ一時的に配列を作ってるのが気になる。
>>629 いっぽうメソッドチェーンは
orz.sage().hage().hoge().hige() タイプの問題には向いている
つまり向いている方向がちがう
(まあHaskellなら hige . hoge . hage . sage と書くだけだというのは置いといて)
強い弱いということで言うと、問題を解くのに必要な一番能力が弱い
(限定された)道具を使うという考え方があるようだよ
ベタ再帰は強い(汎用的)、がそれゆえ読むのに注意を必要とする
foldrは再帰よりは弱いが、foldrで表現可能な問題のクラス(原始再帰)はかなり
広いので、mapやfilterで済むならもちろんそのほうが望ましい
ではこの問題は弱いmapやfilterを結合させるほうがいいかというと、
俺はlist comprehensionのほうが集合表記そのもの=whatを表現していて好きだな
Pythonのlist comprehensionのsyntaxはあまり好きではないが
それは大きな問題じゃない
確かにより汎用的な方が読みづらくなるな メソッドチェインでもflatmapなんかは強い方の機能なのでこれが出ると読みづらくなってくる ただ弱い方のメソッドをチェインだけで済むならそっちのが俺は見やすいわ まあC#やscalaみたいに両方持ってて処理によって使い分けられるのが1番いいわ
>>629 それはコーディングスタイルで改善できる
xs.map { |x|
xs.map { |y| [x, y] }
}.flatten(1)
>>626 の例なら、以下のようになる
xs.select { |x|
x > 0
}.map { |x|
x * x
}.sum
先の例のような直積構造はネストとして水平軸に並ぶ
後の例のような合成構造はメソッドチェーンとして垂直軸に並ぶ
同じじゃん
メソッドチェーンで中間オブジェクトを作らないようなコンパイル時最適化ってされる?
>>634 >先の例のような直積構造はネストとして水平軸に並ぶ
>後の例のような合成構造はメソッドチェーンとして垂直軸に並ぶ
なるほど。参考になった。さんくす。
>>632 >いっぽうメソッドチェーンは
>orz.sage().hage().hoge().hige() タイプの問題には向いている
>つまり向いている方向がちがう
>(まあHaskellなら hige . hoge . hage . sage と書くだけだというのは置いといて)
同意だな。Haskellは関数を逆順に並べているのが気になる。思考の順番と一致しないから。慣れかもしれないけど。
>>631 >後、そのメソッド・チェインでは
>ブロックが呼び出される回数や selectとmapでそれぞれ一時的に配列を作ってるのが気になる。
それはたしかにデメリットかもしれないけど、その程度の性能低下を気にするなら、そもそもPythonもRubyも使うべきじゃないでしょ。
なんのためにスクリプト言語を使うのか。それは考えていることをそのまま表現しやすいから。
それを実現してくれるなら、多少の性能低下はちっとも気にしない。
それよりも、少しでも頭で考えていることをそのまま表現できるかどうかを気にする。
つーかあれだな、ちょっとでもPythonを批判しようものなら、
one liner だとつらいな
メソッドチェーンってバグをわかりにくくするだけだと思うなあ。もちろん性能面もあるし。linqとかは良いと思うけど。
内包表記もネストしたらきちんと改行インデントしないと読みづらいよ
同じメソッドチェーンでも、linqなら良いけどrubyなら悪い ..... 一言で言うと「俺はRubyが大嫌いなんだぁーー」ということですな どうやらPython厨にとって、メソッドチェーンは「酸っぱい葡萄」らすい
>>637 > 同意だな。Haskellは関数を逆順に並べているのが気になる。
> 思考の順番と一致しないから。慣れかもしれないけど。
.は数学の関数合成と同じなので……
パイプっぽい順序で書かせる道具としては
HaskellにはArrow, F#にはパイプライン演算子というのがある
それと、F#の関数合成は>>、<<と二種類あって、見た目通りの順序の適用になる (f >> g) x = g(f(x)) (f << g) x = f(g(x)) ということね 定義は自明で単純 let (>>) f g x = g (f x) let (<<) f g x = f (g x) このようなものがほしければ、もちろんF#に限らずOCamlでもHaskellでも作れる 関数合成で記述する利点は、x.f().g()はg(f(x))はxが無いとかけないけど g . fならxを消せて、なおかつ独立した式(関数)になっているというところ つまり後者で書いているほうが一般性が高い (lambda (x) g(f(x))) と書いても同じになるが、g . fに比べて冗長この上ない
LINQは遅延評価されるからな。
そもそも変数名自体が邪魔だと言い放ったPowerShellさんさすがです #テキストファイルを作成日時順に並べてフルパスを列挙 dir | ? Name -match ''\.txt$" | sort CreationTime | % FullName
Pythonのリスト内包表記って、Haskellのリスト内包表記みたいに遅延評価されるん?
リスト内包表記は遅延評価されないけど ジェネレータ式は内包表記で書けてかつ遅延評価される
組み込みのmapとかgrepが駄目って事だろ。LINQならSQLやXMLも同様に扱えるし。VSで補完も聞く。
>>649 Pythonの"リスト内包表記"は遅延評価されない、リストを返す。"ジェネレータ式"が遅延評価版。
Python内では区別あるけど、こういう話の流れだと文脈によっては後者を指すこともある。
Haskellと違うところと言えば、2.x 系では一時変数のスコープの問題あり。(3.x系で改善)
>>651 遅延評価が必須なのは無限を扱うケースだけど、
LLにとって一般的なプログラミングじゃほとんど使われる事は無いのだから
Rubyでオプションパッケージ扱いなのは妥当な判断じゃないかと思う
しかも map を map_lz (あるいは select を selet_lz) へと書き換えるだけという簡潔さがあるし
それに対してPythonの場合には、わざわざジェネレータ式としてロジックを再設計せにゃならんから面倒クセー
あと、そもそもLINQは汎用言語じゃないから、このスレじゃ比較の対象にはならんぜよ
> それに対してPythonの場合には、わざわざジェネレータ式として > ロジックを再設計せにゃならんから面倒クセー これはちょっと言いたいことがよくわからない リスト内包との違いはカッコとして[]を使うか()を使うかだけだよ > あと、そもそもLINQは汎用言語じゃないから、このスレじゃ比較の対象にはならんぜよ これもちょっと言いたいことがよくわからない
>遅延評価が必須なのは無限を扱うケースだけど、 メモリ上に不要な中間オブジェクトを生成したくないってケースもある。 ライフスパンの短いスクリプトでは不要かもしれないけど、 サーバアプリ等では有用だよ。
>>655 >サーバアプリ等では有用だよ。
具体的にどう有用なの?教えてくださーい
>>655 中間オブジェクトというなら
評価が終わるまで破棄できないオブジェクトを早く破棄するために評価を終わらせるべき
だから遅延するべきではない
>>657 遅延評価のようなものが意味をもつのはコレクションの要素サイズやコレクション総サイズが大きい場合だろう
遅延かけてもらったほうが総サイズ的にはマシという場合はままある
増える消費メモリったって数MBなんだからそんなとこ気遣わずにとっとと終わらせろという場合ももちろんあるはず
>>654 >リスト内包との違いはカッコとして[]を使うか()を使うかだけだよ
Rubyの場合は、遅延評価の有無を「メソッド名の違い」として表現できる
だから、その気になればこんなコードも書ける(普通はこんなの書かないけど....)
xs.send(
if lazy then :select_lz else :select end
) { |x| ..... }
それに対して、Pythonは「構文の違い」として表現しなければならない
言語としての表現力/柔軟さの差異は、明白じゃないかな? -- "Simple is Power!!"
(その代わり、Rubyは処理効率を犠牲にしているけどね ....)
>> あと、そもそもLINQは汎用言語じゃないから、このスレじゃ比較の対象にはならんぜよ
>これもちょっと言いたいことがよくわからない
LINQはデータベース検索という用途(ドメイン)に特化した言語機構ではないの?
あと
>>651 のLINQとはPynq(LINQのPython実装)を指していると思うんだけど、
同じオプションパッケージであってもPythonのPynqは良くてRubyのenumerable_lzは悪いのかな?
遅延評価がデフォな言語の立場は、常に遅延評価ならば、そもそもそういう 「場合わけ」を必要としない(この場合はサイズが小さいからどうでもいいけど この場合はサイズがでかくなるかもしれないからストリームにしよう、とか) →コードの汎用性・再利用性が高められてイイ!ということのはず もちろん少なくとも慣れていない人間にとっては動きが理解しにくく スペースリーク等の罠にはまりやすいという欠点ももちろんあるわけだけれども (一見tail callで実装できるので効率がよさそうに見えるfoldlが スペースリークしまくりとか)
> LINQはデータベース検索という用途(ドメイン)に特化した言語機構ではないの? ぜんぜん違います リストとジェネレータ式に関しては、言いたいことは分かった、なるほどね もっともPythonもitertoolsだと同じもののgenerator版を「関数として」提供してる わけだけどね
個人的にはRubyにもリスト内包欲しいなあ flattenだと3重ネストしたリストの最後だけ展開したくない、とかいうときに面倒いし それ以外は右へ右へ書けて凄い楽なだけに
メソッドチェインなんてライブラリの設計次第でどうにでもなる PythonどころかJavaでもできる 内包表記は構文でサポートしないと難しい(マクロがあれば別だが)
>>660 ランダムアクセスするなら配列。
しないならループか関数。
なぜサイズを考える必要があるのか分からない。
>>664 上の話の流れをよんでちょうだい
selectという関数をselect_lzと使い分けるかどうかという話がでてたでしょ
全てが遅延ならそういうものは要りませんよという話
>>661 >ぜんぜん違います
違うと言いたんなら、その違いを説明しておくんなさいまし
>もっともPythonもitertoolsだと同じもののgenerator版を「関数として」提供してるわけだけどね
そのとおり
Pythonでは、わざわざ「関数として」表現しなければならないからダサイけど、
Rubyではメソッド名を hoge から hoge_lz にするだけですむからスマートだよね
関数がメソッドよりダサイってのはどういうセンスだ?
>>666 Linq to Objectでぐぐるといいと思うけど
簡単に言うとSystem.Linqが提供するのはIEnumerableインタフェースに対して
map, filter, foldみたいなリスト処理っぽい関数群で、
それをSQLライクなプチDSLっぽい記法でも書けるようになっている
SQLに似てるけど、こっちの記法は意味的には内包表記に近い
つまり別にDBというドメインに特化された要素じゃないです
DBにも使えるけど
Linqの場合はPLinqというのもあって、要はパラレルmapみたいなのを 発動させることができる .NET5ではasync/awaitのような新たな構文で、容易に非同期処理が記述できるようにも なった コルーチンや継続を用いると状態遷移地獄やコールバック地獄に比べると 通常の手続き型のコード記述と同じようにかけて楽なのを知ってる人は 有難味がすぐわかると思う
コルーチンは完全な手続き型だから なんか江戸時代に戻るみたいな恐怖を感じる人には難しい
.NETは手続き型だからそれでいいのよ 継続モナドとか言っても仕方がない
>>668 ,669
LINQがListやArrayのような一般的なコレクションに対して使えるのは分かるけど、
「LINQ単体では汎用言語としては成立しない」よね?ってことを言いたいんだけど ....
もしも Pynq というPythonのオプションライブラリを指しているのなら、Pynqと書いて欲しい
あと、PynqはActiveRecordモドキだね
以下はPynqのサイトにあった例だけど、
filtered_collection = From(some_collection).where("item.property > 10").select_many()
コード中にSQL文を文字列として埋め込むのと比較すればズッと楽チンだと思うけど、
現実としてPynqをListやArrayに使う気にはならないね
ナゼ文字列で抽出条件("item.property > 10")を書かにゃならんの?ダサイよ
もしもPynqをimportするだけで
filtered_collection = [item for item some_collection if item.property > 10]
みたいなコードが書けたんなら、
「Pythonスゲー、しかもLINQはDBに特化していないゼ」と認めるんだけどなぁ ....
>>672 のtypoを訂正("in" が抜けていた)
X: filtered_collection = [item for item some_collection if item.property > 10]
O: filtered_collection = [item for item in some_collection if item.property > 10]
>>672 俺はLinqに関してはPythonの話はぜんぜんしてないぞ
何を言いたいのかよくわからん
>>674 Linqの話をしたいだけなら、スレ違いだろ
スレタイ嫁
PLinqをPynqと空目したんじゃね?
メソッドチェーンで形勢が不利なので、Python信者が必死に話題を逸らしていると思われ
>>676 Linqの話を持ち出したのは俺じゃねーよwww
>>632 ぐらいから徐々に話が広がってきて
>>640 あたりで出てきた話
> LINQはデータベース検索という用途(ドメイン)に特化した言語機構ではないの?
こういう誤解に基づいて意味不明なこと書いてるからつっこんだだけだっつーの
メソッドチェーンが関数型の方法に比べて特に優れている点があるようには思えないが パイプ順に書きたければ書けるし
流れに即して言うなら、Linqはメソッドチェーン風にも内包表記風にも書けるから あの流れで出てきたんじゃないかと想像するがなんともいえん
>>680 ,663
Pythonには関数型として致命的な弱点があるから、メソッドチェーンでは簡潔なコードが書けない
たとえば「(1) Rubyは 条件判定が(文ではなく)式」だから以下のようなコードが書ける
ys = xs.select { |x|
if test
if test_1 then test_1_1 else test_1_2 end
else
if test_2 then test_2_1 else test_2_2 end
end
}
あるいは「(2) Rubyはブロック内で局所宣言が可能」だから上のコードを以下のように書き換えてもいい
ys = xs.select { |x|
cond_1 = if test_1 then test_1_1 else test_1_2 end
cond_2 = if test_2 then test_2_1 else test_2_2 end
if test then cond_1 else cond_2 end
}
関数型言語であれば「(1) 条件判定(if/case)が式」で「(2) 局所宣言(let .. in .. end)が可能」なの当たり前
ところが残念な事に、どちらもPythonには欠落しているから、上の例はストレートにコード化できない
だからPythonではメソッドチェーンは使われないし、「酸っぱい葡萄」に見える
683 :
デフォルトの名無しさん :2011/12/29(木) 00:33:58.04
Rubyでもリスト内包表記が言語として組み込まれてくれると嬉しい ・リスト内包表記はトップダウン思考 ・メソッドチェーンはボトムアップ思考 だと思う 頭に浮かんだロジックをすばやくコード化するのはメソッドチェーンが適しているし、 じっくり腰を据えてコード設計するならリスト内包表記のほうが美しい 自分は、たぶんこのスレもRubyコアの中の人も見ているだろうから そのうちRubyにもリスト内包表記が実装されるんじゃないかと期待しているw
matzはリスト内包表記が好きじゃなかったはず (ほぼ全てがメソッド呼び出しで処理される均質性が損なわれる) だから恐らく言語コアには入らない
Lispのloopマクロも好き嫌いわかれるみたいだな Paul Grahamは嫌いだそうな
Python信者も大変だなw Zopeには惨いトラウマがあるし、メソッドチェーンは酸っぱい葡萄だし
C#やScalaみたいに両方持ってる言語は内包表記はメソッドチェーンのシンタックスシュガーとして実装されてるな なのでそれに習えばRubyに入れるのもそんな難しくなさそうだがな
メソッドチェーンを許すとこんなやつが出てくる
562 デフォルトの名無しさん [sage] 2011/12/29(木) 00:21:13.77 ID: Be:
>>560 (1..1000).map {|v| v * 2}.each {|v| print v} なんかも 1000回のループで済んじゃうの?
563 デフォルトの名無しさん [sage] 2011/12/29(木) 00:27:44.14 ID: Be:
>>559 100個要素があるArrayに対していくらcollectをつなげても、
処理回数もメモリの使い方も100+100+100+...
みたいな増え方しかしないだろ?
>>562 それのループ回数は2000回だろ?
PHP使ってるんだけどフレームワークに興味出てきたんだ。でもcake覚えるよりこの際新たにruby覚えてrailsって流れかが良い気もするなぁ。 LLのフレームワークってどれも難易度は似たようなもんなの?
難易度って低くなかったら使う意味ないだろ。 開発を簡単にするためのもの。 LL言語で重要なことは生産性だろ。 それが悪いんだったら導入することがない。
>>682 こういうこと?別に書けなくはないじゃん
ys = [ x for x in xs
if (
(test1_1 if test1 else test1_2) if test else
(test2_1 if test2 else test2_2)
)
]
ys = [ x for x in xs
for cond1 in [test1_1 if test1 else test1_2]
for cond2 in [test2_1 if test2 else test2_2]
if (cond1 if test else cond2)]
696 :
デフォルトの名無しさん :2011/12/29(木) 08:41:20.91
pythonとかrubyとか何年前の話題だよw まだそんなの弄ってるヤツいるんだっけ?
いまだにJava弄ってる底辺ドカタすら大勢いるんだから そりゃいるだろう
pythonとかrubyも頻繁に更新されてるだろ
>>682 >あるいは「(2) Rubyはブロック内で局所宣言が可能」だから上のコードを以下のように書き換えてもいい
結果は同じかもしれないけど、等価な書き換えじゃないので例が良くないと思う。
cond_1,cond_2 どちらか片方しか評価する必要ないよね?
>>695 下のコードは間違ってるんじゃないかな?cond_1 か cond_2 のリストになるはず。
内包表記内での手続きはあまり向いてないので。Pythonの場合、工夫して出来上がっても
そっちのアプローチは、恐らく読みにくくて効率の悪いコード。
★20年前 BASIC:楽しくプログラミングしましょう 俺:BASICかわいいよかわいい 半年後 BASIC:たーのーしーくーぷーろーぐー 俺:ごめん遅いよ…… ★19年前 アセンブラ:BASICちゃん遅すぎるよね 俺:アセンブラ可愛いよ可愛い 三日後 アセンブラ:ヒャッハーッ! ★14年前 C&C++:アセンブラちゃんわけわかんないよね 俺:CとC++可愛いよ可愛い 三時間後 C&C++:ヒャッハーッ! ★10年前 Perl:なんでも言ってよね 俺:Perl可愛いよ可愛い 半年後 Perl:あぁぁあああだしいぉわかってェエエエ 俺:何いってんのかわかんないよ…… ★3年前〜今 Python:ちゃんとしてればなんでもしてあげる 俺:Python可愛いよ可愛い RubyはPerlの妹っぽくて怖い
お前のセンスが一番怖いわw
>>700 >>682 はよくあるミスだな
if cond then cond(1) else cond(2) end
は
res1=cond(1)
res2=cond(2)
if cond then res1 else res2 end
と同一ではない
$ cat a.rb
def cond(x); puts "cond#{x}"; return x; end
puts "=line="
puts (if true then cond(1) else cond(2) end)
puts "=var="
res1=cond(1)
res2=cond(2)
puts (if true then res1 else res2 end)
$ ruby a.rb
=line=
cond1
1
=var=
cond1
cond2
1
DTが多そうなスレだな
やっぱブロックで局所化出来るって良いな。
>>700 > 下のコードは間違ってるんじゃないかな?cond_1 か cond_2 のリストになるはず。
なんでそうなる?Pythonのコード読めないのか?せめて実行してみたか?
まあ
>>695 のようなコードは普通書かないけども。
pythonって未だに関数スコープなんだよなあ。
710 :
682 :2011/12/29(木) 14:21:49.56
>>700 指摘ありがと、確かにその通りだ
cond_1とcond_2は直和構造(排他)で必ずどちらか一方の評価結果が無駄になるから、例として不適切だった
では、直積構造(組合せ)を使って局所宣言の例題を書き直してみた
ys = xs.map { |x|
h = if x.first_page? then generate_header else nil end
b = generate_body x
f = if x.last_page? then generate_footer else nil end
Document.new h, b, f
}
711 :
682 :2011/12/29(木) 15:05:28.17
>>695 のPythonコードが読みづらい原因はif演算子の構文にある
条件判定が式である言語に限定して、それらの構文を比較してみる
Ruby:
if 条件式 then 式1 else 式2 end
Smalltalk:
条件式 ifTrue: [ 式1 ] ifFalse: [ 式2 ]
Lisp:
( if 条件式 式1 式2 )
ML:
if 条件式 then 式1 else 式2
Haskell:
if 条件式 then 式1 else 式2
Python:
式1 if 条件式 else 式2
普通の言語は「条件式 -> 式1 -> 式2」と左から右へ流れる(それが自然)
それに対して「Pythonだけ」は「式1 <- 条件式 -> 式2」と
左へ右へと行ったり来たりしないとコードが読めない
プログラミング言語界の中で「Pythonだけ」が異端な存在で、可読性の悪い構文が採用されている
これは明らかにPython開発陣の言語設計ミス、あるいは判断ミスだね
649 デフォルトの名無しさん [sage] 2011/12/29(木) 14:50:37.28 ID: Be:
学生プログラマ日本一決定戦(予選は社会人も参加可)
ttp://codevs.jp/howto.html 現在予選開催中
応募締切 2012.1.6 12:00
おもしろいことやっているじゃん。誰か今から参加しろよ。
>>710 ys = (Document.new(h,b,f) for x in xs
for h in [generate_header() if x.is_first_page else None]
for b in [generate_body(x)]
for f in [generate_footer() if x.is_last_page else None])
>>711 else は知らないが、式修飾子は, Perl にも Ruby にも PHP にもあるでしょ。
まぁでも、使えるからといって、使うと見づらくなるんで、
使わないことにこしたことはないが。
エロス
たしかにpythonの三項演算子は他の言語から移ってきたら、ん?ってなるよね 素直にC言語風の?:使った奴は無理だったのかしら まあif文と三項演算子に分けずに if式1個で事足りてる言語が1番シンプルでいいと思う
Pythonの:にはすでに重要すぎる役目が割り振られているからなあ
719 :
682 :2011/12/29(木) 15:25:31.53
さらにPythonの弱点を付け加えよう
>>682 の条件判定は論理値による二分岐だったけど、多分岐の例を以下に示す
ys = xs.select { |color|
case color
when :green
true
when :yellow
true
when :red
false
else
raise RuntimeError
end
}
おそらくPythonでも if .. else をネストさせれば「別に書けなくはない(
>>695 )」かもしれないが、
おそらく「カッコだらけ」のスマートさに欠けたコードになる
ちなみに
>>711 に挙げた言語の中で、Ruby/Lisp/ML/Haskellには多分岐の専用構文が用意されている
(正確にはLispの多分岐は構文では無いが、自然に書けるという意味で仲間に入れてみた)
Pythonは関数内関数でいいじゃんっていう文化だから 別に弱点にはならんよ
そういやPerlにはswitch文がないんだっけ。 ほかのしょーもない機能はたくさんあるくせに、なんでswitch文がないんだっけ?
内包表記と同じ感じだな〜 for文は左から右、上から下に読み下せばいいのに内包表記だとそれが崩れる if文も左から右、上から下に読み下せばいいのに三項演算子だとそれが崩れる 同じキーワードを使った似たような機能なので違和感が伴う 内包表記はF#風な感じにすればよかったし三項演算子はC言語風味にすればよかった
例えばみんな手作業でマグロの一本釣りしてるのに一人だけ全自動リール使って楽してたら 空気読めない奴だと思われて村八分にされるのが落ちだろ 全自動リールってすごいね俺も今度からそれ導入しよう!とは絶対にならない 日本とはそういう国だ
火事と葬式以外は自動 全自動とはそういう事だ
>>721 確かモジュールで多分岐の実装が存在する
つか、それすらuseで何とかなっちゃうのがおかしいがw
pythonの三項演算子知らない奴がコード見たら、他の言語の三項演算子知ってたとしても 「HAHAHA、こいつifの書く場所間違ってやがるぜ。」って思うだろうな
>>719 ys = (x for x in xs if {'green': True, 'yellow' : True, 'red' : False }[x])
RubyにもC風の三項演算子( .. ? .. : .. )はあるけど、 if .. then .. else .. end があるからほとんど使わないね 可読性が悪くなるから 三項演算子を使うのはワンライナーで書ける単純な判定や、 irbで対話的に入力する(とにかくタイピング数を減らしたい)場合だけ
>>714 generate_(header|body|footer)のインデントが揃ってるから
Rubyで書かれた
>>710 よりも読みやすいな
731 :
700 :2011/12/29(木) 16:42:03.73
>>708 ゴメン、中途半端にrubyのコードを読み違えてた。collect/select
読めるけど、未定義の変数が多いので実行はしてない。
----
一応、主張しておくと
プログラマの負担の軽減という点からのPythonの利点は、
慣習に従って書けば、自然と読みやすく(Python処理系にとって)効率の良いコードになる事なので、
(これをやり方を矯正されると捉える人にとってはストレスになるらしいが)
工夫して書けなくもないからとバッドノウハウで応対するのは、
誤解を与えるだけだと思う。
> 慣習に従って書けば、自然と読みやすく(Python処理系にとって)効率の良いコードになる事なので、 根拠はあるのか? ぶっちゃけインデントの話しか聞いたこと無いんだが。
733 :
デフォルトの名無しさん :2011/12/29(木) 18:47:03.79
三項演算子もメソッドチェーンも使わなくても構わないだろ。
このスレみてるとたまにメソッドチェーンがどうたらこうたら、 だがPythonはうんたらかんたらって出てくるけど、 メソッドチェーンの対比として、なにがいいたいのか全然わからない。 メソッドチェーンって、インスタンスメソッドを実行したときにthisを返すだけだろ? this.hoge().hoge().hoge().hoge(); って書かないなら、 this.hoge(); this.hoge(); this.hoge(); this.hoge(); って書くしかないと思うんだけど。
>>734 thisを返すものよりも、どちらかと言えばリストとかを新規に返すもののほうがチェーンっぽい感じがする
コレクションに対してmapやらfilterやらをメソッドチェーンして操作するのが割と最近の言語には入ってるんだよ 最近のjsとかにも入ってるし次のバージョンのJavaにすら入る んでこういうスタイルをなんていうのかわかんないからとりあえずこのスレのみんなはメソッドチェーンって言ってる ちなみにこれはthisじゃなくて新しいコレクションを作って返す
メソッドチェーンは言語の話ではなくライブラリの話だろう。 thisを返すことを基本としたライブラリであれば、 どんな言語でだってメソッドチェーンはできる。 Pythonは、メソッドチェーンが出来るように thisを返すことが義務付けられているのか? それともthisを返すライブラリまで含めてPythonなのか? それにメソッドチェーンであれば読みやすいという根拠もよくわからない。 俺の意見はVB6のwithはメソッドチェーンより優れた機能だ。 例 VB6のwithをC言語っぽく書いた。 with(obj) { .hoge(); .hage(); .hige(); }
チェーンならSmalltalkだよな 「;」をつけるだけでいくらでもつなげられるなんて素晴らしい 具体的にどうすごいのかは他の人に任せる
具体的にどうすごいのかわからない。 みんな同じ意見だろう? デバッグがしづらくなるだけって みんな気づいているだろう? あれ?動かない? どこまで正しく動いているんだよって 思いながら改行入れて変数に・・・とここまで言えば 俺が何やってるかわかるだろ?w
行単位でのステップ実行しかできないのが いかんよね。
742 :
デフォルトの名無しさん :2011/12/29(木) 20:59:08.35
はやめにswitch入れとかないからもうperl使ってないし
thisを返すメソッドでチェーンするのは流れるようなインタフェイス(fluent interface)と呼ばれているね。
>>739 RubyにはObject#tapというメソッドがあってですね。
a = (1..1000).map {|v| v * 2}.tap{|xs| p xs}.select{|i| i % 1000 == 0 }
メソッドチェーンの途中に挟んで p デバッグができる。
デバッガ使ってるなら途中までの式を実行すりゃ良い話だし、別に困らない。
具体的にどうすごいのかわからない。 みんな同じ意見だろう? デバッグがしづらくなるだけって みんな気づいているだろう? あれ?動かない? どこまで正しく動いているんだよって 思いながらtap・・・とここまで言えば 俺が何やってるかわかるだろ?w
これからの言語としては単にメソッドチェーンでコレクションを操作じゃまだまだで 並列コレクションがあって1人前みたいになってくるのかも
カメラと財布とワンセグがあって1人前みたいなのはもう飽きた
やっぱLinqの方が良いね。
>>732 >根拠はあるのか?
科学的根拠はないけど、Python信者は心からそう信じ込んでいるから、あまりそこをつっこまないほうがいいよ。
歴史を見ても、宗教こそがいちばんの火種だから。
あ、ここは火種を歓迎するところだっけか。ごめん。
739 744 いわんでもわかる
Rubyの売りは書きやすさだと思う 左から右へと書くことが多いから、カーソルの移動が比較的少ない
お前は、他の言語で、右から左へカーソル移動をしながら書くのか?
752 :
デフォルトの名無しさん :2011/12/30(金) 02:05:05.49
使い捨てで無い限り重要なのは保守・可読性の高さだな
>>751 うん…かなり左を押す回数多いと思う
それか、変数大量化のどっちか
頭に浮かんだ順に書いていくとそうならない?
引数は第一引数から思い浮かびますが?
後置のifとか、行ったり来たりじゃん。foo = 1 if bar && baz
後置if?珍しい文法ですねw
Lisp は右から左に実行されるけど、まあ慣れだと思う。 ところで左から右に実行されるのが便利なら、関数も逆ポーランド方式みたいにしたほうが良くないかな。
>>754 いやLLの関数って基本1〜2個でしょ
それをいくつも組み合わせるときの問題だってば
- いやLLの関数って基本1〜2個でしょ + いやLLの関数の引数って基本1〜2個でしょ
メソッドチェーンが読み書きし易いと言ってるけど 代入が右から左なので台無し 一番右を見ないと左辺に代入される値の型すら 分からないので目線の移動が大きく読み難い
Python信者にとって、メソッドチェーンは酸っぱい葡萄なんですねw たいへんわかりやすいです
682が「Pythonの弱点を付け加えよう(キリッ」とか言ってたのに 全部コード付きで論破されたところまでは分かった
>>760 型は問題ではなくて変数名なりを分り易くつけることが
重要なんだと思う
一時変数に代入しながら書くか、代入せずに書くかの違いだけだろ > メソッドチェーン
>>682 は三項演算子を使っていないけど、確か Ruby にもあったよね?
なんでそんなに難解に書くんだ?
765 :
デフォルトの名無しさん :2011/12/30(金) 07:57:16.68
「酸っぱい葡萄」気に入りすぎだろ 何回言ってんだ 恥ずかしくなってくるw
メソッドチェーンは書き易い 内包表記は見た目が整ってて綺麗、最終的な型がわかり易い いじょ。
767 :
682 :2011/12/30(金) 10:46:39.90
Pythonと同じ「内包表記が可能&インデントベース」な関数型言語 Haskell によるコード例
[二分岐] Python:
>>695 (上段), Ruby:
>>682 (上段)
ys1 = [x | x <- xs1,
if test x then
if test_1 x then test_1_1 x else test_1_2 x
else
if test_2 x then test_2_1 x else test_2_2 x
]
[多分岐] Python:
>>728 , Ruby:
>>719 data Color = Green | Yellow | Red
ys2 = [x | x <- xs2,
case x of
Green -> True
Yellow -> True
Red -> False
]
[直積] Python:
>>714 , Ruby:
>>710 data Option a = None | Some a
ys3 = [fn x | x <- xs3]
where fn x =
let
h = if is_first_page x then generate_header else None
b = generate_body x
f = if is_last_page x then generate_footer else None
in
(h, b, f)
768 :
682 :2011/12/30(金) 10:49:18.74
メソッドチェーンは一番右まで読まないと最後の型が云々ってのは foobar = ho.ge().fu().ga().pi() .yo() って書け(れ)ばいいだけじゃね?
最終的な型がわかりやすいっていっても [[x,y] for x in xs for y in xs] ですぐわかるのは何かの2要素のリストのリストってだけで xの型がxsの中身の型だってわかるのはx in xsまで読まなきゃだし yの型がysの中身の型だってわかるのはy in ysまで読まなきゃわかんないけどな
ぐぐってみて、メソッドチェーンの対比としてなにを主張していたんだかやっとわかった。 リスト内包表記ってやつを主張していて、 その実態は、リストリテラルの中にループ文を書いて、 リストの値を設定出来るってことか。 例えばDBからSELETした結果を詰める場合、 コネクションオープンからコネクションクローズまで、 リストリテラル内に書くことになるんだよね?
772 :
682 :2011/12/30(金) 12:03:36.93
Rubyと同じ「内包表記が不可&フリースタイル」な関数型言語 Standard ML によるコード例
[二分岐] Python:
>>695 (上段), Ruby:
>>682 (上段)
val ys = filter (
fn x =>
if test x then (
if test_1 x then true else false
) else (
if test_2 x then true else false
)
) xs
[多分岐] Python:
>>728 , Ruby:
>>719 datatype Color = Green | Yellow | Red
val ys = filter (
fn x =>
case x of
Green => true
| Yellow => true
| Red => false
) xs
[局所宣言] Python:
>>714 , Ruby:
>>710 datatype 'a Option = None | Some of 'a
val ys = map (
fn x =>
let
val h = if is_first_page x then generate_header else None
val b = generate_body x
val f = if is_last_page x then generate_footer else None
in
(h, b, f)
end
) xs
773 :
682 :2011/12/30(金) 12:06:46.20
一部訂正 [誤] if test x then ( if test_1 x then true else false ) else ( if test_2 x then true else false ) [正] if test x then ( if test_1 x then test_1_1 else test_1_2 ) else ( if test_2 x then test_2_1 else test_2_2 )
VB6のwithはメソッドチェーンより優れた機能だ。 例 VB6のwithをC言語っぽく書いた。 with(obj) { .hoge(); .hage(); .hige(); }
775 :
682 :2011/12/30(金) 13:20:00.42
>>770 Pythonは動的型付け言語だから、リストの中身を開けてみるまでは
その要素のデータ型が何であるかは分からない
Pythonでの内包表記のデバッグは、初心者にとって困難を極めるだろうね
Haskellなら、処理系が型検査してもしもコードに誤りがあれば
期待するデータ型と実際のデータ型をエラーメッセージとして教えてくれるのに....
その点、Rubyのメソッドチェーンのデバッグは楽チンだ
ブロック内でデバッグ文
p hoge if $debug
あるいは型検査
raise TypeError fuga.is_a?(Fuga) if $debug
が自由に書けるからね
いまどきの動的型付け言語でももっと型付変数が流行っていいと思うんだ だからPerl6頑張れ、超頑張れ、使わないけど
777 :
682 :2011/12/30(金) 13:41:40.80
またまた訂正 [誤] raise TypeError fuga.is_a?(Fuga) if $debug [正] if $debug raise TypeError unless fuga.is_a?(Fuga) end
>>774 withは同じオブジェクトへのメソッド呼び出しなので、メソッドチェーンとは性質が違う。
それに、ブロックの途中にそのオブジェクトのメソッド呼び出し以外でも書けるwithよりも、流れるようなインタフェイスの方が流れが途切れなくていい。
withはオブジェクトにプロパティが沢山あり、それを設定しないと始まらない言語向きだと思う。
[正] raise TypeError if $debug unless fuga.is_a?(Fuga)
>>778 > 流れるようなインタフェイスの方が流れが途切れなくていい。
なんで?
流れが途切れないほうが、流れるようなインタフェイスっぽくていいから
>>778 メソッドチェーンって、プロパティ設定以外のことって何かすんの?
プロパティ設定なんてしないよ
じゃあ何すんの?
object自身に破壊的操作をしてそれ自身(this)を返すタイプの処理の連鎖なら
withでも同じことだが、あらたなobjectを返すタイプの処理の連鎖は
>>774 では
書けないよ
メソッドチェーンはどちらのケースにも対応している
メソッドチェーンより関数合成のほうがいいと思うけどね
話は戻して、流れている方が流れているからいいんだ。以外に、 流れている方がいい理由は?
あ、わかった。 メソッドチェーンはできない言語ってのはまずなくて、 変数に代入せずに書き続ける書き方だ。 リファクタリングの一つ「中間変数への代入」の逆、 式のインライン化をした結果がメソッドチェーンだ。
788 :
682 :2011/12/30(金) 14:31:02.24
>>771 直感的にSQLのSELECT文をイメージしたのは良い発想だと思う
SELECT文と同じように、ループで廻してIFで分岐して...といった「手続き的」に手順を書くのではなく、
検索条件を「宣言的」に書けるのが内包表記
プログラマが宣言を書けば、後は言語処理系が自分で考えて最適な手順を実行してくれるから、
(メソッドチェーンよりも)抽象度の高い記述法だと言える
ただし、残念ながらHaskellにしてもPythonにしても、内包表記ではDBに対する検索条件を書けない
SELECT文で得た結果リストを内包表記で(メモリ上で)処理することになる
> じゃあ何すんの? a = x.foo() b = a.bar() c = b.baz() っていうのを c = x.foo().bar().baz() って書くだけのことやがな 普通はプロパティの設定なんて出来ないよ ライブラリの作り方とかによっては メソッドがレシーバをそのまま返すならプロパティ設定とかも出来るけど Ruby/Tkだとプロパティ設定みたいなのは、レシーバを返すようになってて button = Tk::Button.new button.text('ボタン1') button.width(10) button.command{exit} button.pack() が button = Tk::Button.new.text('ボタン1').width(10).command{exit}.pack() って書けるけど、特殊な例ですな
>>787 だいたいその理解であってる……ただし、
> メソッドチェーンはできない言語ってのはまずなくて、
これはいいすぎ
あくまで今現在主流のシングルディスパッチのオブジェクト指向言語界隈の話
>>790 メソッドチェーンができない言語を教えて下さい。
>>791 オブジェクト指向言語以外には普通はメソッドというものが無いので
メソッドチェーンというものもないですね
じゃあ、メソッドがあるものは すべてメソッドチェーンができるってことでいいですか?
記法上の問題があるので、マルチメソッドの場合は上で言ってるような メソッドチェーンにはならないでしょう だからシングルディスパッチということになるのですが、CLOSのような例外を 除いて今メジャーなのはシングルディスパッチなので、大体そう理解しておいても たぶん問題はありません
字面上は foo().bar().baz() ってメソッドが連続してればそれでいいんじゃない 大抵はコレクションを連鎖的に操作するようなことを指してるんだろうけど
>>795 それでおk
JavaとかでStringBuilderのappend().append().append()とか気違いみたいに
連打してるコードとかもメソッドチェーン
メソッドチェーンのコレクション操作は数あれどー 演算子チェーンのコレクション操作はそうはあるまいふわはははー
Rubyしか使ってないのだけど Ruby使いはメソッドチェーンしたがる(ようなきがする) RubyとPythonでは配列の連結が 配列のメソッドなのか文字列のメソッドなのかってのあって それ自体は別にどっちでもいいと思うけど Rubyだとjoinで文字化するのまで含めてメソッドチェーンで考えるので 日本語の語順のように 1から100までのRangeオブジェクトを作って、それぞれを二乗して、','で連結して文字列にする、ってのがそのまま (1..100).map{|x| x*x}.join(',') と書けるんだけど(こういうのを「流れるような」っていうのかな?) Pythonだとなんか思考パターンが違うような気がする 不慣れなんであれだけどPythonだと ','.join([str(x*x) for x in xrange(1,100+1)]) って書くのかな Python使いなら、すっと書けるんだろうけれども
内包もチェーンも両方欲しい
メソッドチェーンにしてもLISPにしても 一見判り易く見えるのは良いんだが バグってるときにどこまで正常なのかが判りにくい
jQueryもメソッドチェーン前提のAPIだね。 あれはやり過ぎ感があるが。
803 :
682 :2011/12/31(土) 17:38:00.10
>>801 Rubyでのデバッグ方法は、概出だよ
>>743 ,775 (
>>775 は自分のカキコで
>>743 は別人さん)
とりわけ難しいような話じゃないと思うけど、何が足りないんだろう?
あと、
>>775 では(動的な)型検査を書いたけど、
最近はデバッグ時に型検査コードを追加するのではなく
「コーディング(コード設計)時に要所要所で型検査する」スタイルへと変わりつつある
どちらかといえば型検査というよりも、型表明(型アサーション)と言ったほうがいいかもしれない
ここの文脈では、この変数はこの型になっているはずだ!というのをあらかじめ明示的に書くという発想
コードは冗長になるけど、型が明示されているから後々の保守性も良くなるという利点もある
コーディングミスに起因する単純なバグの大半はこの型表明で駆除できるから、
後は本質的な上流工程(機能/構造設計)レベルのデバッグに専念できてオヌヌメ
たかがprintfデバッグができれば良いなら 内包表記だって簡単にデバッグできるだろ 意味分からん
805 :
682 :2011/12/31(土) 18:19:49.37
>>804 たとえば関数型言語である Standard ML には逐次演算子 ; がある
これは式 f ; g を評価すると(f の値を捨てて) g の値だけを返すという仕様
だから f の部分にデバッグ文を「手軽に」書くことができる
Pythonにも同じような「簡便な」演算子があるのかな?
内包表記の中は式しか書けないはずだから、逐次演算子(に相当するモノ)が必要になるハズ
Pythonには詳しくないんで、教えてください
>>805 式が書ければprintfデバッグには十分すぎる
from __future__ import print_function
ys = [f(x) for x in xs for _ in [debug and print(x)]]
ついでにOcaml版
let ys = [f x | x <- xs; (if debug then Std.print x; true)]
807 :
デフォルトの名無しさん :2011/12/31(土) 18:46:08.95
デバッガ使えば?w
808 :
682 :2011/12/31(土) 19:02:27.96
(
>>805 の続きになる)
あと、(
>>788 で書いたけど)内包表記には処理を「宣言的」に書けるから
(「手続き的」に書くメソッドチェーンよりも)抽象度の高い美しいコードになるという利点がある
ただし、この宣言を書けば後は言語処理系が「自分で考えて」最適な手順を実行する方法は
コード設計は(言語処理系にオマカセだから)楽になるものの、
デバッグ時には(プログラマが言語処理系の振る舞いを予測して)適切な箇所にデバッグ文を
入れなければならない、という欠点もある
もちろん処理系の振る舞いは実装仕様として明確になっているはずだから、デバッグできないという意味ではない
こういった宣言的な記述を全面的に用いる言語には、関数型言語 Haskell や論理型言語 Prolog がある
これら言語は、どちらも実行時に(=動的に)評価順序を決定する戦略を採用しているから
コードはコンパクトで美しいけれど、デバッグは大変という特徴(利点&欠点)がある
ただし、Haskellは静的型付け言語であり型エラーを実行前に検出してくれるから、欠点の多くは補える
それに対してPrologは動的型付け言語だから、デバッグは慣れないと難しい
そしてPythonは .... (以下略)
809 :
682 :2011/12/31(土) 19:06:09.42
>>806 あっそうか、常に true を返す debug式なら and演算子で繋げばいいんだ
言われてみれば単純な話だけど、指摘されるまで気付けなかった
レスありがとう
内包表記は集合の定義だから、要するに「データの定義」なんだよな xs = [1, 2, 3, 4, 5] こんなのは外延的な定義だけど、内包的定義にしても 「集合を定義している」という点においてまったく同じ map filterのチェインと似たようなことができるので比較されてるけど 意味としては全然違うと思う
だから高級リストリテラルとして内包表記を使うのはあるべき姿だけど processとしてmap filterが必要な場合には、「内包表記で実現する」のではなく map filterを使うのが自然な形だと思う map filterはポイントフリーで書けるしね
>>883 > ここの文脈では、この変数はこの型になっているはずだ!というのをあらかじめ明示的に書くという発想
> コードは冗長になるけど、型が明示されているから後々の保守性も良くなるという利点もある
それやるなら静的型付けすればいいんじゃね?
この変数はこの型かもしれないが、同じメソッドを持っていれば
別の型でも動く。それが動的型付けの醍醐味だろう。
>>808 > あと、(
>>788 で書いたけど)内包表記には処理を「宣言的」に書けるから
> (「手続き的」に書くメソッドチェーンよりも)抽象度の高い美しいコードになるという利点がある
いんや、美しいかどうかは
好みの問題。
民主党党員名簿 (党員資格/代表選選挙人名簿) ※ 党外秘 1. 青木大姫 2. 秋山慶姫 3. 新井正煕 4. 金村成勲 5. 木下勲鍋 6. 佐井明博 7. 豊田檀君 8. 本山舜臣 1. 安藤重根 2. 池田青天 3. 金子佐鎮 4. 金山淑恵 5. 木子奉昌 6. 田山明雲 7. 平山明河 流石反日朝鮮人だらけの政党なだけはあるなw野田も韓国人疑惑があるくらいだし
815 :
682 :2011/12/31(土) 20:59:27.67
>>812 まず、
>>803 で「コーディング(コード設計)時に要所要所で型検査する」と書いているように、
全ての箇所で型表明を入れるわけではない
ここはバグりそうだな..と感じた複雑なロジックの部分に(=要所要所に)入れる
だから、静的型付け言語の良さ(安全性)と動的型付け言語の良さ(柔軟性)をミックスさせた発想
またダックタイピング手法を使う場合は、たとえば
raise MethodResponsibility unless foo.respond_to?(:msg)
みたいなメソッド応答責任に関する表明コードを使うことになる
>>813 確かに美しいか否かの判断は主観(好み)であって客観性は無いよね
ただ、それだとこのバトルスレの意義が問われることになって .... (以下略)
>>810 >>811 を書いた俺の立場としては
内包表記は高級なリストリテラルとして便利で簡潔、美しいといってもよい
が、それ以上の用法は、集合の定義としての本来の意味から外れているし
美しいとも思わない
思うに
>>626 あたりが提示している以下のような式の違和感も、結局その辺に
原因があるんじゃないか?
> sum([ x*x for x in xs if x > 0 ])
Linq等も絡んでSQLって比喩も出てたが、あれも要は関係代数に根差した新たな
データセットの定義だからな、だからSELECTがビューの定義に使われるわけで
Pythonはどうも内包表記に本来の意味を超えた用途を与えてしまっているように
感じるよ
>>816 > 思うに
>>626 あたりが提示している以下のような式の違和感も、結局その辺に
> 原因があるんじゃないか?
> > sum([ x*x for x in xs if x > 0 ])
この用法のどこが内包表記の本来の意図を超えてるんだよ
普通の集合の定義だろうが
> Pythonはどうも内包表記に本来の意味を超えた用途を与えてしまっているように
> 感じるよ
お前は内包表記が使える言語を何か一つでも使った事があるのかと
>>817 その式にはどこにもxsの定義が無いので、実際にはその式の意図は集合の定義ではなく
以下の計算だと俺には見えるよ
sum . map (\x -> x * x) . filter (> 0)
こっちはポイントフリーだ、xsなど存在しない
>その式にはどこにもxsの定義が無い のもそうなんだが、最終的に得たいものがただの数値である、という点からもね 「計算の便法として」内包表記を使っている、という風に見えるわけ Haskellなら上のようにmapとfilterで書くほうが好ましいでしょ、内包表記には必ず ポイントがあるからね
そうすることで なんかメリットあるのか? 例えばデータベースの読み書きに 応用してみてくれ。
>>820 ポイントをなくすことに、かい?
ポイントフリーな式はそれ自体が関数だ
もちろんデータを適用してもいいが関数としても使える
ポイントがあればそうではないから、関数として使いたい場合はlambda抽象の中に
くるむといったことをしなきゃならない
数学的に見ればポイントとは定義域の中の特定の点だ
ポイントつきの式ではその点に限って観測しているのに対して
ポイントフリーの式では点を限定せず写像を写像として扱っている
>>818 num と num list -> num を混同するなよ
お前が定義してるのは後者だからxsなんて無いに決まってる
>>822 もちろん、xsを最後に適用してもいいよ、末尾にxsを書くか書かないかの
違いだけだし……
重要なのは、ポイントフリースタイルではprocessを再利用可能な写像の形で
抽出できていて、それを適用するもしないも任意だということ
内包表記のコードがそれに比べたら「書き捨て」なのがわかるだろう
>>821 いや、そうではなくて
具体的な応用例を示してくれということだよ。
データベースならほとんどのアプリで使うだろう?
そのデータベースを例にして。
写像として利用したいときまで内包表記を使うなんて誰も言ってないだろ lambda xs: sum([ x*x for x in xs if x > 0]) なんて書いてるアホがこのスレに居たか? お前ひとりが勘違いしてハッスルしてるだけだ
別にハッスルなんてしてないよ > お前は内包表記が使える言語を何か一つでも使った事があるのかと こんな風に妙にけんか腰なあなたにもなるべく丁寧に答えてはいるが…… (何が気に障ったのか知らないけど)
> lambda xs: sum([ x*x for x in xs if x > 0]) これがアホなら、Pythonではどう書くのが「ただしい」の?
> lambda xs: sum([ x*x for x in xs if x > 0]) これがアホなら、Pythonではどう書くのが「ただしい」の? []が不要なのはわかるけど
別にPythonなんてどうでもいいわい 内包表記の本来の意味とやらが意味不明なだけだ Haskellで sum [x*x | x <- xs, x > 0] と書くと内包表記の悪用なのか? ポイントフリー病にかかるのは勝手だが 他人にまで押し付けんなよ
>>829 でも、ほしいのが手続きである場合はそうは書かないでしょ?Haskellなら
Pythonでは、そうした場合にも、
>>825 に似たものを書くことになると思うよ
だから↓のように書いたわけ
>Pythonはどうも内包表記に本来の意味を超えた用途を与えてしまっているように
>感じるよ
ちなみにこっちの元の意図としては、
>>808 の内包表記が「宣言的」で
「抽象度の高い・美しい」という表現に対すて、俺なりの考えを述べただけなので
別に何か特定の「押し付ける」つもりは全く無いよ
(っていうか、そんなこと不可能だろ……)
数学厨の本来の目的はIOを排除することだが、 引数=入力という観点を持つとポイントフリー病になるんだろうな。
>>829 >別にPythonなんてどうでもいいわい
どうでもいくないわw
スレタイ嫁
Python vs. Ruby の構図が いつの間にか Python vs. Haskell になっている件について
やっぱり内包表記にも対応した Scalaが最高の言語なのかもしれないね。
837 :
【中吉】 :2012/01/01(日) 10:17:13.65
あけおめ〜
>>825 >lambda xs: sum([ x*x for x in xs if x > 0])
>なんて書いてるアホがこのスレに居たか?
ちょっとまってくれ、こう書いたらPython的にはアホなのか?
すごく書きまくってるんだが。
>>827 でもつっこまれてるが、
>>829 で
>別にPythonなんてどうでもいいわい
と逃げてるようだから、単に口が滑ったんだろう
Haskellですら
\x -> sum [y * y | y <- x, y > 0]
と書く方が
>>818 より短い
Haskell 素人なので根本から教えてもらいたいのだが ポイントフリースタイルって一体何のメリットがあるんだ? ただの難読化に見える
>>841 今思いついたメリットは
変数がなければ∀やλも使わないので∀とλが分からない素人でも読めること
メソッドチェーンで言ったら function(x) { return x.foo().bar().bazz() } を bazz . bar . foo と書くだけだぞ よぶんなゴミがなくて本当に必要なことしか書いてないからずっと短い これが難読化だというのはちょっとよくわからないな
>>843 たとえば、これをポイントフリースタイルで書くとどうなるの?
function(x, a, b, c) { return x.foo(a).bar(b).bazz(c) }
843の書き方を習ってメソッドチェーンで書いたけど分かりにくいかも。 関数的に書くとこうなるかな。 \x -> \a -> \b -> \c -> bazz (bar (foo x a) b) c)
ああいいたいことは分かった flipとかfstとか無理やり使ってポイントフリーにするぐらいなら 素直に書いた方がずっといいと思うよ
>>846 え。flip とか fst とか要らないよ。
845 をポイントフリースタイルにすると 843 と同じ bazz . bar . foo になる。
そうやって foo, bar, bazz の型情報が消え去ったプログラムが分かり易いですか?
ということを言いたかったんだけど。
>>847 え、ちょっと待って、意味が分からない……
>>845 は
x, a, b, cの型をそれぞれa1, a2, a3, a4とすると、
foo: a1 -> a2 -> a5
bar: a5 -> a3 -> a6
bazz: a6 -> a4 -> a7
のようになっていて、全体としては a1 -> a2 -> a3 -> a4 -> a7 か?
なんでこれが bazz . bar . foo になるんだ?
仮にfoo = (+), bar = (+), bazz = (+) とすると、型がマッチしなくて
bazz . bar . fooは型エラーになると思うが、何か俺勘違いしてる?
たぶん
(((bazz.).bar).).foo
が
>>845 と同じになるんじゃないのかな
bazz (bar (foo x a) b) c = (flip bazz c . flip bar b . flip foo a) x map flip [foo, bar, bazz] と書きたいがHaskellのリストには同じ型しか入らない。 だからLLの方が良い。
マルチポストをコピペ >プログラミングRubyのRubyベタボメっぷりにRubyを使い始めて早10数年、使えば使う程にRubyって駄目だなと痛感する >Rubyを学習し始めた頃は誰でもRubyは素晴しいと思うのだが、数年も使えばそのどうしようもない互換性のなさにウンザリする >しかも互換性が無くなることをマズいと思っていない集団がRubyを制作しているのでどうしようもない >1.4時代のコードが1.6になった途端に互換性がなくなり動かなくなることはあったが、1.6→1.8ではそれが顕著になり、1.9など何のエラーも出さずに前のコードが動く方が珍しいほど >それどころか1.9に行かずREEが海外ではデファクトになりつつある現状、そして始まるPlain RubyとREEの方言問題 >例えばPassengerもREEの方がうまく動いたり、かと思えば特定のバージョンだとPlainじゃないとまともに動かなかったりと、とても面倒臭い > >美しいコードを求める為の副作用、という名の互換性のなさはRuby界全体に蔓延していて >例えばあれだけもてはやされたRailsも、Rails2とRails3の互換性のなさに誰しも苦労したのは記憶に新しいところ >誰もが互換性のなさに辟易し、俺ライブラリを量産するため、gemで探すと似たような事をする終わったプロジェクトがわんさか引っかかる >諸処の小さなプロジェクトだけがそんな現状ならば許せるが、dbiアダプタでさえそんな現状なので >バージョンが変わるとデータベースにすら接続できなくなったとか、dbiのAPIバージョン変わったのにアダプタ側の更新ないな、 >とか思ってるとアダプタ作者がRubyから足洗ってたとか余裕
>身内同士でRubyはコードが美しいと四六時中自画自賛しているが、実はそれこそがRubyのガン >その美しいコードという名のオナニーの為に一体どれだけの互換性と人的リソースが失われていったことか >Rubyのコードは美しい、Railsスゲー、ベタボメする人は沢山いたがいつも一過性の人気しか得られないのはそこにあるし >ベタボメしていた人達もしばらくするとウンザリしてRuby界から消えてしまうのも原因は実はそこにある >達人プログラマーはRubyをベタボメしなくなったし、Mongrel作者はRailsどころかRubyに見切りをつけちゃったしね >ああいう熱狂的なRuby信者でもRubyから足を洗っているのを見ると、tDiaryがRubyに見切りつけてPythonで全部書き直したとか言われても驚かないだろう自分がいる
そもそもRubyは書き捨てスクリプトなんだから 必要なときに書いて捨てるものだと思うぞ 互換性の意味では、メンテされなくなった1.8系がある意味狙い目かも
854 :
デフォルトの名無しさん :2012/01/03(火) 13:35:48.38
まあそういうのが流行ってたんだってことだな 美しいとか美しくないとか「いい加減なこと」をブログに書くということがw プログラマっておっちょこちょいが多いしな
美しいものを作りたいなら美しいと宣言するのが良い事だと思ってたんだろ。 宣言的言語は今でも流行ってる。
856 :
デフォルトの名無しさん :2012/01/03(火) 14:00:10.03
matzはイヤな感じしないんだけど ひがとかおごとかは鳥肌が立つ
>>851 なんて正にこのスレ向きの話題なのに、
このスレへのカキコを避けたのは、このスレの住人だからなのかな?
ここのところ Ruby & Haskell に叩かれっぱなしだからw
Python信者ファイト!!
このスレ見てると全ての言語が欠点だらけに思えてくる。
似たようなターゲットの言語が乱立している辺りから お察しください
結構ターゲットは違うハズなんだけどね ・Perl テキスト処理、高級シェルスクリプト ・Python 汎用スクリプト、簡易ツール作成、テスト/プロトタイプ ・Ruby Perlの代替、テスト/プロトタイプ ・PHP Web
互換性のなさってLL全体に言えるよね
LLじゃなかったら互換性あるのか??
C、C++、Java、C#あたりはまあそうなんじゃね
他言語との互換性(学習コストの低さ)でいうと、Rubyが優位だだろうな。 他言語のいいとこ取りで、驚き最小の原則で作られた言語だからな。 実際、俺もRubyを覚えてからJavaを覚えるのに大して時間は掛かっていないからな。
釣り臭漂うレス
バージョン間の互換性を言ってるんだと思ったが・・・
> 他言語との互換性(学習コストの低さ)でいうと
(初期の)C#やDartみたいにあからさまに既存の言語に似た構文を持つ 言語なら分かるが、Rubyが特別に学習コスト低い、という気はしないな
869 :
デフォルトの名無しさん :2012/01/04(水) 17:58:50.36
問題はruby、railsの陰が薄くなりつつあることだよな 若い奴ほどnode.jsになだれ込んでる ruby好きオジサンのちまちました小言なんて誰も聞きたくないということ
ECMAScriptって無理に推し進めるほど、使い勝手がいいもんじゃないだろ。 クロージャを使ってクラスを書いたり、Ajaxなコード書いたり、普通にやってるけど、 思っていたより、出来る言語なだけであって、良い言語ではない。 Flexだと、クラスを普通にサポートしていたり、 XMLリテラルがあったりがあったりでいい部分もあったが。 謎の遅延評価でデバッグとか苦労した。
>>870 を汎用的にテンプレ化します
○って無理に推し進めるほど、使い勝手がいいもんじゃないだろ。
○を書いたり、○なコード書いたり、普通にやってるけど、
思っていたより、出来る言語なだけであって、良い言語ではない。
○だと、○を普通にサポートしていたり、
○があったりがあったりでいい部分もあったが。
○でデバッグとか苦労した。
>>869 と言うか、やっと本来の姿に近付きつつある感じ
Perl もそうだけど、本来Webは専門外なんだってば
アメリカ(シリコンバレー?)だと当然のようにスタートアップはRailsって話を どこかで見た気がするんだけど、そうでもないんかい? GitHubとかHuluとかアメリカ産っぽいサイトもRails使ってるんでしょ?
>>874 スタートアップは Rails 、ということは後で書き直すの?
全然別の人が書き直すわけでもないだろうから、新規参入がないと Rails の利用者は
どんどん減っていくのだろうか。
876 :
デフォルトの名無しさん :2012/01/04(水) 21:49:56.32
レールに載った人生なんてまっぴらゴメンだぜ!!
>>875 どうなんだろうねぇ。
捌ききれなくなって書き直したって話はtwitterしか聞いたことないから
そのレベルにならなきゃ大丈夫だと思ってるんだけど。
その前にそんなレベルのサービス作ってみたいぜ
たまたまRailsが流行っていた時代に 開発を始めたに過ぎない。
今のところはRailsならある種の人材の確保が楽って面があるんだろうな 置き換わっていくんだろうけどな そもそも単純なRDBのCRUDアプリを簡単に作れますっていう 志の低いコンセプトって当時の時代背景知らない世代には意味不明だろうw
志の高いコンセプトを実現したフレームワークは何?
Pythonはスマホアプリ作れないから時代遅れの化石言語
これだよ ruby大好きオジサンはいつまでたっても子供のまんま 「○○?ゴミじゃねーかワラワラワラワラ」 rails売り出し時のマーケティングをそのまま内面化してるだけw
俺SJC-WCしかもってないし、EJBとかもはや仕事で使うことはないんだけど、 EJBって使ってメリットあるの?
現状javaのプロジェクトでEJB「3」度外視するアーキテクトって居るの? faxで回転寿司されてるような種類の仕事はよくわからないけども
888 :
デフォルトの名無しさん :2012/01/05(木) 10:15:27.69
>>882 Androidなら作れるよ。iPhoneはしらん。
889 :
デフォルトの名無しさん :2012/01/05(木) 10:18:43.83
ガキじゃねぇんだから好きなもん使えばいいんだよ
890 :
デフォルトの名無しさん :2012/01/05(木) 13:01:34.38
RoRでしょ。
Springの影響を受けてEJBが 軽い設計に変化してきたからな。 もう少し時間が経てば、純正がEJBで サードパーティ実装がSpringになるだろうね。
フレームワークがどうのこうのは、言語設計とは別だから、それをもってあーだこーだ言うのはねぇ…。 秀逸なフレームワークがある=秀逸な言語 とは限らないよね。
Springとかいっていらなさすぎる。 XMLにクラス書いたって型安全じゃないし、ソース追うの面倒だし、 DBコネクションの取得をカプセル化とか、ものによってはバグの温床になるし。 ORマッピングとかDAOとかもいらなさすぎ、普通にテンポラリーテーブルとか、完全外部結合とか、分析関数とか使うし。
>>893 構造を担当するものと
処理を担当するものを比べてる時点で
お前何もわかってないだろとしか言えないんだがw
>>892 言語設計が秀逸かどうかには興味ない。
言語は秀逸でも言語外がヘボいと開発しにくくなる。
逆に言語外が充実していれば、言語は多少不足していても
開発は楽になる。
実際の開発ではそういう総合力を見てるんだよ。
総合的に見てJavaはウンコ
>>896 とりあえずお前が嫉妬してるのは分かったよ
Javaは言語より起動・動作の遅さで使えない。
いちいち起動するように作ってるのかよ
メタナンチャラを駆使したフレームワークを魔術が云々言ってありがたがってる界隈もあるけど そんなのおっかけてる時間なんてないのが実情 ライブラリ等は妙に自己主張しないで愚直に書かれてるのがいいと思う 定義元参照F3一発でライブラリのソースにアクセスできる仕組みも必要だろう
902 :
デフォルトの名無しさん :2012/01/08(日) 14:28:27.59
家政婦はメタ
903 :
デフォルトの名無しさん :2012/01/08(日) 16:14:18.59
おじさんたちが死んだらどうなるんだろうな ”おじさん” 昔の知恵、色々プログラミング知ってる クラウド!WEB!iphoneアプリ!!みたいにほざいてるクソガキじゃなくて "おじさん"たちが死んだらどうなるんだろう なんか凄いソフトとかもでなさそう 大規模なシステムもでなさそう ”おじさん”の方が今の若者より何でも知ってる ”おじさん”が死んだらやばいね
904 :
デフォルトの名無しさん :2012/01/08(日) 16:15:15.66
欧米がいるから平気だった
>>903 おじさんが死んでも
第二第三のおじさんが現れるから
問題ない。
おじさんの代わりはいくらでもいるw
>>903 なにそれひょっとして自分(の世代)の事言ってんの?
そうだとしたら一体どういう神経してんだw
908 :
デフォルトの名無しさん :2012/01/08(日) 16:21:06.90
そう?IT第一期生おじさんの方が凄い気がする 第2期とか3期とかゆとりとか昔の知恵知らなくて 段階的に学べなくてしょぼそう アセンブラとか ゲームもゆとりでUnity なんかそういうやつ増えそうC++とかじゃなくて
>>908 あー16ビットCPUを直接みたいな・・・
ごめんwあんなの必要になったら誰でも理解できると思うw
はいはい。何でも昔はすごかったw
これは企業内教育が機能しなくなっていることが原因だと思うが スキルに関しては世代内格差の広がりが危機的だ
そもそもパソコンの大先生が格上なのか格下なのかという 格付けが機能しなくなっている
年配の人に聞いた話だが、「昔は計算機をいじってれば良かったが、 最近の人は計算機科学に加えてソフトウェア工学の知識も求められるから大変だ」とか 昔の事はよく知らんけども、 プログラミング関係の領域自体が一世代前より 広く深くなっているのかもしれない
全てを知る必要はないし知ることもできない アリストテレスやダヴィンチが出てくるような時代じゃないてこったよな
社内コーディングコンテストしてみたっていうブログ見て そんなレベルでプロのプログラマーなのか?と驚愕した その程度で業務アプリとか作れるのかぁ 関数型言語がどうこうとか、クロージャーがどうのこうとか そんな知識要らなさそうだなと、思った 自分はアマチュアなので業務とかの知識や経験がさっぱり無いので 業務アプリなんて作れないわけだが RubyやPythonでスタートアップするぜっ、とかいう企業だと 少数精鋭の凄腕プログラマーがそろってないとやばそうだけど
>>915 > RubyやPythonでスタートアップするぜっ、とかいう企業だと
> 少数精鋭の凄腕プログラマーがそろってないとやばそうだけど
フレームワーク使ったら俺でも簡単にウェブアプリが作れるぜって
企業ばかりだから、少数で技術力も低いのばっかり。
そんな程度でもそこそこ作れてしまうからね。
まさにLL言語ドカタw
だいたい少数精鋭ってのは数がたくさんいて
その中から精鋭を選んで初めて作れる。
もとから少数な企業に少数精鋭なんて無理。
年棒300万で少数精鋭ですとか 頭に蛆涌いてるだろ
ウェブで成功するのに大事なのは企画だったり資金繰りだったりで、プログラミング技術なんて些細なこと。動けばそれで良い。
>>919 それを言ったらあらゆるシステムはすべて動けばそれでいい、じゃん
プログラミングなんて一切せずに、静的なHTMLだけでも成功する事が出来る。それがウェブ。
922 :
デフォルトの名無しさん :2012/01/08(日) 23:46:02.00
性的なHTMLで性交する。それが(ry
>>920 まあね
業務システムにしたって、動けば正義が当てはまることは多い
最近は大してスキルのない奴でも偉そうに
保守性がー可読性がーなどとのたまうのがトレンドみたいだがw
いや、動けばいいじゃだめだろ。 バグが大量に残ってたり、保守性や可読性が低いのは技術的負債っていうんだよ。
日本においては必ずしも「返す」必要がないんだよな 誰でも読めて保守が容易で仕様追加も簡便なつくりの場合、逆に会社が潰れかねん…
>>926 の言ってることは正しいと思う。
保守運用という名の下に、隠れて負債の返済をやってるって話もあるからな。
それが健全なことだとは思わないが。
>>919 そういうキミは何か成功をおさめたのかい?
動けばいい、が許されるのはプロトタイプだけ。企画や資金繰り、マネタイズばっかりだからTwitterやFacebookを超えるようなサービスが日本から産まれてこない。
自分でプロトタイプも作れないような企画屋はエンジニアより下。
>>903 その『クラウド』『iPhone』『webアプリ』ってのたまってるガキが、世界を変えるかもしれないぜ。
>>895 じゃ『最強のフレームワークはどれよ?』
スレ立てれば?
931 :
デフォルトの名無しさん :2012/01/09(月) 10:29:01.81
名無しでいいよ:2011/08/15(月) 23:20:15.53 ID:2fed4jwtO FNS歌謡祭やHEY!×3の制作会社 株式会社CELL 東京都千代田区麹町2―2―4麹町YTビル 前バリ・REN4・野田らに政治献金した後藤組のフロント企業 メディアトゥエンテイワン 東京都千代田区麹町2―2―4麹町YTビル
>>924 たいした開発したことないみたいだけど…。
医療系みたいな『人の命にかかわる』システムなんかじゃ、動けばいいなんて考えは許されないよ。
>>933 この板でこいつにレスしてるのお前くらいのもんなんだけど…
>>932 >医療系みたいな『人の命にかかわる』システムなんかじゃ、動けばいいなんて考えは許されないよ。
そりゃそうだ
>たいした開発したことないみたいだけど…。
ミッションクリティカルなシステム作るのが偉いみたいな考え、一体どこから出てくるのか不思議
その手のシステムって、ただ厳格なだけで別に技術的に特別高度だというわけではないと思う。
>>927 そんなやり方じゃ社員の
モチベーションはダダ下がりだろ。
先のある話には思えん。
>>935 横レスだけど、『人の命にかかわる』システムの開発には、特別に高度な技術力が要求されるよ
初期リリースで24時間365日連続稼動し、なおかつバグゼロが当然の世界
Webの世界では、ある程度のバグを承知の上で稼働を始め、
それと並行してバグ対策と機能追加を効率的に進めようとする考えが普通
両者では、デベロッパに求められる品質に対する意識とスキル(技術領域)は全く異なる
どちらが「偉い/偉くない」とか「高度だ/高度じゃない」みたいな単純な二元論じゃ語れない
人の命にかかわる場合、環境も特殊になるだろうね。 Webの世界で言えば、ブラウザをIEどころか マイナーバージョンまで指定するだろう。 OSも指定して、完全に同一の状態でないと保証しない。 じゃないと、完全な動作保証は無理だと思うんだ。 そしてそんなのが許させる世界だと思うんだ。
>どちらが「偉い/偉くない」とか「高度だ/高度じゃない」みたいな単純な二元論じゃ語れない なので >たいした開発したことないみたいだけど…。 こういう物言いはないだろうよ。ってことでは
940 :
デフォルトの名無しさん :2012/01/09(月) 12:38:30.71
MCのエンジニアが、面白ホームページ作成業に移行しても、 まぁ、最初は能率は悪いだろうけど徐々に慣れてやっていけるだろうが、 その逆は…慣れる前に火を噴いて下手すりゃ人間ごと消えるな。
>>940 その「最初」で顧客情報垂れ流して会社ごとあぼんだよ
>>938 あるある。
ネスケ2.0とか指定されたことあった。
例としてはわかるが、実際はWebブラウザ使用とかTCP/IP使用とかないわー
どんだけミッションクリティカルかによるんだけどさ
繋がらなかったら電話とFAXにするから安くしてくれというのもあったがそれで運用としてそれで本当に本当にいいのかそれで
>>936 そんなとこにコストかける理由がないんだよ
だからそれでも「いい」んだ
金がだせるならミッションクリティカルでも何でも作れるよ。
馬鹿には無理
>>945 なんで作る人が1人しかいない世界を想定してるの
馬鹿が雁首そろえても無理なものは無理
昔止められないシステムに関わってたけど、能力どうこう関係なく 単に人海戦術でやってるだけだったからなぁ。 それだけ動く金が、すごいことになってたみたいだけど。
自社でサービスを運用している側からすれば、技術的負債は死活問題だが、 請負で作っている側からすると、どうでもいいんだよな。
スレタイに言語名4つ入ってるのでいろんなスレから来る 各スレの傾向知らないと対処できんな
>>951 …まあ、PerlとPHPとRubyとPythonのアクティブなスレに常駐してれば、このスレのレスの半分くらいはスルーできるかとは思う
動けばOK、トラブったらメンテすればいい みたいな信頼性いらない世界で使われる言語だよね。
Rubyの東京ガスみたいな事例は どの言語にもありそうなものだが
Railsとか決まりに従って作れば誰でもウェブアプリが 作れますってフレームワークができてから どんどんウェブプログラマの質が下がってるよな。 馬鹿養成フレームワークだと思うわw
VB6 -> Java -> RoR ドカタが使う言語の変遷
VB6(互換性切り捨て) -> Java(互換性ばっちり) -> RoR (互換性切り捨て)
Perl(互換性切り捨て予定) PHP(互換性切り捨て) Python(互換性切り捨て) あれ? 面白いなw
Perl5はむしろ6より活発に開発が進められてね? あれじゃ、どこも当面のあいだ移行はしないだろ
Perl6はPerl5とは完全に別言語という位置づけ
Twitterとかもしょっちゅう落ちてるじゃん。だからって別にみんなあんまり気にしないし。
お前ら悪いこと言わんから、PHPとPythonやっとけって。 WEBで生きるならこれだけで現役の間は凌げるよ。
RailsとかUnityとか馬鹿養成ツールだから
結局そういうフレームワークとかミドルウェア作ってるやつは昔のやつらとかそんな感じ ゆとりはWEB
なんか非常に強い焦りを感じるな・・・ おじさん・・・危ういの?
勉強が好きで新しいものを吸収し続けていかないと結局ダメです
967 :
デフォルトの名無しさん :2012/01/09(月) 19:35:23.18
>>904 が正解だろうなぁ。
残念ながら日本の土壌では芽が出るのが難しい。
それからするとRubyはよくここまで大きくなったよ。
( ´_ゝ`)フーン
海外でrailsに使われるまでは マイナーなカルト系だったけどな
トラブったらメンテすればいいとか、そういう考えがあり得ないよね。 瑕疵担保責任をずっと抱えるとかさ。
トラブったら手動に切り替えるという考えはあり得る 自動化して手動を切り捨ててしまうのは、互換性を切り捨てるのと同じ
フレームワーク使うやつがバカなんじゃなくて、 フレームワークがバカでも使えるように作られてるだけだろ。
Unity使うやつがバカなんじゃなくて、 Unity使うやつがバカでも使えてバカがより目立ってるだけだろ
バカでもゲーム作れるっていいことじゃんw
独自フレームワーク()とかやってる方がバカだろ
PerlやPHPを使う時点でバカなので問題ありません
とりあえず俺以外は全員バカってことで手を打とうぜ
頭がいいやつってgfxみたいなやつだろ?
ゆとりがフジゴロウに勝てるわけねーじゃん
インターネットを使うやつにバカはいるかもしれないが、 だからといってインターネットを使うやつがバカとは限らんがな
982 :
デフォルトの名無しさん :2012/01/11(水) 22:22:50.27