レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
ヒッキープログラミングスレ
プログラミングの話題のスレ
質問・相談
初心者からプロまで
プログラミングに関することなら何でもOK
簡素な作りの言語ならx86アセンブリより簡単だと思う
うーむ、自前環境上ので動かすためだけのコンパイラかあ・・・
情報処理試験のCOMET II あたりを拡張して作ればそんなに難しくは無いか・・・?いや高いわ
一応大学でCASL2とかVHDLとかアーキテクチャ系の授業も受けたは受けたが正直高難度ですわ
COMET IIの最低限仕様満たすだけのそれっぽい動作するだけのものなら作れるかもしらんが、おそらくそれはただのインタプリッタだろうしなあ・・・・
まぁそれをインタプリッタって言ったらJavaVMも.NET Frameworkも近いジャンルのものだろうけど
自作でコンパイラ作ってゆくゆくは簡素なレベルでいいのでOSとか作ってみたいと思ってはいるにはいるが
年齢的にもアレだし、できっこない理想はあきらめて、簡素な自作仮想マシンとかがいいのだろうか
OSにしろ仮想マシンにしろハードウェアに関する知識も必要だし、そこらへんはまだまだ全然分からんしなあ、遠いなあ・・・
今日の目標までは完成したから寝る!
ひとまずMBRあたりのブートレコードとかがやってることを調べるからやってみたいんだよね
MS-DOSの起動ディスクとかCOMMAND.COMとかあの小容量のフロッピーディスクで色々やってのけるのすげえと思うわ
古いPCなんかは全然少ない容量とかで動いてたわけだしファミコンやゲームボーイもすげえわ
>>727
おつかれ
おやすみ
COMMAND.COMなんかCUIだけどI/O出力やってのけるしx86の命令セットに気軽にI/O出来るもんがあるのか、メモリ上にアクセスを容易にするシステムコールでもあるのか
linuxなんかもインストールとかx86だったらディスプレイやキーボードやPCのメーカー問わずにCUIなら起動操作できる雰囲気があるし(実際そうかは知らんが)
日本語版のMS-DOSのCOMMAND.COMなんかちゃんと日本語表示できるしな、あれはすごい
おそらくパソコン本体にはアスキーコードに相当する半角英数くらいの画面出力機構くらい備えてそうだけど
日本語文字は画面出力用の日本語文字のビットマップの辞書セットとか必要だろうなあ
英語モードのCOMMAND.COMじゃ日本語文字が文字化けするし
linuxやfreebsdでも日本語文字が文字化けして表示できず色々と苦労したし
今気づいた、苦労って大事だなって
色々とあれこれ試して困難を乗り越えようと手を尽くすことによって
人は成長するんだな
なるほど、俺も成長してたんだな、ちゃんと
まあ、困難を乗り越えようとすることで成長するのだとしても
立ち向かってきた困難は俺の趣味の範囲だから立ち向かえたのであってだな
実社会に出て行こうというのは俺の趣味でも何でもないから立ち向かう勇気もモチベーションもねえんだよ!
今までヒキこもって逃げてきた俺が今更立ち向かえるわけがない、ギャップが大きすぎる、
逃げ始める前、そう幼稚園くらいのころあたりから人生やり直せるのなら、まっとうになれるかもしれんが
今さら幼稚園児か小学生レベルのコミュ力しかない30の俺が社会に出ていけるわけがない
そうさ、全ては逃げてきた自分の自業自得ってやつよ・・・こうしてプログラミングに没頭することで嫌なことを忘れる・・・・もうそれでいいんだ・・・
さて、今後の方針をどうするか
このまま純lisp関連を続けるか
MP3プレーヤーの制作のほうを急ぐか
あるいは、絶対的に改修が必要なPHPで作ったサイトに取り掛かるか
純lispはコンパイラを作ってみたいと思ってる俺にとっては近いジャンルの行為だからすごく面白いし楽しいけど
実生活上ではmp3プレーヤーのほうが性急に欲しい
だがPHP製のサイトのほうは利用者がそこそこいるし俺も使うし、レン鯖がPHPを5.5にバージョンアップさせる前にやらんとマズいし
ただmp3プレーヤーのほうは設計がまとまってないから遅々とした進行状況だし
PHPサイトのほうはPHP覚えたてのころの糞コード群を相手にせにゃならんから一番キツいし
嫌なことから逃げる癖に楽しさが追加された純lisp作成・・・一応のlispコード実行は出来るからevalもlispコードで再現してチューリング完全をテストしてみたいのはやまやまなんだが・・・
やってみたいといったらPHPに替わるもんになるか分からんがperlとかpythonとかrubyのcgiも設置できるとかだからそれもやってみたいんだよねえ・・・
pythonとrubyはインストーラ使わないとダメ臭いからwindowsに入れてないけど
まぁインストーラ使わないから汚染が無いかといえばそうでもないしな
Maru-Janとかいうネット麻雀のアプリを手動展開で入れたのに管理者権限も発動してないのにスタートメニューに入れられた色々仕込まれたしな・・・
ファイルやフォルダをパーミッションで管理できるunix系がマジうらやましいわ
とは言え手動でスクリプトを実行したらそれはたぶん自分の権限下だから自分のファイルは保証ないか・・・
まぁシステム汚染が少ないというだけでもunix系はうらやましい
まぁWindowsも上位エディションとかだとパーミッションの設定が出来るらしいが
NGEN v4 を止めて手動に切り替えるバッチを書いたった
このヒキ板でやたらとレス数が多いなこのスレ
2chのほうのヒキ板ののプログラミングスレでやたらHaxeが持て囃されてたけど
ム板のHaxeスレのほうにも火がついててワロタw
あのスレほとんど過疎ってたのにw
http://iup.2ch-library.com/i/i0936522-1371232731.png
やっと描画部分がとりあえず動くようになった
その部分のコード汚いけどもう動くからいいや
おおすげえな!
関係ないけどDebian使ってるのか、linuxはいくつかディストリ試してみたけどDebianのsqueezeが一番気に入ったわ
画像見て気になったのは座標指定はリストでないあたりかな
古いBASIC系だと LINE (X1, Y1) - (X2, Y2)みたいな指定が多いからさ
Java MEとかAppletとか作ったときのdrawLineとかだとそうなってないから使い勝手としてはやはり全部並べたほうがいいんだろうな
たしかHTML5のCanvasのlineToも全部同じに並べてたし古いBASIC系が異常ってことなんかな
自分が使ってたsqueezeはなぜかkernel failureが連発してあまりいい印象はなかったなあ
aptの依存関係が修復できないくらい壊れて使えなくなったこともあったし
引数に関してはリストしていしないのが普通だと思ってる
プチコンでもx1,y1,x2,y2みたいな指定方法だった
まぁそれがデファクトスタンダードってやつなんだろうな
古いBASIC系しかいじってない俺が時代遅れ・・・・
でもボタンとかラベルみたいなウィジットが使えないんだよなこれ
Panelに図形を描くことしかできない
たしかに座標のxとyを別々に管理したいときとかだと座標コンテナみたいなので渡すのはコード書くとき面倒そうだもんな
drawLine new Point(X1,Y1), new Point(X2,Y2)
とかなったら面倒すぎるもんな、逆だったら
drawLine Point1.X, Point1.Y, Point2.X, Point2.Y
って感じか、まぁこれならオーバーロードで2種類用意するほうが普通か
ボタンが使えないってJavaVMの仕様とか?
Swingはハローワールドしかやったことないから分からんから役に立てなくてスマン
いや、Panelの上に図形を描く機能しかつけてないんだよ
ボタンやその他の部品を全部ラップするのは面倒すぎる
なるほどね、”面倒さ”が最大の敵か、どの程度モチベーションを保てるかだな
Javaって任意のクラスのインスタンス作成とかやメソッド呼び出すようなシステムなかったっけ?
まぁlispコード上でJavaのクラスやメソッドを呼び出すってのもアレだが
あと設計もかな
これだけでもかなり手こずった
描く図形を全部キューに記録しておいてそれをpaintComponentが呼び出された時に全部描画するようにしないと動かなかったから
それを自前で実装したらかなりコードが汚くなってしまった
>>759
あまりJavaしらないんだよ
動くものは作れるけど詳しいことはさっぱり
俺もJavaはあんま詳しくないし、
大学時代にJavaApplet作る授業あったけど先生が容易したプリントのコード入力してコンパイルして実行するだけのものだったし
Java MEは携帯のアプリだけど自分で遊ぶ用にちょろっとゲームや、ツールや、あとはプログラミングみたいなアプリも作ったけど、これも参考サイトのをほぼマネして作ったようなもんだし・・・
Java詳しくないんなら>>759 のことは忘れて
あなたがJava詳しいと思ったから、>>759 はうるおぼえで確かな話じゃないけど、そういう感じのシステムあった気がしたから何でそれを実装しないのか(俺の今後の参考のために)理由が気になっただけだから
他の言語はあまり知らんけどVB6とかだと
CreateObjectとかで事前バインドしてないライブラリ使ったり
CallByNameで対象オブジェクトのメソッド呼んだり、プロパティ変更したりするからさ
似たような感じで実装とかできないのかなーって思っただけよ、実際に作ろうとしたらもしかするとすごく難しいのかもしらんけど
そうえいばjavaで作られたclojureにそういう機能があった気がしたから調べてみたらあったttp://ja.wikipedia.org/wiki/Clojure
これのGUI版のハローワールドでswing呼び出してるけどどうやってやるか全然わからん
>clojure
そのwikipediaをざっと見てみたけど
面倒そうな機能は丸ごとjavaに投げててワロタ
clojureはjavaのバイトコードにコンパイルされるのか
ならばバイトコードの仕様通りに引数とかスタックに詰んでクラス名とメソッド名をコールするだけかな
なるほど
まずはjavaのバイトコードにコンパイルする機能を付けないとダメなのか
これ俺だけじゃ思いつかなかったよ、貴重なアドバイスありがとう
メソッド呼び出しは分からんけど
コード上なら
m = MyClass.getClass().newInstance();
とかでクラスのインスタンスなら作れたと思うから
(java-class "MyClass")
とかでインスタンス作るくらいならできそうだけど
メソッドとかプロパティとかメンバアクセスやインターフェースとかどうするんだろうな
ああ、任意クラス取得は
Class.forName("MyClass").newInstance();
か
Class (Java Platform SE 6)
http://docs.oracle.com/javase/jp/6/api/java/lang/Class.html
なるほどね、Classクラスにインスタンス生成からメソッド取得まで一通りそろってるくさいね
それ使えば楽にJavaの資産使えるかな
なんかもう寝たほうがいい時間なのに興奮してきた
すげえな、究極ClassクラスとObjectクラスだけでなんやかんやできそうだな、面倒そうだが(笑)
まぁバイトコード上のデータ見ればクラス名とか定数としてそのままで羅列されてるしね・・・JavaVMの仕様上で言えばそう難しくないって話か
たしかね、>>759 の話を知ったのはjava製の麻雀ゲーム(ローカルアプリ)の公開してるサイトだったかで
インターフェースを実装することで自作のコンピュータ対戦相手の思考処理のクラスを入れられるとかのやつで
その実現方法にそんな感じのことやってたんだよね、それが印象的でちょろっと調べて面倒そうな感じだったから
その時はあんま深く調べなかったんだけどw
まぁ訊かれても無いのに身の上話とかしてるわけだが俺ってやつわw
Classクラスの使い方説明してるサイトとか見ないと流石にAPIドキュメントの記述だけじゃ扱うのは俺には無理かなあ
機会日本語訳だからというわけじゃないが、イミフな記述多いし
そういやJDK7の日本語ドキュメントも公開されてたんだっけか、まぁDebianなら安定板ばかりという話だしOpenJDKだしまた違うかもしらんが
>>751
ちなみにsqueezeが気に入った理由は当時使ってたPCにインストールできたディストリがsqueezeだけだったというだけ
knopixやpuppyとかのliveCDすら動かんかったし、(他のPCでは使えたんだけどね)
別のパソコンにfedora入れて使ってみたり、大学のPCにはRed Hatが入ってたからそれ使ってた(くだんのJavaAppletの授業で使ってたわけだが)
今はopenjdk6使ってるわ
Classクラスについてはどうやって扱えばいいか全然わからん
そろそろ体系的にJavaを勉強したほうがいい気がしてきたけど今日はもう寝る
生活リズムは守ったほうが健康にいいからな
おやすみ
>>777
squeezeって最近じゃない?
少し前まで大学生だったのかな
>>778
すまん、時系列的には書いてない
red hat使った大学時代は10年以上前、squeeze使ったのは数年前だ(今もVirtual Boxにインストールはしてあるが)
天鳳とかネットサーフィンが主の俺にとってはLinuxやFreeBSDのデスクトップ環境は無用の長物だったがな(しかもインストールしたPCがポンコツの希少種すぎてアホ動作しかしなかったが)
Virtual BoxにインストールしたDebianとかFreeBSDとか入れてマジ感動したわ、ちゃんとしたデスクトップ環境が築けたからな・・・もうホントあのPCはポンコツすぎた
あのポンコツPC上では
Debianはまだよかった、lxdeのやつが入ったから(色々アプリがハードウェア起因のエラーでまくりだったが)
FreeBSDなんか最小構成のCUIのみの簡素なやつしかインストールできなかったからな、ちまちまX Window入れてWindow Manager入れて色々試して大変だったな
しかも結局日本語環境構築できたのがWindow Makerだけで、圧倒的知識不足だった・・・まぁ今も知識は増えてないが、まぁこちらもハードウェア起因のエラーでまくりで酷かった
それがどうだ、このしょぼネットブックではあるがVirtual Box上にDebianもFreeBSDもインストールしてみたら!普通にデスクトップ環境入るし普通にGNOMEも動くし何これすばら!
だったけど、まぁPCのスペック上仮想デスクトップとして普通に使うには無理があったがな
結局今はDebianをHTTPサーバーとしてだけ稼働させてるわ、俺がやってるサイトのテスト環境として・・・レン鯖がlinux鯖だしね
またどうでもいい自分語りに脱線してしまったw
>>751 俺はliveCD以外のlinuxディストリは今は亡きPCとVirtual Box上とVirtual PC上でしかインストールしてないから一般的なDebianの具合とかはちょいと分からん
>>778
簡単にググってみたけど
Classクラスを使うのってリフレクションって言うらしいね
Javaリフレクションメモ(Hishidama's Java Reflection Memo)
http://www.ne.jp/asahi/hishidama/home/tech/java/reflection.html
このサイトちょいと分かりにくいけど、もうちょっとちゃんとググれば分かりやすいサイトとか出てきそう
Java リフレクション が簡単に / Chat&Messenger
http://sattontanabe.blog86.fc2.com/blog-entry-35.html
この人のフレームワークを借りるとかすれば簡単なのかな
lispで対応を考えるなら
(setq myclass (javaclass-newinstance "jp.hikky.unko.MyClass" x y))
(setq returnvalue (javaclass-invokemethod "hoge" a b c))
みたいな感じになるのかな?
問題は変数の型として新しくJavaのクラスのインスタンスへの参照型みたいなのが必要なのかなん
しかしそうなってくると>>747 みたいなlisp版のwindow扱う関数とか描写関数とかとうまく折り合いが付かなそうだな
Java言語のClassクラスが持つちょっと不思議な性質について - 達人プログラマーを目指して
http://d.hatena.ne.jp/ryoasai/20110329/1301414299
そうかあ、Javaのクラスには <T> みたいな感じの対応する型を指定するみたいなシステムがあったなあそうなると
MyClass<Integer>(x,y)なら
(setq integerclass (javaclass-getclass "java.lang.Integer"))
(setq myclass (javaclass-newinstance "jp.hikky.unko.MyClass" (integerclass) x y))
こんな感じか、まぁここまでやるとlispコードでアプリを作るくらいなら最初から最後までjavaだけでアプリつくればいいジャんって話になっちまうか・・・
いやいやまて、この設計だと問題があるな
MyClass<MyClass<Integer>>みたいな糞みたいな宣言ができなくなるなあ・・・
あ、でもそのサイトだと<T>を使ったのはエラーになるかんじ?
仮にlisp側から呼び出すのを実装するとClass<Object> c = Class.forName("MyClass").newInstance();になるのか、lisp上で型名とか指定とか無意味か
間違えたObject<Object> c = Class.forName("MyClass").newInstance();だな、Classで受け取るなら Class<Object> c = Class.forName("MyClass");か
Javaは詳しくないから<T>これとか使い方分からんがClass<?> c = Class.forName("MyClass");なのかな?あとObject<Object>はエラーだっつうのw
まぁ一度Classクラスの変数に入れるのは手間だからObject c = Class.forName("MyClass").newInstance();といったところなのだろうか
まぁともかく俺のレベルじゃJavaのこの機能をlispでラッピングするのは無理だわ
javaのこの機能を俺が使うことは当面なさそうだし、純lispかmp3プレーヤーかphpサイトのほうにちゃっちゃととりかかるべきだな
なんか糞面倒だしただの劣化clojureになりそうだしこのリフレクションとかいうのは諦めようかな
この機能はゲームのAIで使えるみたいだからその時があれば覚えとこう
グラフィック機能についてはお遊び程度で満足したからあとはマウスと画像を使えるようにすればいいか
あああ、純lispに設計ミスがあったぽい・・・オオ・・・マイガ
んん、まて純lispの論文を見直したら、間違って無かった、アレ?あれ?よく分からんくなってきたぞ
うーむ、これ確実に”リスト”という区切りがあるのあ
lispを配列構造にまとめて収めようとするときリストの単位の区切りのマークが必要ってことか・・
そんなことないと思う
((A . B) C) と (A B C) じゃあこれって同じリストってこと?
もしリストの区切り情報なしに配列に収めるとすると
((A . B) C)も(A B C)も A B C NIL というデータ上表現は同じになって同じリストってことになるけど
論文のだとcar[((A . B) C)]=(A . B)ということだから情報リストの区切りが存在すると思うんだけど
>>807
{{A . B} C}と{A B C}にすればいいと思う
carはリストの先頭を
cdrはリストの2つ目以降を
得る関数にすればいいんじゃないかな
俺がやろうとしてることは単純な配列上にlispのコードを並べようという話なんだけどリストの区切り記号を入れないとダメかなあって
#define NIL 0
int list[100];
list[0] = 'A'; list[1] = 'B'; list[2] = 'C'; list[3] = NIL;
このlist[]に((A . B) C)を入れようとすると((A . B) C)は((A . B) . (C . NIL))だけどリストの区切りマークの概念がないと
list[0] = 'A'; list[1] = 'B'; list[2] = 'C'; list[3] = NIL; になって(A B C)と同じデータ構造になっちゃうから
もし((A . B) C)と(A B C)が違う構造のデータであるなら読み込めないかなあって
同様に((A . B) . C) と (A . (B . C)) のデータ構造が違うのならやはり配列に区切り文字を入れないといけないけど単純にドットのデータいれるだけだとこの2つは同じ
list[0] = 'A'; list[1] = '.'; list[2] = 'B'; list[3] = '.'; list[4] = 'C'; になっちゃうし・・・
((a . b) c)は(cons (cons a b) (cons c nil))で
(a b c)は(cons a (cons b (cons c nil)))だからなんかおかしい気がするが気のせい?
リストの最後がnilじゃない時とそうであるときの処理が大変なのかな
もしそうなら前に俺が抱えてた問題と同じみたい
((a . b) . c)をCライクな書き方をするなら
sublist[0] = 'A'; sublist[0] = 'B';
list[0] = sublist; list[1] = 'C';
になるはず
となるとリストの区切りとして括弧の情報が必要ってことなのか
list[0] = '('; list[1] = '('; list[2] = 'A'; list[3] = 'B'; list[4] = ')'; list[5] = '('; list[6] = 'C'; list[7] = NIL; list[8] = ')';
((A . B) C)はこんな感じか
>>814-815
詳しく説明ありがと
やはりその感じだとリストの区切りがあるんだね・・・
あとドットの扱いは(gensym)で作られたシンボルにして間違った位置ならエラーが出るようにしてる
配列じゃなくてリスト構造ってことか
struct list {
void *data;
list *next;
};
ってところか
>>819
Cで作るならそんな感じ
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板