はてなキーワード: Lispとは
例として
C言語だって、どういうアルゴリズムを使っているか?という部分で十分に意図を伝達できると思います。
逆に言えば、作り手の意図がないC言語 という場合もあるけれども、熟練すればするほど、意図を込めていく物だと思う。
実際、長年使ってこられた古いソースなのどは読み込めば読み込むほど、過去どういうバグがあって、どういう経緯でそういう書き方になったのかが見えてくる。
もちろん、こういうところには適宜コメントを入れていくけど、設計書からはうかがい知れない物が多く言語には込められていると思う。
そう言う物を設計書にとはよく言うけど、設計書ではC言語で表したいことを十分表記出来ないんですよ。
C言語でないと感銘に表記できない思想という物があると思います。
幻想かも知れないけれど。
ツールにひっかかるから、ですらないと思う。単にそういう技が必要なくなっただけ。 そもそもexploitに晒されるほどポピュラーでかつOSの動的リンク機能が使えるほど近代的な環境になってさえ、動的コードセグメントを使ってまで最適化スピードアップしなきゃいけないような変態的ケースは今じゃ殆ど無いんじゃねーの。ゲームかPC DEMOくらい? ひょっとしてケータイでもそういうことをやるのだろうか。 そもそもそれ以前にアルゴリズムの改善とかアーキテクチャの見直しとかできることは山ほどあるような気もするが。 というかツールで監視するくらいならCPUの保護機能でオフにするんじゃないのという気もする。
人工知能的なことをやりたいのであればCは圧倒的に不向きで、そもそもevalがある言語(Python/Ruby/etc..)使えばいいんじゃねーの、という話になる。もちろん Lisp/Schemeもそうだけど。。。
(追記に対してレス…)
void *(*psrc)(void *); void *pdst = (void *)psrc; 究極 printf("%x\n",(int)psrc);
そーいうのは曖昧と呼ぶの? どちらもC言語的には未定義動作で、単にコンパイラがこういう風にコンパイルしますよということが分かっているから書くのだし、何もambiguousではないよね。
そーいうことはxbyakとか使えば楽にできるとおもう
○メモリ上にプログラムを自力でロードして、それを関数ポインタに変換して関数コールすると、Exploit系のバグなのか、わざとやっているのかが外部ツールで判別付かない場合があるので、この方式は使わなくなり、現在はDLL呼び出しやSO呼び出しが一般的。
ちゃんとExploit系に使われる関数ポインタはクラックの対象ってExploitというキーワード書いたのに(T_T)。高々、コンパイラが保証してくれる範囲の関数ポインタは安全だから使えばいいと思うよ。
究極
printf("%x\n",(int)psrc);
こういう技が必要になることもあるし。
Cって面白いと思う。
char *prog="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
void *(*psrc)(void *) = void *(*)(void *)prog;
(*psrc)(NULL);
こんな感じで、データ配列のプログラムとしての実行で、昔はあったけど、いまはこういうコードはDLLとかSOとかで書くのがお作法だよねーと
さらにいえばWindwosならCOMで書けと・・・
どうみても、Code Exploitのバグに見えるもの、この手のコードは。
外部ツールがバグとして引っかけちゃうから書かないのが最近の主流だと思う。書く必要もほとんど無いし。
Lispのようにプログラム自身がメモリ上に動的にプログラムを必要に応じて計算しながら書き込んで、それを実行すれば、ある意味人工知能的なプログラムとその美しさが実現できるけど、それは一般的なプログラムの範疇ではバグの検出が複雑になるので、やっちゃダメとはいわないが特殊分野の技法だなぁと思う限り。
初めは小学生の頃か。
実物のスペースインベーダーの記憶はない。
しかし、それを皮切りにアーケードゲームのみならず、ゲームウォッチ、ケームセンター嵐などを経て、ファミコンが登場する「ゲーム」の時代だった。
「ゲーム」がコンピューターゲームの意味になった時代だった。小学生も「コンピューター」にワクワクした。
21世紀はコンピューターにより人工知能ができる。そんな時代だった。
でも、アルファベットを知らない小学生にBASICは難しかった。ぴゅう太がせいぜいだった。
「PRINT」で文字を表示する。「GOTO」で行き先を変える。それは分かった。でも何をすればよいか分からなかった。
だから「ベーマガ」で16進数を打った。でも動かなかった。何度も調べ、直し、試した。デバッグした。
でも動いた。自分の入れた文字で数字でコンピュータが動いた。自分で動かした。動かせた。
高専に進んだ。Turbo Pascalでコラムスもどきを作った。
小学生のころから6年が過ぎていた。
Turbo Cも使った。IDEで使うそれは、インタプリタのノリだった。
FM-Rでレイトレースもした。一晩かけて、エラーが起きていた。
でも、構造化プログラミングを学んだ。ポインタも学んだ。マシン語の知識が役立った。
Solarisも使った。EmacsやXも使った。オブジェクト指向も知らずC++にも触れた。
awkやsedで正規表現を学んだ。そしてperlに出会った。
コラムスもどきを作ってから6年が過ぎていた。
perlで掲示版の書き込みをチェックし、madokaで遊んだ。CGIを書いたりした。
perlと出会ってから6年が過ぎていた。
はてなに出会った。JavaScriptに出会った。
Bookmarklet、greasemonkey、Ajax。オブジェクトだらけだった。
初めはゲームだった。でも最初だけだった。
気が付いたら24年が経っている。
今、pythonで書いている。
ようやく、言語の違いには慣れてきた。でも、まだLISPを使った事はない。
道はまだまだある。未知の世界につながっている。
作りたい物が本当は何かは分からない。作れる物が本当は何かは分からない。
どんなふうに動くのかは分かってない気がするけれど、分かっている事もある。
それが今の私のstatusだ。
リブログです。
An axiomatic basis for computer programming
C. A. R. Hoare
Communicating Sequential Processes (CSP)
C. A. R. Hoare
Call-by-name, call-by-value, and the lambda calculus
Gordon Plotkin
Towards a theory of type structure
John C. Reynolds
Definitional interpreters for higher-order programming languages
John C. Reynolds
Philip S. Abrams
The Anatomy of a Large-Scale Hypertextual Web Search Engin
Sergey Brin and Lawrence Page
A Mathematical Theory of Communication
Claude Shannon
Communication Theory of Secrecy Systems
Claude Shannon
Bayesian Networks without Tears
Eugene Charniak
A Universal Algorithm for Sequential Data Compression
Jacob Ziv and Abraham Lempel
Let's Build a Compiler 1988-1995
Jack Crenshaw
Gauging Similarity via N-Grams: Language-Independent Sorting, Categorization, and Retrieval of Text
Marc Damashek
Richard P. Gabriel
Hints on Programming Language Design
C.A.R. Hoare
Why Functional Programming Matters
John Hughes
Kenneth E. Iverson
The next 700 programming languages
Peter J. Landin
Recursive Functions of Symbolic Expressions and their Computation by Machine (Part I) 1960
John McCarthy
Teach Yourself Programming in Ten Years 2001
Peter Norvig
Alan J. Perlis
The Complexity of Theorem Proving Procedures
Stephen A. Cook
Guy Steele and Gerald Sussman
A Method for Obtaining Digital Signatures and Public-Key Cryptosystems
R.L. Rivest, A. Shamir, and L. Adleman
http://www.zafar.se/bkz/Articles/ClassicCompScienceTexts
http://www.zafar.se/bkz/wiki/view/43bafac8c8570f4f
にあったけど、無くなっていたので
http://web.archive.org/web/20060823143349/www.zafar.se/bkz/home/classictextsincomputersc.html
から拾ってきた。
でも書いてる途中に↓を見つけてしまったのでした。
俺がPerlを捨ててRubyに行った理由と同じ - ’(rubikitch wanna be (a . lisper))
[Ruby] Ruby >>>(越えられない壁)>>> perl (第一種臨界不測日記)
「Perlベストプラクティス」まとめ を読んでふと「Ruby使えばいいのに」と思った - World Wide Walker
「美しいコードを書けるからRubyを選んだ」---Ruby on Rails作者 David Heinemeier Hansson氏:ITpro
Ruby on Railsはすでに60万件以上ダウンロードされました。
またRailsについての書籍「Agile Web Development with Rails」は4万部になりました。
要するに社長になってみて初めて、
「手早く書けた方が効率が良い」という当たり前のことに気づきました。
Perl/10年前で止まっているperlから脱却する方法 - TOBY SOFT wiki
lispがいかに優れているか
さすがにそれは内容(およびそこから透けて見える話し手の自意識)がキモいんだろうよ。プログラマ同士の会話ならなんでもOKって意味じゃないだろ。今回の話のポイントは、オタク同士の会話なら内容問わずキモい的な印象になりがちなのは何故かって点じゃないか。
あと、書き忘れてたけど、その流れで言えば、日本でもラテン語やギリシャ語や欧米古典文学を学ぶべきだ、ってなるのが筋なんじゃねーの?
さて、
に反論すればいいんだな。オッケー。
何をそんなにムキになってんのかさっぱりわからんが。そんなに古典が嫌いなのか?
具体的にどう役に立つんだよ。お前そういう説明全然出来てないだろ。喩え話ばっかで。
あなたが単に理解できてないだけのことでしょ。古典がステータスシンボルになるなんて自明のことなんだから。
何を言っても「そんなの役に立たん、俺の知ったことじゃない」と言われるんだから仕方ないよ。限られた範囲のことを限られた水準でしか書かない人は限られた素養だけで済むかも知れないが、それ以上のことをしようと思ったら幅広く学ぶしかないってのは自明のことなんだが。
俺はお前さんの上げたLispやら低レベル言語やらコンパイラやらの意義を、全部具体的に説明できるぞ。だから基礎教養だといってるんだ。
ほう、じゃあ例えば情報系の学科には待ち行列とかパターン認識とかそういうことを研究している人たちもいるわけだが、そういう人たちが「関数型言語やコンパイラやOSが必須科目なのはおかしい!俺はそんなものを使わないのだから学部で教えるな!必要な人だけが研究室のゼミでやったらいいだろう!」と言ったとしたらどうするのかね?あなたが言っているのは結局そういうことなんだが。あなた自身があなた自身の納得できる理由で理解しているかどうかなんてどうでもいい。俺にとっては、エンタメ系のライターがなぜプログラミングをする必要があるのか想像できないが、だからといってあなたに対して「プログラミングなんか無駄だから文章の練習をしろ」なんて強要すべきなんて思っちゃいないよ。
何度も言うように、高校では古典文学の大系を網羅してるわけじゃなくて、古典文法を教えているだけだ。それから、微積がどう関係があるんだ?あんたはどうせ、位相とか測度まで理解しようという気じゃないんだろうから、式変形ができる程度のことだったら線型代数なんかよりよっぽど簡単だろうにさ。
鼻歌交じりにバイクを解体できる外人の整備工が、箸をうまく使えなかったら、箸を使うのはバイクを解体するより難しいということになるのか?
なにを言ってるのかね。それをこそ俺はあなたに問うているのだが。
あなた、外人のプレゼンとか文章とか見たことないの?古典文学から気の利いたフレーズ抜き出したりして話の取っかかりにしたりしてるでしょうに。
つーか、そうか、一貫した主張も出来ない奴がえらそうにプログラマを語ってるのか。死ねよもう。
「できない」ことと「しない」ことの区別ぐらいはできるようになってほしいね。
誰もそんなことは言ってないだろ。さっきから思っていたのだが、君は何か俺の主張を勘違いして、明後日の方向に必死で反論しているようだな。
文学なら近現代のそれが、あるいは世界の名作文学が優先じゃないかと言ってるだけだが? 日本の古典の専門教育を優先する理由はどこにもないだろ。
だから、高校の国語教育は文学教育じゃないと言っているのに。読み書き能力の教育なんだってば。文法を教えるついでに一番有名な作品のさわりを教えておこうとしているだけだよ。
しねーよ。公教育ってのは平均と底辺を引き上げるためにやるんだぜ? 勝手に貪欲に勉強するような本当に優秀な奴は、海外留学でもなんでもやってるよ。
引き上がってすらいない君は底辺よりもっと下なんだろうね。じゃあ君は何のために大学に行ったんだ?
むしろ俺は、大学で勉強しないような奴は大学に来ていただかなくて結構だと思っている。専門学校とか、あるいは実務の中でOJTで鍛えた方がよっぽどスキルアップになるんでな。
ところで東大とか京大とかって国立なの知ってたか?東大とか京大とかの理学部や文学部を覗いてごらん、君が想定していない公教育の意義がわかると思うよ。
いや、それはどうか。逆ならまだわかるが。
自分がまだ勉強中だというくせに、えらそうに人の忠告を否定するなよ。とりあえず「不確定性原理」について調べてみな。どっちにしても、基本的に工学の理論は物理や数学からパクってきて発展するものなんだから、発想としては物理を学んでいた方がよくわかるのは自明。実際俺は、仕事で信号処理を扱うようになったとき、量子力学の教科書を引っ張り出してきてもう一度読んだよ。
だから誰も無理強いなんかしてないっての。必要なことだけ学びたい人は工業高校とか高専とか専門学校に行け、必要ないことまで学びたい奴が普通高校に行けと言っているだけなんだが。
狭い業界の技術専門誌だけに書いて生きていくつもり?
具体的にどう役に立つんだよ。お前そういう説明全然出来てないだろ。喩え話ばっかで。
俺はお前さんの上げたLispやら低レベル言語やらコンパイラやらの意義を、全部具体的に説明できるぞ。だから基礎教養だといってるんだ。
微積分学や古典文学という体系は、お前さんのあげた基礎教養科目より明らかに大きいだろ。得意不得意の問題じゃない。
鼻歌交じりにバイクを解体できる外人の整備工が、箸をうまく使えなかったら、箸を使うのはバイクを解体するより難しいということになるのか?
あと、文系でも、言語学分野の人なら基礎的な形式言語理論は押さえておいて損はないはず。
古典や漢文の知識ひけらかすことがどうプレゼンに影響すんだよ。
俺はあなたの論点の不備を一つ一つ指摘してるだけで、自分が一貫した主張をしようとしているわけではない。
どこでどう不備が指摘できてるというんだww つーか、そうか、一貫した主張も出来ない奴がえらそうにプログラマを語ってるのか。死ねよもう。
ロックやポップスを聞くためにクラシックを聞かなければ楽しさが分からない、とかいう主張はアホだ、と言ってるだけだが。聞きたい奴だけ聞けばいいだろ。
あのさあ、「ジェネラリスト」の意味わかってる?いろんな分野に視野横断的に目が効く人のことを「ジェネラリスト」っていうんだよ。数学だけ勉強してれば文学も歴史も語れるっていうのかい?
文学なら近現代のそれが、あるいは世界の名作文学が優先じゃないかと言ってるだけだが? 日本の古典の専門教育を優先する理由はどこにもないだろ。歴史については何も言ってないし。
しねーよ。公教育ってのは平均と底辺を引き上げるためにやるんだぜ? 勝手に貪欲に勉強するような本当に優秀な奴は、海外留学でもなんでもやってるよ。
いや、それはどうか。逆ならまだわかるが。
あのさあ、ライターだったらリード文に気の利いた文章一つ書けないでどうするよ。狭い業界の技術専門誌だけに書いて生きていくつもり?一般科学雑誌とか、もっとそういう野心はないわけ?そういうとき、古典の素養は必要だよ。
人間はプログラマだけじゃないんだけどね。それに、言ってること理解できてるのかなあ。プログラマにとってのLispや低レベル言語が、日本語を書く人にとっての古典にあたると言っているの。
それはあなたの場合でしょ。文系の人なんかだったら、古典なんて寝てても理解できるけどLispなんて一生理解できないといわれると思うよ。あなたは、自分が理解できなかったものを過度に難しいと思い込んでるだけ。
へー、あなたプレゼンしないんだ。顧客や投資家向けに気の利いたフレーズ一つ思いつかないようでどうするの?
観光が産業として大したことない、というからその点に反論したまで。俺はあなたの論点の不備を一つ一つ指摘してるだけで、自分が一貫した主張をしようとしているわけではない。
日本文学についてはそうかもな。でも、当の近代文学もろくに読んでない奴が、下敷きにだけ手出しても意味ないだろ。まずそっちが先じゃないかな。
じゃあ、ロックやポップス聴いてない奴がクラシック聴いちゃだめなわけか?そんなの勝手だろ。古典の方が近代文学より好きな人間だって沢山いるよ。俺だってそうだが。
あのね、そんな優先順位つけるまでもなく、全部できると言っているの。
あのさあ、「ジェネラリスト」の意味わかってる?いろんな分野に視野横断的に目が効く人のことを「ジェネラリスト」っていうんだよ。数学だけ勉強してれば文学も歴史も語れるっていうのかい?
足りてるわけねーだろ。仕事やりながら勉強してるような状態だよ。これが、高校でやってなきゃ偏微分とかと同レベルの理解度でしかなかったんだと思うとゾッとするね。基礎だけでも仕込まれててよかった。
自分が大学でサボってたことを自慢するなよ。普通はもっと勉強するんだよ。自分が勉強しなかったことを、「高校で教えてくれなかったせいだ!」なんて言ってたら、これだからゆとりはって言われるだけだよ。
数学系でも電子工学系でもねーもん。適当に試験前の一夜漬けで切り抜けてた。終わったら速攻忘れた。あと量子力学なんか何に使うんだよプログラマが。
使わないことは一切勉強しない人なんだ。ふーん。隣接分野から発想って出てくるもんだけどね。忠告しとくけど、俺が挙げたのは工学部のどこでも学びそうな分野だし、それから量子力学知ってると信号処理がわかりやすくなるんだけどね。まあいいや。
俺が思ってるものと比べてるんじゃない。「古典と」比べてんだよ。ちゃんと答えろ。
なんでそんなエラそうなんだ?だから、比べられないって言ってるだろう、何度も。少なくとも答えが自明に出る問題ではないし、客観的に妥当性のある調査ができるとも思えないと言っているの。