【超高速】C/C++に代わる低級言語を開発したい 4
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/04/23(金) 08:50:46しかし、2010年の今、もしもCが発明されていなかったとして、低レベルなシステム開発のためのプログラミング言語を
新たに作るとしたら、Cとは違う言語になるだろう。少なくとも、全く同じにはならないはずだ。
そこで、このスレッドでは、
低レベルなシステム開発のためのプログラミング言語
を一から考えたい。
既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、
「既存のXX言語を使えばいい。」という類の発言は無意味である。
「既存のYY言語のZZ機能は、WWと言う点で有用だから採用したい。」という発言は歓迎だ。
現代の一流のプログラミング言語研究者が、最先端の研究成果を盛り込んで、
一から低レベルなシステム開発のためのプログラミング言語を作るとしたら、どのような言語になるだろうか、
という観点で考えたい。
◆前スレ
【超高速】C/C++に代わる低級言語を開発したい 3
http://pc12.2ch.net/test/read.cgi/tech/1271086841/
0002デフォルトの名無しさん
2010/04/23(金) 11:14:390003デフォルトの名無しさん
2010/04/23(金) 13:22:01盛り上がってたんだな
0004デフォルトの名無しさん
2010/04/23(金) 17:04:26言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0005デフォルトの名無しさん
2010/04/23(金) 22:56:07それならCにできないけど低級言語に欲しい機能を挙げてみようぜ。
・Lispなみに弄くれるマクロ
- テンプレート
- 正規化された構文(S式とか)
・Forthなみに弄くれる駆動レコード
- コルーチン
- 強制インライン展開(レコードを新しく作らないルーチン)
- 駆動レコードへのアクセス
・実行制御
- 高度な並列処理(トランザクションとか)
- アトミック操作
- リアルタイム操作
こんなもんかね? 他にどんなの欲しい?
0006デフォルトの名無しさん
2010/04/23(金) 22:58:13ネタとしか思えない
S式とかマクロとか言ってる人は
ttp://www.atmarkit.co.jp/news/200909/07/lltv02.html
こういう方向性もあるよ
0007デフォルトの名無しさん
2010/04/23(金) 22:58:15- ブロックを明示しやすくて文でクロージャ作れるし{}がいいと思う
- オフサイドルールはコードはすっきりするけど賢いエディタ前提で深さがわかりにくい
- Cよりシンプルな構文が望ましいが別にC系でいいんでは
- 演算子の再定義はスパゲッティ化しやすいから不要
- マクロもインラインとか定数型などの別な方法で実現可能なので不要
- XMLなんかは外でやればいいんでは
- 勝手にデータを付加しないASN.1とかCの構造体的なメモリイメージと直結したデータ構造
- 動的型付け、GCや動的メモリ管理は明示的に利用を限定出来るならいいかも
- その他のシンタックスシュガーは適度にアリ
0008デフォルトの名無しさん
2010/04/23(金) 23:08:10(1)ハードウェアを直接操作する低レベルの記述が可能
(2)プログラマーが勘違いしてプログラマーの意図と違う動作をしないように言語仕様が直感的で学習が容易
(3)最新のオサレ機能が使えてワクワクしながらプログラミング可能
◆主な要望◆
・デバドラ屋だって、オサレ言語で開発したい!
・プログラマーの言語仕様の学習不足によるヒューマンエラーを最小限にするために、できるだけ小さな言語仕様にしたい。
・組込み屋だけど、関数型とダックタイピングしたい。
・shared_ptrの構文糖が欲しいな
・低レベル記述性(絶対条件) > 構文の美しさ(読みやすさ、学習の容易さ) > 再利用性(抽象性)
・算術演算以外の演算子は後置
・割込み、例外、非同期IOとかを統一扱えるイベント機能が欲しい。
0009デフォルトの名無しさん
2010/04/23(金) 23:12:54>割込み、例外、非同期IOとかを統一扱えるイベント機能が欲しい。
ここで言う例外はCPU例外だよね。
C言語の代替案を考えるのだから、この言葉で混乱したくないので
以降、CPU例外は、「CPU例外」、プログラミングの例外処理は
「例外処理」と書こうではないか。
0010デフォルトの名無しさん
2010/04/23(金) 23:19:54> ここで言う例外はCPU例外だよね。
いや、新言語の構文・実装はまだ明確ではないが、既存言語のtry-catchに相当するものだよ。つまり「例外処理」。
「CPU例外」は割込みに含まれる。
それらを統一的に扱うことを考える。チャレンジングな試みだ。
0011デフォルトの名無しさん
2010/04/23(金) 23:20:34言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0012デフォルトの名無しさん
2010/04/23(金) 23:21:25まずPart10までに例外に決着な
0013デフォルトの名無しさん
2010/04/23(金) 23:21:40京都大学霊長類研究所 必死過ぎるww
0014デフォルトの名無しさん
2010/04/23(金) 23:29:250015デフォルトの名無しさん
2010/04/23(金) 23:33:070016デフォルトの名無しさん
2010/04/24(土) 00:11:17http://super.para.media.kyoto-u.ac.jp/~tasuku/sc/index.html
0017デフォルトの名無しさん
2010/04/24(土) 00:56:05仮引数と仮引数の型が隣接しないってどんだけクソ言語だよw
0018デフォルトの名無しさん
2010/04/24(土) 02:38:19自動変数がスコープから外れるときに発動する仕掛けが欲しい。
0019デフォルトの名無しさん
2010/04/24(土) 02:43:54もう、C/C++ でいいじゃん
0020デフォルトの名無しさん
2010/04/24(土) 02:47:49>「既存のXX言語を使えばいい。」という類の発言は無意味である。
0021デフォルトの名無しさん
2010/04/24(土) 03:03:590022デフォルトの名無しさん
2010/04/24(土) 09:29:18rubyもそんな感じじゃなかったっけ
0023デフォルトの名無しさん
2010/04/24(土) 09:30:28それを、オナニーと呼ぶんだよ
0024デフォルトの名無しさん
2010/04/24(土) 11:30:120025デフォルトの名無しさん
2010/04/24(土) 11:36:57> ・Lispなみに弄くれるマクロ
> - テンプレート
> - 正規化された構文(S式とか)
先ず、これが欲しい。
0026デフォルトの名無しさん
2010/04/24(土) 12:11:030027デフォルトの名無しさん
2010/04/24(土) 12:15:490028デフォルトの名無しさん
2010/04/24(土) 12:16:16とことんリファクタリング機能とかで楽できる言語がいいよ。
0029デフォルトの名無しさん
2010/04/24(土) 12:47:520030デフォルトの名無しさん
2010/04/24(土) 13:05:32エディタ(Emacs含む)で書く奴がいるが、そいつらは変態なだけだ。
Cやらはマクロでトークンの置換とかヘタにできちゃうから、
リファクタリングツールを作成しづらい。
0031デフォルトの名無しさん
2010/04/24(土) 13:21:100032デフォルトの名無しさん
2010/04/24(土) 13:26:270033デフォルトの名無しさん
2010/04/24(土) 13:31:050034デフォルトの名無しさん
2010/04/24(土) 13:31:420035デフォルトの名無しさん
2010/04/24(土) 13:33:310036デフォルトの名無しさん
2010/04/24(土) 13:37:360037デフォルトの名無しさん
2010/04/24(土) 13:38:350038デフォルトの名無しさん
2010/04/24(土) 13:38:42これを統合開発環境と言わずして何をそういうのでしょう。
0039デフォルトの名無しさん
2010/04/24(土) 13:39:160040デフォルトの名無しさん
2010/04/24(土) 13:44:120041デフォルトの名無しさん
2010/04/24(土) 13:53:59じゃあ、Checkstyleやらリファクタリングやらはどうなんだろう。
クラスの階層を出せるだろうか、JARの中もきちんと検索できるだろうか。
もはやJava開発って↑みたいな機能ぜーんぶ前提で
動いているよなあ。(少なくとも業務系は)
0042デフォルトの名無しさん
2010/04/24(土) 15:44:56新言語はそんな言語にしたいです。
0043デフォルトの名無しさん
2010/04/24(土) 15:45:460044デフォルトの名無しさん
2010/04/24(土) 15:48:27emacsではelispが動いているんだぜ。
できないことなんかないだろ。
0045デフォルトの名無しさん
2010/04/24(土) 15:49:190046デフォルトの名無しさん
2010/04/24(土) 15:57:16emacsのマネしてるだけ。
0047デフォルトの名無しさん
2010/04/24(土) 16:04:40Cでは、引数がポインタ型でなければ関数からの出力にはなり得なかった。
C++では、参照型の仮引数があるため、ポインタ型ではない引数であっても関数からの出力にはなってしまう。
下手に機能を増やすと使いにくくなる典型的な例だ。
0048デフォルトの名無しさん
2010/04/24(土) 16:06:24実用とか互換性とかにばかり気をとられていると、
すぐにそういう問題を無視しちゃうんだよね。
だから教育用低級言語として開発した方がすっきりした物が作れるんじゃないかな。
0049デフォルトの名無しさん
2010/04/24(土) 16:08:200050デフォルトの名無しさん
2010/04/24(土) 16:11:19それは低級言語じゃなくて低脳言語
0051デフォルトの名無しさん
2010/04/24(土) 16:14:32その代わり、参照なら出力がNULLでないことを保証できるんだけどね
NULLを脱参照するような真似をしなければ
0052デフォルトの名無しさん
2010/04/24(土) 17:05:37const参照だけ使えばいいよ
0053デフォルトの名無しさん
2010/04/24(土) 17:09:51じゃあ、全プログラマーに周知徹底してくれ。
使える機能であれば、必ず使う人間が出てくるものだ。
そういう機能があるということがそもそも問題なんだ。
0054デフォルトの名無しさん
2010/04/24(土) 17:12:11それをさぼってバグが入り込んだり
そもそもNULLが渡された際の挙動が定義しづらかったりで
別の所でバグの温床になるだけだろ
0055デフォルトの名無しさん
2010/04/24(土) 17:15:180056デフォルトの名無しさん
2010/04/24(土) 17:16:24後者が良さそうに見えるけど、ユーザーの不満は増える。その例がTeX
0057デフォルトの名無しさん
2010/04/24(土) 17:19:030058デフォルトの名無しさん
2010/04/24(土) 17:21:310059デフォルトの名無しさん
2010/04/24(土) 17:22:010060デフォルトの名無しさん
2010/04/24(土) 17:41:100061デフォルトの名無しさん
2010/04/24(土) 17:44:39治安でも同じことが言える、単なる一般論
一般人を低能と切って捨てるのに新しい言語を作りたいって?
そんなのお前以外誰も使わないだろうな
0062デフォルトの名無しさん
2010/04/24(土) 17:47:400063デフォルトの名無しさん
2010/04/24(土) 17:48:30文脈読めないの?
0064デフォルトの名無しさん
2010/04/24(土) 17:49:020065デフォルトの名無しさん
2010/04/24(土) 17:50:410066デフォルトの名無しさん
2010/04/24(土) 17:51:110067デフォルトの名無しさん
2010/04/24(土) 17:53:19自由だけど不安定か、不自由だけど安定かの問題だよ
後者が良さそうに見えるけど、ユーザーの不満は増える。その例がTeX
0068デフォルトの名無しさん
2010/04/24(土) 17:56:260069デフォルトの名無しさん
2010/04/24(土) 17:58:010070デフォルトの名無しさん
2010/04/24(土) 18:06:27この辺って、低級手続き型高水準言語のCと相性悪い、
と思うんだけど、もう少し詳しく説明して欲しい。
あんまり知らないんだよね、S式のメリットとか、
プログラミングパラダイスじゃなくて、パラダイムが
まるで違って、テレコテレコになりそうな気もするんだけど、
S式のメリット、Lisp並のマクロとかは、別レイヤーの
話のような気もするんだけどどうだろうか?
あれば便利なのは疑いようが無いんだけど、rubyとか
やっぱり、そういうレベルの言語の話ではないのだろうか?
と思うのですが。
0071デフォルトの名無しさん
2010/04/24(土) 18:06:450072デフォルトの名無しさん
2010/04/24(土) 18:08:55> この辺って、低級手続き型高水準言語のCと相性悪い、
> と思うんだけど、もう少し詳しく説明して欲しい。
別にCを作るわけじゃないんだけど、Cとの相性の悪さを説明する意味あるの?
0073デフォルトの名無しさん
2010/04/24(土) 18:11:17お前、何が問題なのか常に見えてないんだな
0074デフォルトの名無しさん
2010/04/24(土) 18:12:250075デフォルトの名無しさん
2010/04/24(土) 18:13:42だよね、const参照をデフォルトにして、書き換えの場合、
variableキーワードを追加って言うのが、理想だったよね。
CとC++にそういうのが多すぎると思う。
必要最小限の拡張というポリシーが破綻してきてるので>>1
なんだと思う。
0076デフォルトの名無しさん
2010/04/24(土) 18:14:270077デフォルトの名無しさん
2010/04/24(土) 18:16:550078デフォルトの名無しさん
2010/04/24(土) 18:20:22Cのマクロは貧弱すぎるってことじゃないの。
確かに、実行時の処理を抽象的にし過ぎると低級手続きの記述がしづらくなるかもれないけど
もう少しコンパイル時に処理はいろいろ便利に記述できてもいいと思う。
0079デフォルトの名無しさん
2010/04/24(土) 18:21:12C的な言語との相性の悪さに同意いただいて何より、
であるとするならば、アセンブラとの相性の悪さ、
と言うか、Lisp言語の一行が、アセンブラで数百行にも
数千行にも展開されていくとなると、これはもう、
低級高水準言語じゃなくて、高級高水準言語だと思うので、
CやC++に代わる、という当初の目的よりは逸脱してると
考えるのです。
もろちん、もちろん、そんなことはない、マシンコードをよりよく
扱うためにこそ、S式なのだ、という見解もあるでしょう、ただ
私は勉強不足なのでおよそそのようには考えられないので、質問してる
訳です。質問の意図を汲んでいただき、お答え願えればと思います。
0080デフォルトの名無しさん
2010/04/24(土) 18:22:28親の木も書き換えられたらどうだろう
0081デフォルトの名無しさん
2010/04/24(土) 18:23:24それは言語では無くて、リファクタリングツールの設計ですな。。。
Cのマクロがリファクタリングツールなのか、という議論は不毛だと
思うのでご遠慮させていただきますが。
0082デフォルトの名無しさん
2010/04/24(土) 18:37:15俺は>>25じゃないから、もともと書いた奴が
どういう意図で書いたかは分からんが、
マジレスすると、>>25には「構文」「マクロ」
つまり、コンパイル時の問題について書いてあるだけで、
「実行時に」S式のような、GC必須の動的なリストや木構造を扱いたいとは
一言も書いてないだろ
コンパイル時の問題なんだから、コンパイラが吐くプログラムが
低級か高級かといった問題とは全然関係ないぞ
0083デフォルトの名無しさん
2010/04/24(土) 18:39:320084デフォルトの名無しさん
2010/04/24(土) 18:42:00C++は踏み台だったのだよ・・・
後続言語では out が導入されたが、
当時はそういう発想はなかったんだろう
0085デフォルトの名無しさん
2010/04/24(土) 18:43:00CのようなN-in 1-outな言語とインタフェースするときにはあったほうがいいが
多値リターンがあれば本来out引数なんて要らない
0086デフォルトの名無しさん
2010/04/24(土) 18:45:250087デフォルトの名無しさん
2010/04/24(土) 18:47:42どうも日本語が通じないようで・・・
だからS式導入の低水準高級言語としてのメリットを聞いてるんですよ。
>>6は高水準高級言語は素晴らしい、そのうえ定式化されてるので素晴らしい。
と読めるのですが?
0088デフォルトの名無しさん
2010/04/24(土) 18:48:24・パースしやすい
・Lispの強力なマクロが使える
こんなものだろ
0089デフォルトの名無しさん
2010/04/24(土) 18:50:42まだ「高水準言語」とか言ってるってことは全然理解して無いんだな
馬鹿だろ
リンク先読んでも理解できないんだからな
構文はS式だけど、構文がS式なだけでCと同じobjを吐けるんだよ
0090デフォルトの名無しさん
2010/04/24(土) 18:51:24たとえば、for文とかがどういう木を持っているか、
とかで悩まなくて済むんだよね
0091デフォルトの名無しさん
2010/04/24(土) 18:51:45だ==========か============ら
>>79なので、ルビーが使いやすい、Lispが好きとか
言われても、議論にならないんですよ。
特に>>6はキチガイの戯言で、C++、と、テンプレートの
無い世界の話ですね。今の環境でC++とテンプレートが
存在しないことを前提にC言語の拡張を書いても訴えても
無意味なんですよ。2000年以降、こういう頓珍漢な話をする
文系が増えて無茶苦茶ですよ。
0092デフォルトの名無しさん
2010/04/24(土) 18:52:370093デフォルトの名無しさん
2010/04/24(土) 18:52:38多値リターンと引数からのリターンには差があって、
多値リターンは常に何らかの値を返す必要があり、
引数からのリターンは(エラー時など)場合によって値を返さなくても良い
全て参照型ならとりあえずnull返しゃいいだろうけど
値型(特に構造体とか)があるならこの差はパフォーマンスに影響する
0094デフォルトの名無しさん
2010/04/24(土) 18:54:060095デフォルトの名無しさん
2010/04/24(土) 18:54:25だから、それはS式言語で、C及びC++に代わる。
じゃないでしょって言ってるんだけど?
0096デフォルトの名無しさん
2010/04/24(土) 18:55:20マクロスパゲティは食いたくない
0097デフォルトの名無しさん
2010/04/24(土) 18:58:20スタックマシーン勉強しなよ
0098デフォルトの名無しさん
2010/04/24(土) 19:01:120099デフォルトの名無しさん
2010/04/24(土) 19:03:38多値の複雑な型は返す場所に直返せるから
効率も稼げるよ
最近ならレジスタ数多いから数個の単純型もあんま問題ないしね
0100デフォルトの名無しさん
2010/04/24(土) 19:04:22_PRE_hoge{}みたいにプリプロセスであることを明示できればいい
0101デフォルトの名無しさん
2010/04/24(土) 19:07:08C++ベースで考えると戻り値最適化は初期化でしか使えない
代入だと既にあるオブジェクトを破棄する必要があるから
0102デフォルトの名無しさん
2010/04/24(土) 19:09:02マクロは捨てたいと思う。リファクタリングツールとして、
別添えで考えたい。
マジでマジで、今のC言語の問題の多くは
マクロが存在してることに有ると思う。
ヘッダーファイルの読み込みは、必要だけど、それ以上のことは
やってくれるな、とか思う。
0103デフォルトの名無しさん
2010/04/24(土) 19:10:360104デフォルトの名無しさん
2010/04/24(土) 19:14:57俺の目線はc++はダメダメ
低級言語ならその場に明示されてない動作はしないのが望ましい
コンストラクタ、デストラクタはもっと高級な言語でやるべき
0105デフォルトの名無しさん
2010/04/24(土) 19:17:13JAVAの人とよく喧嘩するんだけど、ヘッダーファイルは
実装を見せない、良い仕組みだと思うんだけど・・・
ただ、嫌う人の言い分もよく分かる気がするし。
実装を見せないと言いながら、クラス定義でprotectedな
メンバーも、ちゃっかり見せちゃうし。その辺整理すると、
記述があっちゃこっちゃしてウザイし、もうヘッダファイルいらね
と言うのもよく分かるのだが・・・
Javaみたいに無くても大丈夫、見せたくないときは別添えで、
ってのもありっちゃ有りなんだけど。
0106デフォルトの名無しさん
2010/04/24(土) 19:17:17コンストラクタ、デストラクタ、代入演算子とか
考えてしかるべきじゃないのか・・・
0107デフォルトの名無しさん
2010/04/24(土) 19:18:06ヘッダみたいなものはコンパイラが自動で出力すべき
0108デフォルトの名無しさん
2010/04/24(土) 19:21:39リファクタリングはOOPが前提
アセンブラやCレベルでは不可能
マクロがなければ必然的にポータビリティが失われる
お前の言ってる仮想言語はCの代替にはなりえない
0109デフォルトの名無しさん
2010/04/24(土) 19:21:41基本的に1度書けば情報量として十分なものを
2度以上のインクルードにも耐えられるように、
かつ、なんども書かされる作業は苦行なだけ。
0110デフォルトの名無しさん
2010/04/24(土) 19:21:56後、戻り値に関しては、参照渡しの不透明さ(何されるのか分からない)
って問題を文法で解決するべきという話だと思う。
0111デフォルトの名無しさん
2010/04/24(土) 19:25:14それは良いかもね、foo.cをコンパイルしたときにfoo.hが出力されて、
foo関数を使う人は、foo.hをインクルードするって言う事にすれば
良いかも知れない。foo.hはコンパイラ以外書き換え不可と言うことに
すれば、とても幸せになれるように気がした。
0112デフォルトの名無しさん
2010/04/24(土) 19:28:00ポータビリティに関してはDのversionを参考にするといいよ
0113デフォルトの名無しさん
2010/04/24(土) 19:33:19構造体は代入演算子を定義できず、
代入は単純コピーのみとする、
という風にクラスと差別化すれば・・・
って、C/C++だとクラスも値型だよな
0114デフォルトの名無しさん
2010/04/24(土) 19:35:460115デフォルトの名無しさん
2010/04/24(土) 19:37:190116デフォルトの名無しさん
2010/04/24(土) 19:39:17nullの代入は、何も代入しない事と同じ扱いになる、とか
0117デフォルトの名無しさん
2010/04/24(土) 19:40:01構造体とクラスのみ
0118デフォルトの名無しさん
2010/04/24(土) 19:42:49戻り値は正否を表す値1つの方が便利なので
引数から値を返す方法はどうしても必要だな
全部例外に置き換えるとパフォーマンスに影響するし
0119デフォルトの名無しさん
2010/04/24(土) 19:43:54null大嫌い
nullableであることが必要でない場合も参照型にはnullを突っ込めてしまうので
型安全性にとっては有害以外の何者でもない
関数型のMaybeやOptionが正解
0120デフォルトの名無しさん
2010/04/24(土) 19:44:070121デフォルトの名無しさん
2010/04/24(土) 19:44:400122デフォルトの名無しさん
2010/04/24(土) 19:50:500123デフォルトの名無しさん
2010/04/24(土) 19:51:340124デフォルトの名無しさん
2010/04/24(土) 19:52:50じゃあコンパイルしたら
License.txtが自動的に出てくるっていうことにしよう
0125デフォルトの名無しさん
2010/04/24(土) 19:52:522chのライセンスはGPLのようなライセンスとは非互換だからねと
一応言っておく
0126デフォルトの名無しさん
2010/04/24(土) 19:52:540127デフォルトの名無しさん
2010/04/24(土) 19:56:010128デフォルトの名無しさん
2010/04/24(土) 19:59:00「リファクタリングツール」が何のことかよくわからないが、
コンパイル時に処理するC++のテンプレートはリファクタリングツールなの?
そうであるなら、別に言語に「リファクタリングツール」という機能が入っていてもいいんじゃないの。
0129デフォルトの名無しさん
2010/04/24(土) 20:01:54convert Parameter("EUC_JP","UTF-8") Source(euc_buf) Result(utf_8_buf);
とか、
>>125
言語の仕様は、著作権保護の対象外。言語仕様の記述は著作権保護されるけども。
0130デフォルトの名無しさん
2010/04/24(土) 20:07:470131デフォルトの名無しさん
2010/04/24(土) 20:13:04ん?
2chの投稿規約に同意しないと書きこめないだろ
その時点で法的に規約に同意した、契約が成立したと認められるはずだ
現実に、基本的に2ch本の印税はひろゆきに行くだろ?
勿論その部分は書き込んだ奴にも流れるようだけれども
0132デフォルトの名無しさん
2010/04/24(土) 20:44:530133デフォルトの名無しさん
2010/04/24(土) 20:47:040134デフォルトの名無しさん
2010/04/24(土) 21:59:070135デフォルトの名無しさん
2010/04/24(土) 22:13:14ウンモ星人乙
0136デフォルトの名無しさん
2010/04/24(土) 22:18:55cの配列みたいに先頭のデータと配列の先頭を同一視するみたいな。
>102
マクロは必須だろ。cのマクロは捨てだけど。
マクロはむしろユーザーカスタム可能なコンパイラとして考えるべき。LispとかForthとかそんな感じだよな。
0137デフォルトの名無しさん
2010/04/24(土) 22:24:45a.hoge(b);
}
あゝ、邪悪
0138デフォルトの名無しさん
2010/04/24(土) 23:29:18それに合わせて、入力も1入力にしたい。
さらにプログラムの流れは基本的に左から右にしたい。
以上を総合して、こんな感じにしたい。{}はタプル型。
func({in1, in2}) -> {out1, out2, out3};
タプル型の型チェックはなんかうまくやる。
0139デフォルトの名無しさん
2010/04/24(土) 23:36:45頭がLLなヤツらばっか
0140デフォルトの名無しさん
2010/04/24(土) 23:46:080141デフォルトの名無しさん
2010/04/25(日) 00:02:06タプルとかが美しいか?
美意識の違いだな
0142デフォルトの名無しさん
2010/04/25(日) 00:05:570143デフォルトの名無しさん
2010/04/25(日) 01:12:580144デフォルトの名無しさん
2010/04/25(日) 01:16:320145デフォルトの名無しさん
2010/04/25(日) 01:20:31粗大ゴミのC++を置き換えれる言語を考えようや
Cは神言語だから無理
0146デフォルトの名無しさん
2010/04/25(日) 01:41:230147デフォルトの名無しさん
2010/04/25(日) 01:42:030148デフォルトの名無しさん
2010/04/25(日) 01:54:040149デフォルトの名無しさん
2010/04/25(日) 01:54:100150デフォルトの名無しさん
2010/04/25(日) 01:55:010151デフォルトの名無しさん
2010/04/25(日) 01:58:220152デフォルトの名無しさん
2010/04/25(日) 01:59:100153デフォルトの名無しさん
2010/04/25(日) 02:04:15使ってる低能がな
0154デフォルトの名無しさん
2010/04/25(日) 02:10:460155デフォルトの名無しさん
2010/04/25(日) 02:21:330156デフォルトの名無しさん
2010/04/25(日) 02:27:26おやおや自己紹介ですか?
いくら低能でも、己がそうであるという事実を主張することはできるようですね。
あ、言葉が難しすぎて理解できませんか。低能ですからね。
では低能であるあなたにも分かるように言わんとすることを言わんとば、あなはた馬鹿だと言うことです、
、か。早く仕事が見つかるといいですね。
0157デフォルトの名無しさん
2010/04/25(日) 02:39:00すまん。痛いとこだよな
やっぱ恥ずかしいもんな
0158デフォルトの名無しさん
2010/04/25(日) 02:41:54お前の知ってる設計技術がオブジェクト指向しか無いからそういうんだろう。
0159デフォルトの名無しさん
2010/04/25(日) 02:43:51学生でも土方みたいな考え方の奴がたまにいるから困る。
そういうヤツに限って自分はプログラミングスキルが高いと勘違いしているから困る。
0160デフォルトの名無しさん
2010/04/25(日) 02:45:140161デフォルトの名無しさん
2010/04/25(日) 02:45:35それ以外の奴でもたまに広い見識を持った奴はいるけど、ほとんどがそうでないのだから、
言われた通り手を動かすだけにして欲しい。
0162デフォルトの名無しさん
2010/04/25(日) 02:46:22http://www.amazon.co.jp/dp/4894717700
0163デフォルトの名無しさん
2010/04/25(日) 02:47:500164デフォルトの名無しさん
2010/04/25(日) 04:26:090165デフォルトの名無しさん
2010/04/25(日) 04:56:19IDE使用前提のシーケンス言語でもいいけど
0166デフォルトの名無しさん
2010/04/25(日) 05:04:51だけどS式でCのプログラムは書きたくない。
で、どーしたらいいんだろう?
0167デフォルトの名無しさん
2010/04/25(日) 05:23:280168デフォルトの名無しさん
2010/04/25(日) 05:24:32lispだからこそ生きるもんだ
Cでもinlineとconst enumで大半が不要だろ
0169デフォルトの名無しさん
2010/04/25(日) 06:44:20代入だけでもC形式にすればだいぶ小奇麗になると思うよ
0170デフォルトの名無しさん
2010/04/25(日) 12:19:38ある意味正しいけど
一人ないし少数精鋭で使うならオナニーでも結構使いでがあるんじゃないの
構文木が弄れるLispマクロなら、例えばCのswitchがいやなら
自分で構文を作れるし
fp = fopen(name, "r");
if (fp == NULL) エラー処理
else ...
みたいな決まりきった手続きを抽象化した構文を自分で作れる
0171デフォルトの名無しさん
2010/04/25(日) 12:23:16やっぱり、ない方がいいな。
0172デフォルトの名無しさん
2010/04/25(日) 12:27:540173デフォルトの名無しさん
2010/04/25(日) 12:31:230174デフォルトの名無しさん
2010/04/25(日) 12:37:400175デフォルトの名無しさん
2010/04/25(日) 12:55:28ただ言語仕様に組み込まれているだけ。
たとえば、文字列の連結や、Enumによるswitch。
7だとStringによるswitch。こいつらはコンパイル時に別のソースコードに置き換わる。
ある文法構造をもっと平易な文法構造に書き直すようなことはよくあること。
ユーザが勝手にマクロ作るのも許すが、
基本的には言語のライブラリとしていくつか構文を用意して
それを使わせればいいんだろう。
0176デフォルトの名無しさん
2010/04/25(日) 13:01:04#define END }
#define FOREVER for (;;) BEGIN
ああ、すばらしい
0177デフォルトの名無しさん
2010/04/25(日) 13:02:15その程度が限界
0178デフォルトの名無しさん
2010/04/25(日) 13:02:260179デフォルトの名無しさん
2010/04/25(日) 13:05:41それが嫌なら
Effective (これから作る言語名)
でもすぐに出版してマクロの使い方を啓蒙するしかないな
0180デフォルトの名無しさん
2010/04/25(日) 13:10:13言語仕様でシステムとして制限するほうが即効性高い。
0181デフォルトの名無しさん
2010/04/25(日) 13:13:15だからバカでもチョンでも使える物じゃないとだめなんだよw
0182デフォルトの名無しさん
2010/04/25(日) 13:14:24可読性は関係ない
不要なものをわざわざ作るのは無駄だが、既に作った後なら特に問題視されない
0183デフォルトの名無しさん
2010/04/25(日) 13:16:11後は定数のdefineをasmとCで共用できるのは便利
175みたいにコンパイラに組み込んでしまうのは全く別な議論だし
入れる際に相当揉むのに、安易に構文いじったりするためのマクロなんて全く不要
0184デフォルトの名無しさん
2010/04/25(日) 13:16:560185デフォルトの名無しさん
2010/04/25(日) 13:17:37こういうやつがC++でオナニーしてるんだな
0186デフォルトの名無しさん
2010/04/25(日) 13:17:51バカやチョンが書いたコードはバカやチョンが強引にプロジェクトマージしてきても深い深いpackage-nameの奥へ自動的に追い遣られる言語がイイね
言語機能かどうか知らんけど
0187デフォルトの名無しさん
2010/04/25(日) 13:19:590188デフォルトの名無しさん
2010/04/25(日) 13:20:20かわいい女の子が書いてたら俺んとこにメールするようなコンパイラが欲しいね
0189デフォルトの名無しさん
2010/04/25(日) 13:22:480190デフォルトの名無しさん
2010/04/25(日) 13:29:090191デフォルトの名無しさん
2010/04/25(日) 13:35:30オブジェクト指向でオナニーしてると言えばいいのに
OOを擁護しつつC++だけ廃止するのは無理だよ
0192デフォルトの名無しさん
2010/04/25(日) 13:36:45Lispプログラマーは構文を特別のものと見做さない
それだけの話だ
0193デフォルトの名無しさん
2010/04/25(日) 13:40:48基本同居。実行時も同居。
if(LOG.isDebugEnabled()){
〜
}
ただし、finalなboolean定数にtrueかfalseを持たせて
if(IS_DEBUG){
〜
}
なんてやれば、if自体はその定数にしたがって消滅したりするようにできたりする。
あとは設定ファイルでデバッグ用のコードをAOPさせたりとかかな。
0194デフォルトの名無しさん
2010/04/25(日) 13:48:160195デフォルトの名無しさん
2010/04/25(日) 13:48:570196デフォルトの名無しさん
2010/04/25(日) 13:50:02lispに構文らしい構文なんてないからな
0197デフォルトの名無しさん
2010/04/25(日) 13:50:28C言語を1次元のトークン配列から1パスで構文木を作るとパーサが大きくなる。
Lispはトークン配列を一度リストとして読み込みマクロ展開したあと
構文木を構築するというように2パスになっている。
トークンはリードマクロで変更可能だ。
通常のマクロはリストを操作するプログラムで読み込み時にS式のフィルタとして働く。
0198デフォルトの名無しさん
2010/04/25(日) 13:59:34ひでえ
それじゃデバッグ用に大きなライブラリをリンクするようなケースには対応できないじゃん
まあjavaごときで速度だのサイズだのを気にするのが間違いなのか
0199デフォルトの名無しさん
2010/04/25(日) 14:01:02マクロを全く使いたくないか、使うとしたら最強のマクロを使いたくなる
0200デフォルトの名無しさん
2010/04/25(日) 14:07:28Javaだとクラス単位でロードするから
ライブラリのファイルサイズはともかく、メモリ単位では関係無し。
クラスローダーが文句言わない範囲のリンクをすればいい。
0201デフォルトの名無しさん
2010/04/25(日) 14:10:27だからeclipseはあれほど重い
0202デフォルトの名無しさん
2010/04/25(日) 14:14:30Eclipseはあんだけ機能持ってれば重くて当然かな。
ほかの言語で実装しても正直重さは五十歩百歩になりうる。
ある種、富豪的プログラミングっちゃ富豪的。
このスレだと低級言語だから富豪的なのは禁止かな。
VM前提の方がいろいろとやりやすい事が多いんだけど、
たぶん近代的なOSで走るアセンブラに落とす前提だろうから。
0203デフォルトの名無しさん
2010/04/25(日) 14:15:45別にCトランスレータでもいいんじゃないの
「ソフトウェア作法」のratfor的な
0204デフォルトの名無しさん
2010/04/25(日) 14:16:540205デフォルトの名無しさん
2010/04/25(日) 14:18:03Cトランスレータ…
まるでC++の再誕を見ているようだ。
0206デフォルトの名無しさん
2010/04/25(日) 14:18:35>ほかの言語で実装しても正直重さは五十歩百歩になりうる
そんな絶対に証明不可能なことを言い切られても
0207デフォルトの名無しさん
2010/04/25(日) 14:21:43貧乏性のXPは何かとワーキングセットを最小化しようとするが
一方でGCは非局所的にヒープを舐めたがるので、
GCのためだけにページが出たり入ったり
ウンザリするような事態が引き起こされる
0208デフォルトの名無しさん
2010/04/25(日) 14:23:24そこでeppの登場ですよ。
eppを使えば、javaをS式として扱ってプリプロセッサを書ける。
これ最強。
0209デフォルトの名無しさん
2010/04/25(日) 14:27:52ごくシンプルなルールで、木を簡単に記述できるからなんだよな
そんだけの話
XMLは冗長だしね
0210デフォルトの名無しさん
2010/04/25(日) 14:29:04他のOSはどうなの?
使われないけど参照は残ってるものはswap行きだけどswapからの参照だけはメモリ上にもある
ようなOSってあるのかしら?
0211デフォルトの名無しさん
2010/04/25(日) 14:30:27ある程度は似たような問題はあると思う
XPが特に酷いのは、ウィンドウを最小化しただけで
ワーキングセットを最小化するような仕様だからだよ
0212デフォルトの名無しさん
2010/04/25(日) 14:40:400213デフォルトの名無しさん
2010/04/25(日) 17:32:11Objective Cもだな
C++が出始めた時勉強のために
プリプロセッサ作ったりしたが懐かしい
0214デフォルトの名無しさん
2010/04/25(日) 18:41:58がガン無視されて寂しいんだけど、関数の引数を別けて定義するのは
良くないかな?
関数定義
int convert Parameter(char* source_code="EUC_JP",char*) ←Parameterはデフォルトを定義出来る
Source(char*)
Result(char*)
{
}
使う方。
convert Parameter("EUC_JP","UTF-8") Source(euc_buf) Result(utf_8_buf);
0215デフォルトの名無しさん
2010/04/25(日) 18:43:02新しく作る言語からは糞長い名前付けをする文化を捨て去りたい。
0216デフォルトの名無しさん
2010/04/25(日) 18:43:430217デフォルトの名無しさん
2010/04/25(日) 18:43:470218デフォルトの名無しさん
2010/04/25(日) 18:48:10今更だが
ファンクションで良かったんじゃね?
0219デフォルトの名無しさん
2010/04/25(日) 18:51:54名前付き引数で、「Parameter」だけは予約語ってこと?
0220デフォルトの名無しさん
2010/04/25(日) 18:57:56やっとまともな人が来てくれた。
「Parameter」「Source」「Result」が予約語。
オブジェクト指向の多態の時にコンパイラが分かりやすくて良いんじゃないか
と思うんだ。Source以外は、省略可能と言うことで。
0221デフォルトの名無しさん
2010/04/25(日) 18:59:120222デフォルトの名無しさん
2010/04/25(日) 19:05:06いやいや、大切なことなんだよ、大域最適化の障害になってるから。
この引数はなんの目的があって、関数に渡されているのか分からないから
触れない。ってコンパイラの負担になってる。
Result以外は、その関数で変更がないって事はとても重要。
見た目にも読みやすいし、最近のGUI系のあの、山のような引数
どれがなんなのか、分からないし。一々関数のリファレンスに当らなくても、
ソース読んでるだけある程度その関数の動きが読める方が良いと思うし。
可読性と、コンパイラの最適化に有効なので、記述時のタイプ量が増える事は
払えるコストだと思うのです。
0223デフォルトの名無しさん
2010/04/25(日) 19:09:47それなら、各パラメータにユーザー定義の任意の属性を付けられて、
各属性にコンパイラに対する情報を載せられるようにしたい。
さすがにその3つを予約後にするのは下品だし、オサレじゃない。
0224デフォルトの名無しさん
2010/04/25(日) 19:11:310225デフォルトの名無しさん
2010/04/25(日) 19:12:120226デフォルトの名無しさん
2010/04/25(日) 19:14:08そうそう。俺それ。
>>223
そう言う反論は宗教論争なので、もう少し違った感じで。
例えば、ParameterとSourceの関係が問題になるとか、
そっちの頭の良い異論が欲しい。
0227デフォルトの名無しさん
2010/04/25(日) 19:18:36コンパイラ作成からも遠そうだし
オサレ系でもないし
内容からして高校生位。。か?
0228デフォルトの名無しさん
2010/04/25(日) 19:20:19お前のエスパー能力がうらやましい
0229デフォルトの名無しさん
2010/04/25(日) 19:24:05定義もされていない「俺予約語」について頭の良い議論ができるわけ無いだろ
0230デフォルトの名無しさん
2010/04/25(日) 19:24:34このコードが何を意味してるのかわからないんだが
戻り値はchar*なの?intなの?
0231デフォルトの名無しさん
2010/04/25(日) 19:28:03仮引数の名前がないし、何が何だかわからん。
0232デフォルトの名無しさん
2010/04/25(日) 19:28:52こう言うのは意外におっさんだったりする。
0233デフォルトの名無しさん
2010/04/25(日) 19:31:13オプションには/をつけて結果には>でいんじゃね
0234デフォルトの名無しさん
2010/04/25(日) 19:32:08俺のエスパー能力もこれまでか
0235デフォルトの名無しさん
2010/04/25(日) 19:36:40パラメータとソースはうーん。たとえば、オブジェクト指向ならオブジェクトがソースで
パラメータは関数の引数にしたらいいのかなと。ソースが複数ある場合はコンビネーションメソッドみたいなのがあって
このオブジェクトとこのオブジェクトにメッセージをこのパラメータで送って渡すみたいにするとか。
char* (char* src_charset,char* dst_charset)::encode(char* src_string) {
return translate(src);
}
文字コードオブジェクト2つにエンコードメッセージをsrc_stringで渡すという具合に。
使い方は
char *rc = ("euc-jp","utf-8").encode("eucmojiretu");
という具合
0236デフォルトの名無しさん
2010/04/25(日) 19:44:210237デフォルトの名無しさん
2010/04/25(日) 19:44:520238デフォルトの名無しさん
2010/04/25(日) 19:49:43ParameterとSourceの違いは?
0239デフォルトの名無しさん
2010/04/25(日) 19:58:490240デフォルトの名無しさん
2010/04/25(日) 20:00:190241デフォルトの名無しさん
2010/04/25(日) 20:03:25でもちょっとユンユンし過ぎじゃね
彼にカリーさんは辛口過ぎるし
0242デフォルトの名無しさん
2010/04/25(日) 20:06:20lispとhaskellとsmalltalkあたりを勉強してはどうだろう
0243デフォルトの名無しさん
2010/04/25(日) 20:06:47カリー化と違うんじゃなくて、カリー化しやすくするってことに
つながる訳ですよ。カリー化しやすくなってると、大域最適化に
強くなると。
0244デフォルトの名無しさん
2010/04/25(日) 20:16:060245デフォルトの名無しさん
2010/04/25(日) 20:48:560246デフォルトの名無しさん
2010/04/25(日) 21:00:430247デフォルトの名無しさん
2010/04/25(日) 21:01:07例えば、文字コンバートで言えば、ソースコードの全域にしたがって、
EUC_JP→UTF-8の変換しかやっていなければ、それ以外の文字コード変換を
さっくり削除して、それに必要な変換テーブルもさっくり削除出来てで、
もっと言えば、その他の文字コードで必要な呼び出しとかスタック積み上げ
とかも全面的に削除して、そもそもEUC_JPという引数も、定数に変更して。
と言うことが可能になっていくんだよ。
0248デフォルトの名無しさん
2010/04/25(日) 21:04:060249デフォルトの名無しさん
2010/04/25(日) 21:04:26ParameterとSourceの違いは?って聞いてるんだけど。
0250デフォルトの名無しさん
2010/04/25(日) 21:08:20>>226で自分でちゃんと書いてるので、それに
そういうべたな質問かぶせてくる馬鹿に答えるメリットはないんだよね。
0251デフォルトの名無しさん
2010/04/25(日) 21:16:20いや、引数をParameterとSourceで分けて主張した意味が全く理解不能だったので、
何か深い哲学的な意味があるのかと思って気になったから聞いたんだけど。
0252デフォルトの名無しさん
2010/04/25(日) 21:18:27バカアホ言う前に、自分がちゃんとした文章書いているのかを一度見直したほうがいいよ
0253デフォルトの名無しさん
2010/04/25(日) 21:19:41馬鹿に伝わらないように書いてるので。
まぁ馬鹿がタカルんだけど(w
0254デフォルトの名無しさん
2010/04/25(日) 21:26:53○伝えられない
0255デフォルトの名無しさん
2010/04/25(日) 22:46:040256デフォルトの名無しさん
2010/04/25(日) 23:04:48レガシーフリーのごとく過去のしがらみを捨てられればそれでいいよ。
0257デフォルトの名無しさん
2010/04/25(日) 23:10:50男=1 女=0 という変換するだけでコンパイルが完了する言語
0258デフォルトの名無しさん
2010/04/25(日) 23:12:13女が0?
とんでもない性差別ですね
0259デフォルトの名無しさん
2010/04/25(日) 23:13:20性器の形を模しているので差別ではありません
0260デフォルトの名無しさん
2010/04/26(月) 00:08:20CPU固有言語だぞ。哲学とか。。
主張?につっこみどころ多すぎて
観戦させてもらうわ
0261デフォルトの名無しさん
2010/04/26(月) 00:09:16関数が、固有命令?w
0262デフォルトの名無しさん
2010/04/26(月) 00:17:25読めるなら前スレ読みな
0263デフォルトの名無しさん
2010/04/26(月) 00:27:231から全部読んでるけど何の関連性も見つかりません
0264デフォルトの名無しさん
2010/04/26(月) 00:45:31人と話をするなら出来るだけ一般的な表現をした方が誤解を招かずにスムーズなコミュニケーションが出来て自分も気分がイイはず。
0265デフォルトの名無しさん
2010/04/26(月) 01:05:520266デフォルトの名無しさん
2010/04/26(月) 01:18:38ダネ
彼はたぶん自分が言っていることすら
どういう意味があるのか理解していないんだと思う。
脳内に言いたいことがはっきり論理的に出来上がっているなら、
それを書くのに何の抵抗も無いはずなんだけどな。
0267デフォルトの名無しさん
2010/04/26(月) 05:13:420268デフォルトの名無しさん
2010/04/26(月) 06:06:450269デフォルトの名無しさん
2010/04/26(月) 10:50:480270デフォルトの名無しさん
2010/04/26(月) 19:37:16Objective Cのか?
0271デフォルトの名無しさん
2010/04/26(月) 20:52:540272デフォルトの名無しさん
2010/04/26(月) 21:09:180273デフォルトの名無しさん
2010/04/26(月) 21:22:16既にCがあるんだからそれをベースにちょっといじってオブジェクト指向を載せてみようなんて事をすると、こういう糞になるという見本だな。
やはり新言語は1からしっかりと考えるべきだな。
0274デフォルトの名無しさん
2010/04/26(月) 22:23:420275デフォルトの名無しさん
2010/04/26(月) 22:33:370276デフォルトの名無しさん
2010/04/26(月) 22:43:210277デフォルトの名無しさん
2010/04/26(月) 23:28:47結局モバイルで使える言語が今後の覇権を握る
その点についても考慮しなければならんぞ
0278デフォルトの名無しさん
2010/04/26(月) 23:38:32C#だな。ジョブズはFlashよりも.NETが怖かったんだとおもう。
0279sage
2010/04/27(火) 00:13:40その点を改善してるのがたとえば Vala なんじゃないか。
go もそんなかんじだけどGCが必須なんだっけ?
Objective C のよい点はGCを使わなくてもよいところにある。
0280デフォルトの名無しさん
2010/04/27(火) 00:14:570281デフォルトの名無しさん
2010/04/27(火) 00:17:490282デフォルトの名無しさん
2010/04/27(火) 00:25:46function Exp(l,op,r){this.l=l;this.op=op;this.r=r}
Exp.prototype.toString = function() {
return "["+this.l+",\""+this.op+"\","+this.r+"]"
}
var powers = {}// 戦闘力表
// 読み込み処理
function read(str) {
var arr = str.split(/\s+/) // 文字列を配列にする
// 戦闘処理
function battle(power) {
var result = arr.shift()// とりあえずの結果を取得
while (powers[arr[0]] > power) {// きごうの力が強ければ勝ち抜く
var name = arr.shift()// 名前取出し
var nextpower = powers[name] // 次の戦いで使う力取得
var nextresult = battle(nextpower) // 次の戦いを行う
result = new Exp(result, name, nextresult)// 式作成
}
return result
}
return battle(0)// 力0で戦闘開始
}
// 戦闘力登録
powers["+"] = 10
powers["*"] = 20
alert(read("1 + 2 * 3 + 2 * 3"))
0283デフォルトの名無しさん
2010/04/27(火) 00:27:37これをいろいろ拡張してCっぽくすればマクロも作れるようにできるよっと。
0284デフォルトの名無しさん
2010/04/27(火) 04:03:142.0からGC使えるようになったね
ObjCはCと思うからいかんのよね
アレはSmalltalkにCのふりかけかけたもんだし
goはどっちかいうと(C+python)/2風味でGC有り。gccgoはまだ未実装
まあObjCに限らず今後はUIを含むような
Webやデスクトップのアプリ作る言語はGC有りでいいんじゃね
組み込みや制御系やOSなんかはCみたいな住み分けで。
0285デフォルトの名無しさん
2010/04/27(火) 16:28:570286デフォルトの名無しさん
2010/04/27(火) 19:07:541、コンパイラを軽く書きたいので色々端折ってる
2、軽く書きたいと良いながら、先読みが必要だったりする
3、軽く書けるので膨大な方言が発生し、それの取りまとめで仕様がボロボロ
4、機能の追加が必要最小限に留められているので、色々中途半端
C++の問題点
1、C言語との互換性を重視したので、記号が珍妙
2、追加、追加が多すぎて、なにがなんだか状態
3、オブジェクト指向の学識が高まるのと歩調を合わせた結果仕様が複雑
4、C言語の欠点を引き継いでしまってる
さて、以上の欠点は総て、言語が生まれた当時はまだ分かっていないことや、
当時では無理だったことが、後年解決された事など、色々に理由があって、
単に順調に成長した言語だから発生したとも言える。
そこで、プログラミング言語40年の歴史から学べる知見を総動員して、
C言語的なプログラミング言語を過去の遺産にとらわれず、今、開発
するとすればどんな仕様になるのだろうか?という事。
0287デフォルトの名無しさん
2010/04/27(火) 19:14:200288デフォルトの名無しさん
2010/04/27(火) 19:32:240289デフォルトの名無しさん
2010/04/27(火) 19:52:150290デフォルトの名無しさん
2010/04/27(火) 20:00:12のAの部分に副作用を伴う式が書けてしまうのは混乱の原因にならないカナ
0291デフォルトの名無しさん
2010/04/27(火) 20:06:220292デフォルトの名無しさん
2010/04/27(火) 20:06:44DはC言語の部分は守るって言ってるから、系統としてC++を再デザイン。
0293デフォルトの名無しさん
2010/04/27(火) 20:09:430294デフォルトの名無しさん
2010/04/27(火) 22:15:03必ずメモリ管理するなら最初からあったほうがいいんじゃないの?
メモリ管理しないほうがいいケースって具体的にどんなの?
0295デフォルトの名無しさん
2010/04/27(火) 22:20:440296デフォルトの名無しさん
2010/04/27(火) 22:21:000297デフォルトの名無しさん
2010/04/27(火) 22:26:370298デフォルトの名無しさん
2010/04/27(火) 22:34:430299デフォルトの名無しさん
2010/04/27(火) 22:35:36メモリー管理機能は当然あったほうがいいよ。
もちろんメモリマネージャだのガーベージコレクタを作るときには、その機能を使わずに作るだろうけど
低水準言語では常にどんな場合でもフル機能が使えるわけじゃないからね。
作ってしまえば、それ以外の機能を作るときに十分役に立つ。
0300デフォルトの名無しさん
2010/04/27(火) 22:40:49Cの仕様のどこがはしょられていて、どこがぼろぼろなのかね。
かなり昔は方言もいろいろあったけど、今では ANSI C の部分は共通だし、独自仕様を使っているところはもともと独自でないといけないところ。
C++の記号が珍妙ってなんだろな。
ライブラリが肥大化しすぎているだけで、言語仕様自体はそんなに複雑ではない。(パースはしにくい)
0301デフォルトの名無しさん
2010/04/27(火) 22:46:40過去のしがらみで修正不能だしwwwwww
0302デフォルトの名無しさん
2010/04/27(火) 22:52:580303デフォルトの名無しさん
2010/04/27(火) 22:54:160304デフォルトの名無しさん
2010/04/27(火) 22:57:230305デフォルトの名無しさん
2010/04/27(火) 22:59:060306デフォルトの名無しさん
2010/04/27(火) 23:01:160307デフォルトの名無しさん
2010/04/27(火) 23:05:310308デフォルトの名無しさん
2010/04/27(火) 23:05:35configure; makeとかuse strict;を使うこと
0309デフォルトの名無しさん
2010/04/27(火) 23:07:530310デフォルトの名無しさん
2010/04/27(火) 23:33:57いまでもワーニングでてた気がするが
0311デフォルトの名無しさん
2010/04/27(火) 23:38:52charとかshortとか
0312デフォルトの名無しさん
2010/04/27(火) 23:40:57intだけでもいい。あっても邪魔じゃないが。
0313デフォルトの名無しさん
2010/04/27(火) 23:44:070314デフォルトの名無しさん
2010/04/27(火) 23:44:520315デフォルトの名無しさん
2010/04/27(火) 23:45:020316デフォルトの名無しさん
2010/04/27(火) 23:46:390317デフォルトの名無しさん
2010/04/27(火) 23:46:540318デフォルトの名無しさん
2010/04/27(火) 23:48:300319デフォルトの名無しさん
2010/04/27(火) 23:51:440320デフォルトの名無しさん
2010/04/28(水) 00:01:51mixinでソース文字列をコンパイル時に生成したり、
さらに構文木までいじれるようにするとか何とか言ってたりしてます。
ただ、構文解析を楽にするための文法の変更とかはしてないJava,C#と同系統な発展になってますね。
javascript,ActionScript,haXe,Scala等は構文解析が楽なデザインになっているのではないかと。
それをもっと分かりやすくってことを考えると式を演算子で結ぶ式言語ですべて表せるものがいいのではないか?
という主張をオレはしてるのですけど、手法がよく知られていないのか、まだないのか分からないですが、
分からないので手探りな状態で開発したいけどすぐには出来ないでいます。
B言語は動的な性質を持ってたように思うので、C言語を作る前にB言語を作る手法を考えるのがよいのかなと。
でB言語をjavascriptにするのか、javascriptをマクロを扱えるように式ベースにした言語を使うのか、
式ベースなpythonにするのかで、出来上がる言語の性質が違ってきますよ。
一度変えたら次のチャンスはまた40年後ですよってなると俺は生きてないかもしれない。
LispのマクロはCのプリプロセッサより強力でDSLはソースを短く分かりやすくする。
ということは知見の1つでしょう。
優先順位付きの演算子がないと一般には受け入れられないのも間違いなさそうですし。
ifの条件はbool以外はワーニングがいいでしょうね。
0321デフォルトの名無しさん
2010/04/28(水) 00:05:200322デフォルトの名無しさん
2010/04/28(水) 00:20:47myはきたない文でletはきれいな式だとか馬鹿馬鹿しい
0323デフォルトの名無しさん
2010/04/28(水) 00:25:470324デフォルトの名無しさん
2010/04/28(水) 00:45:24○lambdaさん
○CPSさん
○IOモナドさん
○letさん
0325デフォルトの名無しさん
2010/04/28(水) 00:46:550326デフォルトの名無しさん
2010/04/28(水) 00:48:230327デフォルトの名無しさん
2010/04/28(水) 00:50:500328デフォルトの名無しさん
2010/04/28(水) 00:54:310329デフォルトの名無しさん
2010/04/28(水) 01:02:04ちょっと「式言語」って言ってみたかっただけ。ゴメンナサイ
0330デフォルトの名無しさん
2010/04/28(水) 01:10:350331デフォルトの名無しさん
2010/04/28(水) 01:12:280332デフォルトの名無しさん
2010/04/28(水) 01:14:16ということでよろしいか
0333デフォルトの名無しさん
2010/04/28(水) 01:52:54EかFしか興奮しねえな
0334デフォルトの名無しさん
2010/04/28(水) 05:13:05たしかに、式言語といえば、JSPですね。
ここで言った式言語ってるのは言語を作るための言語のこと。
XML関連の研究とかだと正規生垣言語というものなのかな?
理論的に正規生垣言語となるかはわからないのですけど。
HTMLに対するSGML、
LISPに対するS式、
Dylanに対するD式で
新しいC言語を作るための言語です。
オレはこの言語にC式って名前をつけたんだけど、
それが本当にふさわしいのかわからないので、式言語とだけ書きました。
新しいC言語は正規木文法で定義されたらいいのではと思うのだけど、
それだと、ユーザー定義の演算子を定義できるかどうかもわからないところです。
メリットとデメリットはHTMLとXHTMLの違いを考えれば分かりやすくて、
HTMLはxmlに囚われることなく定義できるけど、その分パーサは作りにくいのが、
XHTMLはXMLのパーサを使えばいいので楽。XMLのパーサ自体もHTMLのパーサを作るより楽だ。
そして、XHTMLはXMLValidなので美しいと感じるかどうかは人によるけど、一定の基準になります。
ただ、文書を書くにはXMLのほうが、長くなる。エラー復帰はすばらしいHTMLのパーサに劣る。
といったことになるかもしれないと。
0335デフォルトの名無しさん
2010/04/28(水) 05:15:51関数型言語は基本的に論文とかで使う数学の形式的な言語に近いと思います。
ここで考えているのは見た目がC言語に近いものです。
あと、関数型言語は処理系も含みますが、
C言語風の式言語の定義には処理系は含みません。
式をベースとしているからといって、関数指向のプログラミングを行う目的だけに
特化しようとも考えていません。今は高級アセンブラ用として考えているのですよね。
ScalaはC言語風の関数型言語ですが、式をベースとしていません。
DylanやNemerleも関数型言語で式をベースとしていますが、優先順位についてよくわかりませんし、
LISPのリーダマクロ的な手法のようなので自分が作ってみたかんじでは難しと感じます。
CyanはC言語風の式言語も採用しているプロトタイプベースのオブジェクト指向言語で理想に限りなく近いものです。
ただ、オフサイドルールはいらないだろ?っていうのが持論です。
なぜなら、S式にオフサイドルールは余計だから。
最小のルールでC言語風の表現ができればいいのです。
オフサイドルールは過剰なスペックだと思うのです。
0336デフォルトの名無しさん
2010/04/28(水) 07:09:010337デフォルトの名無しさん
2010/04/28(水) 07:10:04コンパイラの本とか読んだことある?
中田さんとかWirthとかAhoとか。
0338デフォルトの名無しさん
2010/04/28(水) 07:20:25一般化は無理なんじゃないか
0339デフォルトの名無しさん
2010/04/28(水) 07:23:220340デフォルトの名無しさん
2010/04/28(水) 09:10:490341デフォルトの名無しさん
2010/04/28(水) 09:17:530342デフォルトの名無しさん
2010/04/28(水) 09:30:25F#
0343デフォルトの名無しさん
2010/04/28(水) 09:57:26式ベースとは一体なんだったのか
0344デフォルトの名無しさん
2010/04/28(水) 13:06:460345デフォルトの名無しさん
2010/04/28(水) 13:09:00無いよ
0346デフォルトの名無しさん
2010/04/28(水) 14:14:030347デフォルトの名無しさん
2010/04/28(水) 14:18:47んじゃ、俺らが欲しい機能とDの具体的な機能名を対照表で書いてください
0348デフォルトの名無しさん
2010/04/28(水) 16:45:16recursiveループがあるような言語をみてみたいよ
0349デフォルトの名無しさん
2010/04/28(水) 19:13:54まずお前らが欲しい機能って何?簡潔に纏めろ
0350デフォルトの名無しさん
2010/04/28(水) 19:39:55え?そっちはとっくに把握してるのだと思っていました。
だって俺らが欲しがってる機能が全部Dにあると>>344で書いてあったから・・・
0351デフォルトの名無しさん
2010/04/28(水) 19:55:31機能は
あとは仕様とコンパイラが安定してくれれば・・・
0352デフォルトの名無しさん
2010/04/29(木) 00:31:57ま、固有がいやだっていうならば、CPU定義さえあれば、うまくいくぜ。
GCCだぜ、COINSだぜ、LLVMだぜーって感じになるでしょうね。
でも、出来るならLLVMとかと同じことをやりたい人もいるのかなと、
思うので、x86で構造作ってしまえたらいいな思ってるんです。
LLVMがいいんなら、そうするけど、それだと、
最適化とか作る楽しみがなくなったりしないのかな?と
わからんけど。
0353デフォルトの名無しさん
2010/04/29(木) 00:34:01そこにも下降型の演算子順位法が結構古くから使われているってなことが書いてあったと思うし、
論文も読んでないけど出してたように思います。
ドラゴンブックも目は通したよ。
ボトムアップ型のパーサのLRLAとかなると正直分からない。
最適化はこういうものがあるんだ。ふーんってレベルならわかってるつもりだけど、
実装してみたりはしてないので怪しいもんです。
http://www.hpcs.cs.tsukuba.ac.jp/~msato/lecture-note/comp-lecture/note10.html
このページ見てコンパイラも作ってみました。わかりやすかった。
美しい日本のコンパイラのソースは綺麗だし、インライン展開やら、SSA的なこともやってて面白いし
関数型言語系統のα変換とかβ変換とかいう用語が出て来てためになります。
型推論も結局Unifyするってことなんだなぁと。
CoinsのCPU固有の定義のところだけ取り出したいんだけどうまくいってません。
WirthとかAhoは知りません。
ググレばわかるんだろうけど。
Ahoがドラゴンブックの人で、Wirthはパスカルの人か。ふむふむ。
PaskalはLL(1)という点ですばらしいですよね。
でも、Paskalは構造化されたマクロはつかえないでしょ。
ドラゴンブックにLispのコンパイルの話はないだろうし。
基本がBNFになってるから、Lispのマクロは無理。AlgolにLispのマクロは無理。
っていうことになってしまう。
0354デフォルトの名無しさん
2010/04/29(木) 00:35:14文法は文脈自由文法として扱うことが可能ですから、普通に文脈自由文法として扱えば
いいのは分かってますよ。
ただ、そうじゃないもっと綺麗にできないかなぁってなるとドラゴンブックレベルじゃ無理。
Cは文法の拡張しまくってるってほどでもないのでは?
RubyとかPerlに比べたらそれほど機能ないでしょ。
class、アクセス、ネームスペース、try & catchとsynchronized,テンプレート、pragmaくらいじゃないの?
foreachとか、javascriptだとwithとか、正規表現リテラルとかか。
その辺の拡張する文だって大体似たような形をしてるのでそのへんを表すことが可能な演算子を用意すればいいだけです。
それがいいか悪いかは2通りの見方があるので、好きなほうを選択すればいいのではないかと思います。
Cのどこがっていうのは、HTMLの文法のどこが複雑なんだろうっていうのと同じだってば。
Cと、C++のパーサを空で2日くらいで書けるか?と。オレは無理。
でも、演算子順位法使って、特殊な演算子を定義すれば、
演算子順位の調整を除けば書ける。
.NETベース大勝利とかわけわからん。戦っている層が違うだろ。
.netベースでどうやって高級アセンブラを作るんだ?
Nemerleとか知らんで書いてるだろ。
F#はML系だから、C系統の言語から移行するのはいろんな意味で辛いぞ。
だったら、Scalaのほうがずっといいと思う。
MLの仕事がいかんというわけではなくて、F#を周りのプログラマが理解して
お客がそれを納得してくれるならいいけど、それは現状は難しいかなぁっと。
長文すんませーん。(w
0355デフォルトの名無しさん
2010/04/29(木) 01:45:13・論旨を明確にする
・適度に箇条書きを利用する
・一般的ではない用語を使用するときは予め説明する
・論旨に影響の少ない固有名詞を無意味に使わない
・接続詞を使う
0356デフォルトの名無しさん
2010/04/29(木) 02:02:03プログラム言語の前に日本語勉強しろっていう
0357デフォルトの名無しさん
2010/04/29(木) 02:04:450358デフォルトの名無しさん
2010/04/29(木) 03:18:09意気込みはわかった
Cのパーザは手書きすると意外にめんどいよな
取り合えず言語仕様考えてbisonとか
javaccみたいなんで遊んでみたら?
俺言語をcにトランスレートでもいいかも
0359デフォルトの名無しさん
2010/04/29(木) 05:34:32ありがとうございます。なるほど。参考になります。
>>356
うざかったですか。すいません。国語苦手なんですよね。
>>357
説得力ないですか。
まずは355の実践からなのでしょうけど。
>>358
ではCへのトランスレータを書いてみます。
いろいろとご意見、ありがとうございます。
0360デフォルトの名無しさん
2010/04/29(木) 14:19:45CExp.prototype.toString = function() {return "["+this.l+",\""+this.op+"\","+this.r+"]"}
// 戦闘力表
CExp.lpowers={".":200,"->":200,"*":190,"/":190,"%":190,
"+":180,"-":180,"<<":170,">>":170,"<":160,"<=":160,">":160,">=":160,
"==":150,"!=":150,"&":140,"^":130,"|":120,"&&":110,"||":100,",":80}
// 読み込み処理
CExp.read = function(str) {
var arr = str.split(/[\b\s]+/) // 文字列を配列にする
function battle(power) {
var result = arr.shift()
while (CExp.lpowers[arr[0]] > power) {// 演算子の力が強ければ結合
var operator = arr.shift() // 名前取出し
var nextresult = battle(CExp.lpowers[operator]) // 次の戦いを行う
result = new CExp(result, operator, nextresult) // 式作成
}
return result
}
return battle(0)// 力0で戦闘開始
}
alert(CExp.to_c(CExp.read("a == b | c >> 2 > 5 , b , c >> 2")))// 読み込み
</script>
結果<br/><textarea>
((((a==b)|((c>>2)>5)),b),(c>>2))
</textarea>
0361デフォルトの名無しさん
2010/04/29(木) 14:22:06ここでバリデータを作ってみます。
0362デフォルトの名無しさん
2010/04/29(木) 14:27:250363デフォルトの名無しさん
2010/04/29(木) 14:36:240365デフォルトの名無しさん
2010/04/29(木) 14:52:520366デフォルトの名無しさん
2010/04/29(木) 14:54:290367デフォルトの名無しさん
2010/04/29(木) 15:03:590368デフォルトの名無しさん
2010/04/29(木) 15:09:100369デフォルトの名無しさん
2010/04/29(木) 15:09:13コードだけよりBNFがあった方がその意図を理解しやすいから。
0370デフォルトの名無しさん
2010/04/29(木) 15:11:39何も考えず適当にコーディングしちゃったんだろうな
0371デフォルトの名無しさん
2010/04/29(木) 15:14:440372デフォルトの名無しさん
2010/04/29(木) 15:17:17ブレインストーミングの時には。
0373デフォルトの名無しさん
2010/04/29(木) 15:18:46面白いかどうかを判断するためにも、コードだけではなく、何をするのか説明されていた方がいい。
その説明する手段の一つがBNF。
コードだけでは分かりにくい。(バグっているかもしれないし。)
0374デフォルトの名無しさん
2010/04/29(木) 15:20:31そうそう。
実現したいコードの例を書くのはいいけど、
それを実現するための既存言語(あるいは疑似言語)によるパーサーのコードを書いても意味無いだろってことだよな。
0375デフォルトの名無しさん
2010/04/29(木) 15:22:270376デフォルトの名無しさん
2010/04/29(木) 15:27:04単にコードを貼りたいだけで、それ以上議論したくないなら、BNFも説明もなくてもいいけど。
0377デフォルトの名無しさん
2010/04/29(木) 15:30:28明らかにC系だしBNFに拘っても仕方ないだろ。>>360は単にコードを貼りたいだけだろ
お前はどこに説明を欲しいわけ?
0378デフォルトの名無しさん
2010/04/29(木) 15:31:090379デフォルトの名無しさん
2010/04/29(木) 15:31:540380デフォルトの名無しさん
2010/04/29(木) 15:32:26>>360は見る価値の無いどうでもいいコードってことだな。
0381デフォルトの名無しさん
2010/04/29(木) 15:33:38なにヤケになってんだよw
お前が食いついてただけだろ。むしろ食い付いた理由を知りたいわ
0382デフォルトの名無しさん
2010/04/29(木) 15:35:20結局、コレ言いたいだけちゃうんかと!最近BNF勉強しただけちゃうんかと!
0383デフォルトの名無しさん
2010/04/29(木) 15:40:330384デフォルトの名無しさん
2010/04/29(木) 15:41:34「コード貼るなら、説明しろ」というのが真意
0385デフォルトの名無しさん
2010/04/29(木) 15:51:45誰もそんなこと言ってないのにそう思うってことは、あなたに当てはまることだから?
0386デフォルトの名無しさん
2010/04/29(木) 15:53:070387デフォルトの名無しさん
2010/04/29(木) 15:55:160388デフォルトの名無しさん
2010/04/29(木) 15:56:320389デフォルトの名無しさん
2010/04/29(木) 16:59:10シーケンス上で分岐条件が整ったら即分岐を推奨
template機能でも駆使して成否混在したコードを一括記述できるとか
0390デフォルトの名無しさん
2010/04/29(木) 17:34:01begin
some_action();
end
0391デフォルトの名無しさん
2010/04/29(木) 17:39:45BNFは説明の手段の一つ。
BNFに固執しているというよりは、BNFでも何でもいいから説明があった方がいいと言っている。
せっかくコードを書いたなら、その意図を読み手に誤解なく受け取ってもらった方が、書いた方も読む方も幸せでしょ?
コードを貼りたいだけなら別にそれ以上何も望まないけど。
0392デフォルトの名無しさん
2010/04/29(木) 17:47:10説明が欲しいなら該当箇所を質問しろよ
0393デフォルトの名無しさん
2010/04/29(木) 17:50:56だから、「CExpのパラメータの意味を教えてください」って質問だろ。
で、結局、その回答はBNFで書くのが一番楽だろう。
0394デフォルトの名無しさん
2010/04/29(木) 17:53:42コードを貼りたいだけなら別に質問はないわ。コード自体に興味はないし。
0395デフォルトの名無しさん
2010/04/29(木) 17:55:060396デフォルトの名無しさん
2010/04/29(木) 17:57:19コードが実現する機能には興味があった。
機能を説明することもできない貼りたいだけの捨てコードなら別にもうどうでもいいけど。
0397デフォルトの名無しさん
2010/04/29(木) 18:00:440398デフォルトの名無しさん
2010/04/29(木) 18:03:21こういう非同期をキャッチする仕組みいいね。
0399デフォルトの名無しさん
2010/04/29(木) 18:10:46並列の記述には優れているよね。
0400デフォルトの名無しさん
2010/04/29(木) 18:20:530401デフォルトの名無しさん
2010/04/29(木) 18:22:440402デフォルトの名無しさん
2010/04/29(木) 18:24:490403デフォルトの名無しさん
2010/04/29(木) 18:30:330404デフォルトの名無しさん
2010/04/29(木) 20:04:07直列に連なったステージが並列に動作するのがパイプライン
0405デフォルトの名無しさん
2010/04/29(木) 20:13:00>>402
当たり前だがチューリングマシンは基本直列だからねえ
つか、並列動作はやっぱ人間にとってわかりにくいから難しい
0406デフォルトの名無しさん
2010/04/29(木) 20:29:38そしたら使ってやるよ
0407デフォルトの名無しさん
2010/04/29(木) 20:52:15それは言語仕様じゃなくてコンパイラの範疇では
0408デフォルトの名無しさん
2010/04/29(木) 20:55:280409デフォルトの名無しさん
2010/04/29(木) 21:39:56CPUアーキテクチャを有効に活かすのはコンパイラの仕事。それを最もうまく行うのがコンパイラ。
0410デフォルトの名無しさん
2010/04/29(木) 21:48:340411デフォルトの名無しさん
2010/04/29(木) 21:51:180412デフォルトの名無しさん
2010/04/29(木) 22:02:56初代Pentiumのころはコンパイラがそれをやってたけど、今はCPUがそれやってくれるんだよね。
0413デフォルトの名無しさん
2010/04/29(木) 22:04:340414デフォルトの名無しさん
2010/04/29(木) 22:46:54ブロッキングとかメンドイのなくしたい
0415デフォルトの名無しさん
2010/04/29(木) 22:48:45JAVAのGCがそれをやってくれるってふれこみだったけど・・・・
0416デフォルトの名無しさん
2010/04/29(木) 22:55:05Cだとdata abstructionの目的でopaque pointerを用いることは
よくあるが、true typedefがあれば、それを型安全に出来る
0417デフォルトの名無しさん
2010/04/29(木) 22:59:590418デフォルトの名無しさん
2010/04/29(木) 23:02:47Cなんて使ってると、どうもstructと書いてしまう
0419デフォルトの名無しさん
2010/04/29(木) 23:10:38cpuはそんなことしてくんねーだろ
0420デフォルトの名無しさん
2010/04/29(木) 23:11:530421デフォルトの名無しさん
2010/04/29(木) 23:12:510422デフォルトの名無しさん
2010/04/29(木) 23:13:45最近のインテルプロセッサならx86をデコードしてuopsを実行するときにやってくれるよ。
0423デフォルトの名無しさん
2010/04/29(木) 23:15:13simdとかやってりゃ分かってくると思うんだが
いかにRSとかROBに処理をためないで計算実行するかをね
0424デフォルトの名無しさん
2010/04/29(木) 23:16:08それじゃ依存チェンの解決されんだろが
0425デフォルトの名無しさん
2010/04/29(木) 23:16:55何の話?
0426デフォルトの名無しさん
2010/04/29(木) 23:17:20インテルのCPUは下品だからな
今でもパイプライン埋めるなんて静的な最適化は事前にやるのが効率いい
0427デフォルトの名無しさん
2010/04/29(木) 23:18:23依存チェンって何?
0428デフォルトの名無しさん
2010/04/29(木) 23:19:29ちょっと打鍵ミスったけど知らないなら教えてあげない
団子にでも聞け
0430デフォルトの名無しさん
2010/04/29(木) 23:21:280431デフォルトの名無しさん
2010/04/29(木) 23:22:190432デフォルトの名無しさん
2010/04/29(木) 23:23:310433デフォルトの名無しさん
2010/04/29(木) 23:23:39超高速が不要なら無視してもいいよ
0434デフォルトの名無しさん
2010/04/29(木) 23:24:210435デフォルトの名無しさん
2010/04/29(木) 23:27:20http://download.intel.com/jp/developer/jpdoc/248966-017JA.pdf
0436デフォルトの名無しさん
2010/04/29(木) 23:27:330437デフォルトの名無しさん
2010/04/29(木) 23:33:030438デフォルトの名無しさん
2010/04/29(木) 23:34:55GCを使わない場合でもGCがある場合とそれほど違和感ないようにできないだろうか。
0439デフォルトの名無しさん
2010/04/29(木) 23:39:10deleteのあつかいは難しいが単純にメモリ解放だけしないということで
0440デフォルトの名無しさん
2010/04/29(木) 23:42:07バグがあってもそれをコンパイラで検出できればいい。
newでGCするようにしてそれを達成できるかな。
0441デフォルトの名無しさん
2010/04/29(木) 23:46:03でも実行時検知だけじゃなくコンパイラでって話ならかなり厳しい。
かなり文法や構文にルール導入すればできるだろうけど
0442デフォルトの名無しさん
2010/04/30(金) 00:20:360443デフォルトの名無しさん
2010/04/30(金) 00:23:570444デフォルトの名無しさん
2010/04/30(金) 00:42:23newとgcnewのポインタ間に代入互換性が無いんだぜ。仕方ないで済ませられないほど困る。
0445デフォルトの名無しさん
2010/04/30(金) 02:06:380446デフォルトの名無しさん
2010/04/30(金) 02:10:26中〜高レベルには必須だな
0447デフォルトの名無しさん
2010/04/30(金) 05:59:45折角GWに入ったんだから有意義に行こう
0448デフォルトの名無しさん
2010/04/30(金) 07:46:410449デフォルトの名無しさん
2010/04/30(金) 12:42:210450デフォルトの名無しさん
2010/04/30(金) 16:32:34学習者からすれば一つの言語に混在するのは良くないんじゃないかな。
低レベルならC/C++でいいけど、
何でも有りすぎて「やっちゃいけない」ことが多すぎるから、
できることを減らしていいからミスが少なくなるようなコンパクトな文法がいいな。
標準ライブラリの整理(scanfなんかいらない)や充実も必要に思う。
良い言語の条件は、
・読みやすい・メンテしやすいこと(他人の書いたperlコードなんて読みたくない)
・ライブラリが充実してること(画像読み取りぐらいは標準ライブラリに欲しい)
・熟練者じゃなくてもミスのないプログラムが書けること
なんじゃないかなと思う。
0451デフォルトの名無しさん
2010/04/30(金) 16:36:26宣言の時に処理を埋め込むことができるような指示子を持つ言語にすればGC言語にも変身できるんじゃないの?
0452デフォルトの名無しさん
2010/04/30(金) 16:45:00Managed C++ とか?
0453デフォルトの名無しさん
2010/04/30(金) 17:15:12分かる人いないの?
0454デフォルトの名無しさん
2010/04/30(金) 17:34:59あと、変数には型がある方がいいな。z=x+yと書かれても、
実行時までx,yがintかdoubleか文字列かわからない言語は高速にはならんだろ。
0455デフォルトの名無しさん
2010/04/30(金) 18:27:23スレタイに囚われて、Cより速い言語とか考えるから、CPU固有言語君とか出てくる。
0456デフォルトの名無しさん
2010/04/30(金) 20:46:54Ruby, Python, Haskell, OCaml, Scala, Clojure, Erlang, …
烏合のごとく言語が生まれてきているのにどれも似たようなLLばかりで、ハードウェア制御のような低レベル処理を行える言語が無い。
一方、Cは40年使われ続けてきているわけで、そろそろ置き換えられる言語が出てきてもいいだろう。
そこで、C程度の性能が出せて、Cが使われている分野を全てカバーでき、
過去の互換性に囚われて構文を妥協せず、今時の機能を使えてCよりもプログラミングしやすい新言語を作りたい。
0457デフォルトの名無しさん
2010/04/30(金) 20:53:09Cのどこが悪いかを述べよ
0458デフォルトの名無しさん
2010/04/30(金) 20:55:13デストラクタが無い。
0459デフォルトの名無しさん
2010/04/30(金) 21:41:09クラスとヒープがないと意味ないだろ。
0460デフォルトの名無しさん
2010/04/30(金) 22:09:21じゃあ、それも
0461デフォルトの名無しさん
2010/04/30(金) 22:12:56初期のC++じゃない
0462デフォルトの名無しさん
2010/04/30(金) 22:18:11そんなことはない。
自動変数の寿命が尽きる時に呼び出されるだけでも意味がある。
0463デフォルトの名無しさん
2010/04/30(金) 22:21:57ヒープに確保した場合は呼ばれないのか。
それに意味があるとは思えないな。
0464デフォルトの名無しさん
2010/04/30(金) 22:34:34ヒープならmalloc-freeの組が必ずあるからfreeをフックすれば、後始末ができるが
スタックはそれができない。
スタックの後始末をするためにデストラクタに相当する機能が欲しい。
0465デフォルトの名無しさん
2010/04/30(金) 22:36:120466デフォルトの名無しさん
2010/04/30(金) 22:38:040467デフォルトの名無しさん
2010/04/30(金) 22:38:070468デフォルトの名無しさん
2010/04/30(金) 22:39:100469デフォルトの名無しさん
2010/04/30(金) 22:39:53ということで、デストラクタは必要。
0470デフォルトの名無しさん
2010/04/30(金) 22:41:23ヒープは自前で呼び出す必要性がある。対象性なさ杉。
0471デフォルトの名無しさん
2010/04/30(金) 22:42:16ヒープとスタックで別の動作をするものが役に立つとは思えないし、分かりにくくなるだけだと思うが、実装は簡単だな。
0472デフォルトの名無しさん
2010/04/30(金) 22:54:32D
0473デフォルトの名無しさん
2010/04/30(金) 22:55:59同じ動作でいいじゃん
0474デフォルトの名無しさん
2010/04/30(金) 22:57:550475デフォルトの名無しさん
2010/04/30(金) 22:59:38無限エクステントを実装するのに使えそうだし
0476デフォルトの名無しさん
2010/04/30(金) 23:02:24ヒープとスタックで別の動作とか、そんな話どこから出てきたんだか
0477デフォルトの名無しさん
2010/04/30(金) 23:04:580478デフォルトの名無しさん
2010/04/30(金) 23:11:550479デフォルトの名無しさん
2010/04/30(金) 23:14:040480デフォルトの名無しさん
2010/04/30(金) 23:14:340481デフォルトの名無しさん
2010/04/30(金) 23:15:240482デフォルトの名無しさん
2010/04/30(金) 23:16:250483デフォルトの名無しさん
2010/04/30(金) 23:17:090484デフォルトの名無しさん
2010/04/30(金) 23:18:10それを実現したいなら、先に例外だな。
0485デフォルトの名無しさん
2010/04/30(金) 23:19:21try-catchはカッコ悪い
0486デフォルトの名無しさん
2010/04/30(金) 23:21:571、言語の設計とコンパイラの設計は違うぞ。
2、BNF出して議論するのは良いと思うけど、もう少し煮詰まってからだと思う。
3、デストラクタの議論は何かよく分からん。後、スタックというのは、C言語で
採用されたメモリーの使用方法で、コボルにはスタックという概念が無かったし。
非スタックというアプローチが有効だとは思わないが、それも一考の価値は
有ると思う
4、C言語の悪いところは、プリプロセッサとか色々。
0487デフォルトの名無しさん
2010/04/30(金) 23:23:21最後にはCPU固有言語君が湧いてくるいつもの無限ループが始まります。
↓
0488デフォルトの名無しさん
2010/04/30(金) 23:28:43PUSH,POPはCPUの基本的な命令だから、スタックはサポートしたいだろう。
0489デフォルトの名無しさん
2010/04/30(金) 23:30:01例外って、sjljの敷居を下げてモラルハザードを起こすだけの存在だよね
0490デフォルトの名無しさん
2010/04/30(金) 23:30:470491デフォルトの名無しさん
2010/04/30(金) 23:34:45まぁ、結局のところそうなんだけど、C++は少し読みにくいので、
機能的にはC++から多重継承やフレンドを取り除いて、C++で出来る事は
全部出来るけど、読みやすく、書きやすく、
その上システムレベルのプログラミングもやりやすい、
ってのがお年頃だと思う。
そうそうそう言えば、
二進数 0b00001111
八進数 Oc0017
10進数 0d15
16進数 0xF
または
二進数 Bi00000001111
八進数 Oc017
10進数 De015
16進数 Hx0F
0492デフォルトの名無しさん
2010/04/30(金) 23:41:280493デフォルトの名無しさん
2010/04/30(金) 23:47:06> 1、言語の設計とコンパイラの設計は違うぞ。
確かに。
このスレッドは前者、「言語の設計」をするスレッドである、ということを明確にしておきたいね。
0494デフォルトの名無しさん
2010/04/30(金) 23:47:58setjmp-longjmp 綴りあってたっけ?
0495デフォルトの名無しさん
2010/04/30(金) 23:49:17おお、それをそう略すのか。初めて知った。thx
0496デフォルトの名無しさん
2010/04/30(金) 23:52:300497デフォルトの名無しさん
2010/05/01(土) 00:01:280498デフォルトの名無しさん
2010/05/01(土) 00:01:580499デフォルトの名無しさん
2010/05/01(土) 00:11:48教室の後ろでブツブツ言ってても気持ち悪がられるだけだよ^^
0500デフォルトの名無しさん
2010/05/01(土) 00:13:25C++は汚くなりすぎた。
0501デフォルトの名無しさん
2010/05/01(土) 00:18:160502デフォルトの名無しさん
2010/05/01(土) 01:34:39後x86しかしらんやつは今の主流のRISCをちょい勉強したらどうだろ
今でも引数や戻り番地をスタックに積むしかないと思ってそうだ
けど、スタックはメモリの局所性が高くてキャッシュとの相性が抜群だからいいんよ
0503デフォルトの名無しさん
2010/05/01(土) 01:38:41仮想関数にしなさいってのは、どうかと思うんだけど、あれって
コンパイラが自動的に出来ない物なのか?
常に仮想関数を定義しなきゃ駄目なら、コンパイラがそう解釈すれば
良いのに、何故にあんな仕様になってるのか、理解できないんだけど、
何が理由で、あれはあんな風になってるんだ?
暗黙のコピーコンストラクタとか、色々、やらなくても良いことまで
やってる癖に、なぜデストラクタという一番厄介な部分で、常に手書き
せよと言う、変な仕様になってるのか理解できないんだが。
0504デフォルトの名無しさん
2010/05/01(土) 01:41:44スタックを模したレジスタ
0505デフォルトの名無しさん
2010/05/01(土) 01:43:37ゼロオーバーヘッド原則
意訳「勝手にやるんじゃねえ糞野郎」
0506デフォルトの名無しさん
2010/05/01(土) 01:50:39その割に、暗黙の型変換とかね、CとC++はそう言うのが悪いと思う。
そもそも、継承したクラスか、継承元なのかは、静的に解析出来るわけだし、
アップキャストしても、それは同じように分かるはず、というか分かるから、
仮想関数にしておけば、デストラクタが呼び出されるわけだし。
なんかそう言ういい加減さが、C++の欠点なんだと思うんだ。
継承したクラスで、デストラクタが呼び出されなくて嬉しい、という
場合は無いでしょ、あっちゃならねーよ。なんのための継承か
わからねーよ。
と言うことで、新言語ではデストラクタがちゃんと呼ばれることにしよう。
0507デフォルトの名無しさん
2010/05/01(土) 01:51:20使いたくない時だけno-virtual指定するとか。
0508デフォルトの名無しさん
2010/05/01(土) 01:52:44仮想関数は重い。C++はそのコストを無視できないんだよ。
0509デフォルトの名無しさん
2010/05/01(土) 01:53:49あの仕様見てたらオブジェクト指向は低級言語に合わねえってのの
実証実験じゃねえのかと思うよ
0510デフォルトの名無しさん
2010/05/01(土) 01:55:070511デフォルトの名無しさん
2010/05/01(土) 01:55:360512デフォルトの名無しさん
2010/05/01(土) 01:56:06別にあんたのために作ったんじゃないんだからねっ
0513デフォルトの名無しさん
2010/05/01(土) 02:03:160514デフォルトの名無しさん
2010/05/01(土) 02:03:56いやいや、意味が分からね。静的に解析出来るじゃん。
基底クラスは自分のデストラクタ使えば良いし、派生クラスは自分と
基底クラスのデストラクタ双方が必要ってのは絶対なんだから。
基底クラスが派生クラスのデストラクタを必要とすること無いんだし。
0515デフォルトの名無しさん
2010/05/01(土) 02:06:310516デフォルトの名無しさん
2010/05/01(土) 02:07:210517デフォルトの名無しさん
2010/05/01(土) 02:24:00静的に解析って……アホか
基底へのポインタが、基底型オブジェクトを指してるのか派生型オブジェクトを
指しているかは実行時の問題であって、静的に解析できんだろが
だからvtblとか使ってポリモーフィズムさせてるんだぞC++は
基底へのポインタをdeleteしたときに、それが指している実行時型に応じた
デストラクタが起動されるためには、デストラクタが仮想関数でなければならない
そして常にデストラクタを仮想にしないのは、zero overhead principleのため
それがC++の流儀だ
0518デフォルトの名無しさん
2010/05/01(土) 03:24:51言ってることがよく分からない。
継承されるかどうか分からないから、ヴァーチャル付けとけで、
zero overhead principleが守られてるのか?
0519デフォルトの名無しさん
2010/05/01(土) 03:28:02だから、ダメなんだよC++は。
0520CPU固有言語君
2010/05/01(土) 04:54:51うおー!
とりあえず、Cの文法読んでるぞ。ウォー!ワー!
http://www.quut.com/c/ANSI-C-grammar-y.html
0521CPU固有言語君
2010/05/01(土) 05:12:15おかげさまで、BNFと同等のものが必要ということが分かりました。
ホント、馬鹿でした。(汗
0522CPU固有言語君
2010/05/01(土) 05:34:32C式0 : C式1 ( 演算子1 C式1 )+
C式1 : C式2 ( 演算子2 C式2 )+
C式2 : C式3 ( 演算子3 C式3 )+
C式3 : C式4 ( 演算子4 C式4 )+
C式4 : C式5 ( 演算子5 C式5 )+
C式5 : C式6 ( 演算子6 C式6 )+
:
:
C式∞: 字句
0523デフォルトの名無しさん
2010/05/01(土) 05:35:510524デフォルトの名無しさん
2010/05/01(土) 05:36:310525デフォルトの名無しさん
2010/05/01(土) 11:54:54それなら、こんな↓感じじゃない?
C式 : C式 ( 演算子 C式 )*
演算子 : <<ここが未定義>>
0526デフォルトの名無しさん
2010/05/01(土) 12:44:17525それだと演算子の優先順位がつかないので、
定義されている演算子も含めてこんな感じでしょうか?
C式 : C式∞
C式∞ : C式(∞-1) ( 演算子(∞-1) C式(∞-1) )*
:
:
C式1 : C式0 ( 演算子1 C式0 )*
C式0 : トークン ( 演算子0 トークン )*
トークン: [^\s]
演算子200: '.' | '->' | <<未定義>>
演算子190: '*' | '/' | '%'| <<未定義>>
演算子180: '+' | '-'| <<未定義>>
演算子170: '<<'| '>>'| <<未定義>>
演算子160: '<' | '<=' | '>' | '>='| <<未定義>>
演算子150: '=='| '!='| <<未定義>>
演算子140: '&'| <<未定義>>
演算子130: '^'| <<未定義>>
演算子120: '|'| <<未定義>>
演算子110: '&&'| <<未定義>>
演算子100: '||'| <<未定義>>
演算子80: ','| <<未定義>>
演算子n:<<未定義>>
0527デフォルトの名無しさん
2010/05/01(土) 13:00:360528デフォルトの名無しさん
2010/05/01(土) 13:08:32トークン: [^\s]
演算子: 演算子200 | 演算子190 | 演算子180 | 演算子170 | 演算子160 | 演算子150 | 演算子140 | 演算子130 | 演算子120 | 演算子110 | 演算子100 | 演算子80 | 演算子n
演算子200: '.' | '->' | <<未定義>>
演算子190: '*' | '/' | '%'| <<未定義>>
演算子180: '+' | '-'| <<未定義>>
演算子170: '<<'| '>>'| <<未定義>>
演算子160: '<' | '<=' | '>' | '>='| <<未定義>>
演算子150: '=='| '!='| <<未定義>>
演算子140: '&'| <<未定義>>
演算子130: '^'| <<未定義>>
演算子120: '|'| <<未定義>>
演算子110: '&&'| <<未定義>>
演算子100: '||'| <<未定義>>
演算子80: ','| <<未定義>>
演算子n:<<未定義>>
0529デフォルトの名無しさん
2010/05/01(土) 13:10:02こんなかんじ?
left: ',' | <<未定義>>
left: '||'| <<未定義>>
left: '&&'| <<未定義>>
left: '|'| <<未定義>>
left: '^'| <<未定義>>
left: '&'| <<未定義>>
left: '=='| '!='| <<未定義>>
left: '<' | '<=' | '>' | '>='| <<未定義>>
left: '<<'| '>>'| <<未定義>>
left: '+' | '-'| <<未定義>>
left: '*' | '/' | '%'| <<未定義>>
left: '.' | '->' | <<未定義>>
C式 : C式 ( 演算子 C式 )*
| トークン
演算子 : <<ここが未定義>>
0530デフォルトの名無しさん
2010/05/01(土) 13:11:400531デフォルトの名無しさん
2010/05/01(土) 13:14:110532デフォルトの名無しさん
2010/05/01(土) 13:14:500533デフォルトの名無しさん
2010/05/01(土) 13:16:35欲しいなら自分で定義に追加すればいいよ。
0534デフォルトの名無しさん
2010/05/01(土) 13:23:310535デフォルトの名無しさん
2010/05/01(土) 13:36:250536デフォルトの名無しさん
2010/05/01(土) 13:44:480537デフォルトの名無しさん
2010/05/01(土) 14:04:26まじめにやるとCは結構でかいぞ
後書き方は::=か=が一般的かね。
式 = 項 { 演算子 項 }
みたいなかんじ。
PEGもいいぜ
0538デフォルトの名無しさん
2010/05/01(土) 14:05:46そうなんだが、BNF中に未定義とかあったらあかんだろw
空(ε)と未定義は違う
0539デフォルトの名無しさん
2010/05/01(土) 15:06:59それこそBNFのお勉強じゃないんだからね。BNF自体方言があるわけだし。
未定義は好意的に受け取れば「みなさん追加してください」って意味なんだろうけど
わざわざ明記する必要はないね。
0540デフォルトの名無しさん
2010/05/01(土) 18:21:18共通な話題にしたいなら
仕様書や教科書を読めとは言わんが
少し書き方を覚えても損はないよ。
区切り文字や左と右に何を書くのか、
繰り返しや選択は?位ね
俺には未定義とかleftとか意味わからんかった
0541デフォルトの名無しさん
2010/05/01(土) 18:28:180542デフォルトの名無しさん
2010/05/01(土) 20:48:37駆動とかルーチンとかの基本的な話をしようぜ。
構文にこだわるなら安全なマクロの仕組みとか。
マクロ自体をPEGとかBNFとかで組めるようにする手もあるけどな。
0543デフォルトの名無しさん
2010/05/01(土) 21:09:390544デフォルトの名無しさん
2010/05/01(土) 21:13:03BNFとかだらだら書かれたら迷惑。
書いてるのC言語だし。
0545デフォルトの名無しさん
2010/05/01(土) 21:16:21>>352-354みたいな文章をだらだら書かれたら困るw
0546デフォルトの名無しさん
2010/05/01(土) 21:18:20共通言語として読み手が理解しやすいからだよ。
0547デフォルトの名無しさん
2010/05/01(土) 21:22:13何も残らないじゃないか
0548デフォルトの名無しさん
2010/05/01(土) 21:31:58if文は、現状のままで良い?
if(条件){
}else{
}
と、中括弧を必須にするのはどう?
0549デフォルトの名無しさん
2010/05/01(土) 21:34:33そうだけどさ、BNFの勉強会始められたらビックリだよ。
コンパイラ関係のスレは沢山あるし、まだまだそこまで
議論煮詰まってる訳じゃないし、BNFで書きにくいから
なんて言うのは、今、考える事じゃないし。
0550デフォルトの名無しさん
2010/05/01(土) 21:39:53別にBNFの意味を確認しあうぐらいはいいんじゃないの。言葉の認識を合わせるためなんだから。
そもそも勉強会なんて始めてないし。ビックリするなら始まってからビックリすればいい。別に大したビックリでもないし。
0551デフォルトの名無しさん
2010/05/01(土) 21:50:05BNF位、読めて書ける人が、気合い入れないで、
あの文法めんどくせーよ、よめねぇーよ、と
気楽に書いてるのがこのスレなんだよ。
だから、稚拙なBNF書いてUPされるとすげー
迷惑なんだよね。
例えて言うと、言語学者が「ら抜き言葉」は文法上の必然か
どうか議論してるところに、「ままぁ、ひらがなかけたよ」と
子供が練習帳持ってきて、ちゃんと書けてるか、みてみて
と言ってきてるような違和感があるんだよ。その違和感というか
迷惑に気がつけないで、BNFかいて何が悪いという、その感性に
ビックリなんだよ。
0552デフォルトの名無しさん
2010/05/01(土) 21:55:15お前は稚拙なBNFにビックリするから嫌い。
好みの問題は歩み寄るのは難しいから、まあ各人が好きなように書けばいいんじゃないの。
もっとも、個人的には「俺がビックリするから止めろ」という姿勢には賛同できないけどね。
0553デフォルトの名無しさん
2010/05/01(土) 21:58:09稚拙なBNFをUPするな、BNFの書き方すら怪しいレベルで
UPするなって事もちゃんと書いてるので、日本語すら怪しい
お前がどれだけ迷惑なのか・・・
でも>>552を平気で書いてるところを見ると、お前はそう言う人間
なんだろと思う。
0554デフォルトの名無しさん
2010/05/01(土) 21:59:510555デフォルトの名無しさん
2010/05/01(土) 22:00:46同意
0556デフォルトの名無しさん
2010/05/01(土) 23:18:38変わりにswitch文を削除しても良いよね。
http://www16.plala.or.jp/hiyokogumi/dic/a_evaluate.html
0557デフォルトの名無しさん
2010/05/01(土) 23:19:43すいません。オレがBNFをちゃんとかけなかったばっかりに、、、。
たしかに文法を書くならどの記法で書くと明記した上でその文法に則って書けば
突込みが入ることもないですよね。
そこで質問です。
<<未定義>>と書いたのは演算子を後から定義できることを表す為でした。
しかし実行時に文法が変わることを記述可能な文法の記法を私は知りません。
もしご存知でしたら文法が後で変わる記法を教えてください。
またご存知なければどのように書けば違和感がなく伝えることが出来るか教えてください。
>>532
前置演算子がないのは書いたプログラムに前置演算子がないからです。
0558デフォルトの名無しさん
2010/05/01(土) 23:24:24switchを無くしてEVALUATE文にする理由は?
0559デフォルトの名無しさん
2010/05/01(土) 23:24:55確かにswitch-case文よりこっちの方がいいな。これがあればif文も要らんかも。
0560デフォルトの名無しさん
2010/05/01(土) 23:27:02使える型が制限されるけど、SIMDでも威力を発揮しそうなんだよね。
>>558
switchに関するお約束やノウハウが多すぎるので、この際、switchを
破棄した方が、Cから流れてきた人に混乱が少ないと思う。
0561デフォルトの名無しさん
2010/05/01(土) 23:28:53}else if(A() == C()){
}else if(A() == D()){
}else if(A() == E()){
}else{
}
これのswitch風構文糖が欲しいな。
evalutateってそういうの?
0562デフォルトの名無しさん
2010/05/01(土) 23:31:20もっと強烈に強力。それが出来るのは当然として。
0563デフォルトの名無しさん
2010/05/01(土) 23:32:020564デフォルトの名無しさん
2010/05/01(土) 23:39:41>駆動とかルーチンとかの基本的な話をしようぜ。
>
>構文にこだわるなら安全なマクロの仕組みとか。
>マクロ自体をPEGとかBNFとかで組めるようにする手もあるけどな。
この話はすごく興味があります。
なにかお考えがあればお聞かせください。
0565デフォルトの名無しさん
2010/05/01(土) 23:47:12即決だな
0566デフォルトの名無しさん
2010/05/02(日) 00:03:29新しいswitch文に欲しい機能一覧
・1つのケースについて条件を複数組み合わせて記述できる。
・型チェックを簡潔に記述できる。
・型内の値に名前を付けて取り出すことが出来る。
・何かしらのチェック項目をすべて網羅されていることをチェックできる。
足りなければ追加してください。
0567デフォルトの名無しさん
2010/05/02(日) 00:03:46EVALUATE文の導入には、もの凄く大きな問題が有って。
>>561
EVALUATE TRUE
WHEN A()=B()
WHEN A()=C()
WHEN A()=D()
WHEN A()=E()
END−EVALUATE.
と、
EVALUATE A()
WHEN B()
WHEN C()
WHEN D()
WHEN E()
END−EVALUATE.
では、
A()が呼び出される度に違った結果を返す関数の場合、
結果が異なる場合があり得るんだよね。
強力な甘さがあるので、そんな物だと言うことでOKだろうと思うのだけど、
その辺このコンパイラならこうなるああなるってのは避けたいと思う。
後、評価順を、1行1列、2列、3列、とするとか、一行1列、2行2列として
行くか、キーワードを追加して選べるようにするかとか。
0568デフォルトの名無しさん
2010/05/02(日) 00:07:20これ↓
if(A() == B()){
}else if(A() == C()){
}else if(A() == D()){
}else if(A() == E()){
}else{
}
と、これ↓
auto V = A();
if(V == B()){
}else if(V == C()){
}else if(V == D()){
}else if(V == E()){
}else{
}
は使い分けられるようにしたいな。
基本的には後者だけあれば十分だけど。
0569デフォルトの名無しさん
2010/05/02(日) 00:08:200571デフォルトの名無しさん
2010/05/02(日) 00:14:35それなら、evaluateで問題無いわ。
書いた回数しかA()を評価されないなら誤解しなそうだし。
ただ、比較演算子がオーバーロードされる場合はちょっと怖いかな。
比較演算子の右辺と左辺を個別に処理できない場合は困るね。
0572デフォルトの名無しさん
2010/05/02(日) 00:19:52簡単にはC風のフラットなスタックにしちまえば良いんだけど、その場合でもインラインやマクロみたいな
別の駆動レコードに寄生する関数をOKにしたいなぁ。
またルーチンだと、引数の処理をどうするのかが一つのポイントかね。
評価後に渡すのか遅延評価&メモ化するのかでずいぶん挙動が違うし(遅延評価はバグの温床になりそうだけど)。
また、C風のサブルーチンオンリーじゃなくて、高級なコルーチンとか継続OKのルーチンとか……
……・は要らないか。
マクロは名前解決がポイントかね。cだと健全かどうかはあまり気にしなくて良さそうだけど、名前空間を汚染するか
どうかはけっこう重要にならない?
どう解決するかはあんまりアイディア無いけど。簡単には関数と同じ扱いにするのかな?
ちなみに
>マクロ自体をPEGとかBNFとかで組めるようにする手もあるけどな。
は、コンパイラのパーサをパース中に差し替えることができるようにすれば可能だよ。
0573デフォルトの名無しさん
2010/05/02(日) 00:20:230574デフォルトの名無しさん
2010/05/02(日) 00:25:05ググった感じ、下の記述と、このスレくらいしか出てこないんだけど、継続ともまた違うんだよね?
>【駆動レコード(フレーム)】
>
>関数呼び出しによる駆動レコードは、関数が生成する局所環境、大域環境へのポインタ、
>引数の受け渡し、戻り番地に関する情報を記録する。
>駆動レコードは、関数が呼び出されたときにスタック上に生成され、
>関数内でリターン命令が実行されたときにスタックからポップアップされて消滅する。(H17 137文字)
0575デフォルトの名無しさん
2010/05/02(日) 00:26:16COBOLは知ってる人しか知らない失われた古代文明だから、現代人にとっては学ぶべきところがある。
0576デフォルトの名無しさん
2010/05/02(日) 00:26:44前スレのENVIRONMENT DIVISION辺りから。
0577デフォルトの名無しさん
2010/05/02(日) 00:43:10ごめんごめん、駆動レコードのこと。スタックフレームかアクティベーション・レコードというのが一般的かね。
まあ、スタックフレームを動かす時の動作全般のことにしといて。
0578デフォルトの名無しさん
2010/05/02(日) 00:45:54BNFで未定義があっちゃだめ。
アレはオートマトンを人間に読めるように書いたもんだと思ってくれ
字句的に未定義がダメなら変数とかの宣言どうすんの?
字句解析と構文解析とセマンティックスはそれぞれ別に考えなきゃダメ
つまりif (cond) {}とか書いてあっても動作はかいてないでしょ?てこと
switchはgo風のがいいよ。C的なswitch(xx) { case XX: }と
switch { 条件式: }って使える。
変な構文ならシンプルにif-elseの砂糖でいんじゃね
>>572
突っ込ませてもらうと、駆動レコードとか言わずにスタックフレームとか言えばいいのに。
インラインは別にフレームなんて持たなくていいし、マクロは実行時には関係ないし。
遅延評価やメモをやるなら関数型だろ。低レベル言語でやるのか?カリー化とかも?
継続とかコルーチンとかコンテキストの動的生成が必要だから
ランタイムが重くなるかもしれんが比較的軽く実装もできるし
クロージャもだが仕様にあってもおもしろいかもね
マクロが好きな人が多いみたいだが
algol系言語のmacroは黒魔術になりがちだから敬遠すべきと思うぜ
どうせやるなら変数定義とlamdaと構文的なブロックとifとgotoだけの言語作って
後は全部マクロでやったらどうさ
演算子とか構文をいじれるような言語はまったく実用的じゃないってことを
考えて見てくれ
0579デフォルトの名無しさん
2010/05/02(日) 00:57:26<<未定義>>は未定義ですってコメントとして書けばいいよ。
0580デフォルトの名無しさん
2010/05/02(日) 00:57:35低水準言語だとForthなんかがそんな感じだよね。
まあ、マクロ無しでもインライン&引数評価なし関数で十分代用できるけどね。
これでもまだ落とし穴たくさんあるけど。
0581デフォルトの名無しさん
2010/05/02(日) 00:59:59スタックフレームを抽象化しようというのは
かなりアーキテクチャ依存な話だし
そんなのは意識はしつつももっと後に考えていい話。
むしろレジスタ数の多いCPUでグローバル最適化を賢く作ったら
ほとんどスタック使わないようにコンパイルできるかもしれんでしょ
スタックはあんま使わずにすべてヒープ確保何て言う方向性だってあるし
スタックをリストとか別な構造で作ったらどうよなんて
おもしろいかもしれんが低レベルから離れていく
0582デフォルトの名無しさん
2010/05/02(日) 01:02:06forthはlispと同じく永遠のマイナーだからな
0583デフォルトの名無しさん
2010/05/02(日) 01:03:14「スタックフレーム」も知らないけど、スタックを直接操作できるってこと?
どう使うんだろ。良くわからないけど、相当邪悪なことができそうだね。
0584デフォルトの名無しさん
2010/05/02(日) 02:19:40http://golang.org/doc/go_spec.html#Switch_statements
PHP もこんな感じで書けるので COBOL のEVALUATEに似てるかも
switch (true) {
case A == B:
case C != D: 処理1(); break;
default: 処理2(); break;
}
haXeはenumをswitchで使うとenumの全パターンをチェックする機能があります。
関数型言語のmatchに一段近くなるけどマッチング能力に不満も残ります。
http://haxe.org/ref/enums
Scalaになるとmatch構文とsealed case classがとても強力で値のバインディングと
チェックが出来たりifによる条件もつけたりと強力ですがclassが必要になってしまいます。
新しいC言語はclassいらないので
union UNI {
struct A (char* a);
struct B (static int b,imutable int c);
}
UNI uni = B(3,4);
switch (uni) {
case A(str): 処理1(str); break;
case B(a,b) if(hoge): 処理2(str); break;
}
というかんじがいいのかもしれません。
0585デフォルトの名無しさん
2010/05/02(日) 03:18:29MIMDを統一的に扱える構文があるといいね。
0586デフォルトの名無しさん
2010/05/02(日) 06:01:480587デフォルトの名無しさん
2010/05/02(日) 09:31:06上から順番に判定するルールと、、、そのへん詳しくないのだけど。
0588デフォルトの名無しさん
2010/05/02(日) 09:48:310589デフォルトの名無しさん
2010/05/02(日) 14:51:470590デフォルトの名無しさん
2010/05/02(日) 14:58:330591デフォルトの名無しさん
2010/05/02(日) 15:00:52人少なくなったね
twitter始まったころとほぼ同時期に始めたけど、
いまいち何が面白いのか分からなかったからやめてたけど、
もういっかいやってみるか。
0592デフォルトの名無しさん
2010/05/02(日) 15:02:41初心者を生温かくいじるとこでしょw
最近規制も多いし
0593デフォルトの名無しさん
2010/05/02(日) 15:36:43読んでみたいけどどう検索すれば読みやすくヒットするのか
未だにわからんのだよ、twitterってどうも読みにくい。
0594デフォルトの名無しさん
2010/05/02(日) 15:43:27まずは50人フォローしてみな。
んで適当なtweetにreplyして反応をみろ。
自然にクラスタが出来上がる。
0595デフォルトの名無しさん
2010/05/02(日) 15:47:4950人ものぶつぶつ言ってること聞かなきゃ、
言語の話にたどり着けないのか?
2chより酷いな(w
0596デフォルトの名無しさん
2010/05/02(日) 15:49:210597デフォルトの名無しさん
2010/05/02(日) 15:51:53ゴチャゴチャ言わずに行動しろw
50人登録するぐらい10分でできるだろ。
文句ばっかり言って何もしないニート的性格が身についちゃってるぞ。
0598デフォルトの名無しさん
2010/05/02(日) 15:56:330599デフォルトの名無しさん
2010/05/02(日) 15:58:32お前もつぶやいてるじゃん。
twitterではお前の呟きに対してスレ違いと言われないだけマシじゃん?
0600デフォルトの名無しさん
2010/05/02(日) 15:59:57スレ違いというレスポンスが返ってくることもなければ
それ以外のどんな有意義なやりとりもなされないだろうな
0601デフォルトの名無しさん
2010/05/02(日) 16:04:16同じ興味を持っているみんながお互いにフォローしあってなんとなくクラスタっぽいものが出来上がって、
そこで井戸端会議らしき事がなされる。
お互いがクラスタだと認識するために必要な機能は揃っている。
しかも荒らしは存在できない仕組みになっている。
0602デフォルトの名無しさん
2010/05/02(日) 16:07:18そこ読んでこれは参加する価値が有ると思えば参加するから。
0603デフォルトの名無しさん
2010/05/02(日) 16:07:360604デフォルトの名無しさん
2010/05/02(日) 16:09:06俺のlistを見せればすぐに納得できるだろうけど、
匿名掲示板ですることじゃないね。
自分でたどり着いてこい。
0605デフォルトの名無しさん
2010/05/02(日) 16:11:21信者とは違う。
実際に成果物を上げているコミュニティがあることを言ったまで。
0606デフォルトの名無しさん
2010/05/02(日) 16:13:12もうこの話はすれ違いだから終わりな。
0607デフォルトの名無しさん
2010/05/02(日) 16:14:04自分の言いたいことを誰にも聞いてもらえず、そういう奴は自然にやめていく。
つまり、ゴミはtwitterに存在できないw
0608デフォルトの名無しさん
2010/05/02(日) 16:19:222chだとスレタイというテーマに沿って書き込まれるから、ある程度まとまった情報が得られる。
あとツイッターが強制コテハンなせいで自由な書き込みが少ないのも面白くない。
勝手に馴れ合ってれば良いじゃん。押し付けるなよ
0609デフォルトの名無しさん
2010/05/02(日) 16:20:24布教する手間が省けて色々捗るぞ
0610デフォルトの名無しさん
2010/05/02(日) 16:24:08別に誰も押し付けてないけどw
2chが潰れたらお前らはどこに行くのかなぁと疑問に思っただけ。
0611デフォルトの名無しさん
2010/05/02(日) 16:24:52はあ?お前のつぶやきレベルが低過ぎるから見せられたもんじゃないんだろ
なにが、自分でたどり着いてこい(キリッだよwww
参加するに値するものを示せば参加するって言ってるのに順番がおかしいだろw
0612デフォルトの名無しさん
2010/05/02(日) 16:28:39twitterでは参加するに値するかどうか決めるのはお前じゃないんだよ。
お前がやりたいと思ったらアプローチしてくるのはお前なんだよ。
0613デフォルトの名無しさん
2010/05/02(日) 16:30:002chでツイッターの布教してるゴミはなんなの?w
0614デフォルトの名無しさん
2010/05/02(日) 16:33:33どんな話題で盛り上がってるかなんて、何10人何100人追っかけないと把握できな糞ツール。
0615デフォルトの名無しさん
2010/05/02(日) 16:36:050616デフォルトの名無しさん
2010/05/02(日) 16:44:460617デフォルトの名無しさん
2010/05/02(日) 16:48:38黙っておけばよかった。orz...
2chは2chで、twitterはtwitterで場合によりけりだと思うんですけど。
0618デフォルトの名無しさん
2010/05/02(日) 16:49:04全世界に公開されているように見えて、
検索性が悪くて誰も情報に辿り着けない
0619デフォルトの名無しさん
2010/05/02(日) 16:56:57でもリアルほど気を使わなくていいだろう
0620デフォルトの名無しさん
2010/05/02(日) 17:02:00誰と付き合うべきか一発でわかっていいよ。
0621デフォルトの名無しさん
2010/05/02(日) 17:03:520622デフォルトの名無しさん
2010/05/02(日) 17:09:00ところが、この過疎スレが今やム板で最も活発なスレの一つなんだよね。
ム板は2chでは一番重要な板だ。
VIPほど人は多くないがVIP住人はそもそも素人集団だ。
2chのあるべき姿を考え行動できるのはこの板しかない。
にもかかわらずこの過疎ぶり。
もう2ch終わったなとしか言いようがない。
0623デフォルトの名無しさん
2010/05/02(日) 17:23:032chのあるべき姿を考え行動するのはこの板でも、VIPでもν速でもない。
ススキノで遊んでる中年オヤジと、フィリピン在住のアメリカ人だ。
0624デフォルトの名無しさん
2010/05/02(日) 17:26:47と思っているお前には何もできないw
0625デフォルトの名無しさん
2010/05/02(日) 17:29:15自称ITコンサルとか自称ジャーナリストとか、わらわらしてそう。
0626デフォルトの名無しさん
2010/05/02(日) 17:30:09これで満足か?
0627デフォルトの名無しさん
2010/05/02(日) 17:36:530628デフォルトの名無しさん
2010/05/02(日) 17:44:36ツイッターwwww
0629デフォルトの名無しさん
2010/05/02(日) 18:20:30http://pc12.2ch.net/test/read.cgi/tech/1272791627/
0630デフォルトの名無しさん
2010/05/02(日) 18:29:48削除依頼しとけよ
0631デフォルトの名無しさん
2010/05/02(日) 18:49:402ch以外の避難場所確保しとけよ
0632デフォルトの名無しさん
2010/05/02(日) 18:52:26スレチ過ぎ
しかしこのスレみてたら
今更ながら下からCとgoとscalaと
javaとjsとpythonの6つで十分だなと思う
0633デフォルトの名無しさん
2010/05/02(日) 18:54:14全部似たような言語ばかり集めたな
0634デフォルトの名無しさん
2010/05/02(日) 18:57:410635デフォルトの名無しさん
2010/05/02(日) 19:10:370636デフォルトの名無しさん
2010/05/02(日) 19:11:280637デフォルトの名無しさん
2010/05/02(日) 19:19:07クリティカルなところは正格評価させりゃいいからさ
0638デフォルトの名無しさん
2010/05/02(日) 19:22:53いや、原理的にすべての値のクロージャ変換があるからなんだけど、
最適化でなんとかなるような気もするんだけど、なんともなっていない気がする。
0639デフォルトの名無しさん
2010/05/02(日) 19:33:520640デフォルトの名無しさん
2010/05/02(日) 19:38:090641デフォルトの名無しさん
2010/05/02(日) 19:38:150642デフォルトの名無しさん
2010/05/02(日) 19:39:350643デフォルトの名無しさん
2010/05/02(日) 19:44:150644デフォルトの名無しさん
2010/05/02(日) 19:46:380645デフォルトの名無しさん
2010/05/02(日) 20:09:390646デフォルトの名無しさん
2010/05/02(日) 20:14:070647デフォルトの名無しさん
2010/05/02(日) 20:19:39モジュールのインターフェイスをどうするかという汎用視点で考えりゃ良い。
関数型はモジュールの影響が内部に閉じているだけだろ。
局所化の度合いは強いけど、モジュールの中と外を対称化できないコストもデカいから大変だな、
ぐらいで考えりゃいいだろ。
0648デフォルトの名無しさん
2010/05/02(日) 20:22:23ぐらいで考えりゃいいだろ。
0649デフォルトの名無しさん
2010/05/02(日) 20:28:44RWHはHaskellの仕組みには言及していないぞ
0650デフォルトの名無しさん
2010/05/02(日) 20:30:120651デフォルトの名無しさん
2010/05/02(日) 20:45:390652デフォルトの名無しさん
2010/05/02(日) 20:46:540653デフォルトの名無しさん
2010/05/02(日) 20:50:260654デフォルトの名無しさん
2010/05/02(日) 20:59:310655デフォルトの名無しさん
2010/05/02(日) 21:06:410656デフォルトの名無しさん
2010/05/02(日) 21:29:060657デフォルトの名無しさん
2010/05/02(日) 23:02:29D(インディーズ)
Go(未完成)
どれかを使え
0658デフォルトの名無しさん
2010/05/02(日) 23:18:160659デフォルトの名無しさん
2010/05/02(日) 23:19:20一番上の岡村?っての一択じゃね?
0660デフォルトの名無しさん
2010/05/02(日) 23:20:490661デフォルトの名無しさん
2010/05/02(日) 23:33:040662デフォルトの名無しさん
2010/05/03(月) 01:21:390663デフォルトの名無しさん
2010/05/03(月) 01:23:48F#は何ができるん?
0664デフォルトの名無しさん
2010/05/03(月) 01:23:560665デフォルトの名無しさん
2010/05/03(月) 01:25:45検索サイト以外は微妙。ハンパなネットユーザーは至れり尽くせりだと感じてるのかもしれないが
0666デフォルトの名無しさん
2010/05/03(月) 01:36:14浅く広くは自分の子とじゃねえか。ちゃんと使ってみてねえだろ
Ken Thompsonだから看板に申し分ねえし、
まだ未完成とはいえなかなか悪くねえ言語仕様だよ
アホがよってくるオブジェクト指向と誰もついてこない関数言語を避けているのは賢明だ
0667デフォルトの名無しさん
2010/05/03(月) 01:38:250668デフォルトの名無しさん
2010/05/03(月) 01:45:530669デフォルトの名無しさん
2010/05/03(月) 02:15:05文脈自由文法の範囲外なのですね
0670デフォルトの名無しさん
2010/05/03(月) 02:16:200671デフォルトの名無しさん
2010/05/03(月) 02:25:44軽口を叩いて生み出される物があるなら教えてください
0672デフォルトの名無しさん
2010/05/03(月) 02:26:050673デフォルトの名無しさん
2010/05/03(月) 02:28:040674デフォルトの名無しさん
2010/05/03(月) 02:31:060675デフォルトの名無しさん
2010/05/03(月) 02:35:280676デフォルトの名無しさん
2010/05/03(月) 02:40:15それはつまるところ言語の設計者のみが文法を変更できるということになります。
文脈に依存することによって言語設計者だけではなく、
言語を使う人も文法を変更することができるようになります。
0677デフォルトの名無しさん
2010/05/03(月) 02:50:40岡村さんができる
0678デフォルトの名無しさん
2010/05/03(月) 02:54:030679デフォルトの名無しさん
2010/05/03(月) 03:05:10javaとOCamlの方言とか作って何がうれしいんだ
0680デフォルトの名無しさん
2010/05/03(月) 03:12:50Word&Excelだっていつのまにかメジャーになったし
0681デフォルトの名無しさん
2010/05/03(月) 09:58:24無くても何とかなるけども、あれば便利ってのは
分かる気がするんだよね。
Wikiを見ると、pythonでは順番を変えて導入とか
書いてるし。
ンで、pythonの順番はただしいと思うのだけれども、
どうも3項演算子やってると読みにくい感じも有って。
0682デフォルトの名無しさん
2010/05/03(月) 10:05:070683デフォルトの名無しさん
2010/05/03(月) 10:21:05したがってBNFではユーザー定義可能な演算子のある言語を正しく表現することは出来ません。
違和感があったのはこのためでしょう。
文脈自由であることが絶対的な物であるという思い込みが
文脈依存なものを排除したくなる要因なのではないでしょうか?
0684デフォルトの名無しさん
2010/05/03(月) 10:23:01C風文法だと関数型言語と違って違和感あるな
慣れの問題か
0685デフォルトの名無しさん
2010/05/03(月) 10:40:02例えば
e = switch(true){
case a == 2 => b
case a == 3 => c
default => d
}
というようにswitch文を式として強化したもので代用できればそちらのほうがよい
0686デフォルトの名無しさん
2010/05/03(月) 11:17:29inline関数や最適化機能で代用できるので
新入社員には使わないように指導している。
switchは定数との一致だけでなく変数との比較が記述できれば
使い勝手が増すが>>685のようなものはif文を使うべき。
0687デフォルトの名無しさん
2010/05/03(月) 11:46:18パターンマッチング自体をどうするか議論しようぜ。
0688デフォルトの名無しさん
2010/05/03(月) 12:21:47範囲内と言うことを強く型付けしたいと思う。
例えば
enum Weekday { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATRUDAY};
とした場合、
Weekday day;
day = SATRUDAY;
day++;
if(day == SANDAY){
// OK SUNDAY
}
となるような感じ。
また、char* dayname[Weekday];
と定義すれば、
char* pday;
pday = dayname[7];
でコンパイルエラーが出るような事に死体。
0689デフォルトの名無しさん
2010/05/03(月) 12:23:52char* pday;
int count=6;
count += 2;
pday = dayname[count];
は通ってしまうくらいの感じで。
0690デフォルトの名無しさん
2010/05/03(月) 12:31:33列挙型ではなく、順序型という別の型を作ったほうが良いな。
0691デフォルトの名無しさん
2010/05/03(月) 12:48:28if (a) {
hoge[i][j] = foo;
} else {
hoge[i][j] = bar;
}
と
hoge[i][j] = (a ? foo : bar);
だと、分かりやすさに関してはどっちもどっち(趣味嗜好の範囲)だが、
if を使うと左辺コピペミスや修正ミスの入る余地があるのが
個人的には問題あると思う
0692デフォルトの名無しさん
2010/05/03(月) 13:02:35if (a) x = foo;
else x = bar;
hoge[i][j] = x;
個人的には?:は結構使う方だけど、
そういうのはこう書けばいいと思うよ
0693デフォルトの名無しさん
2010/05/03(月) 13:09:000694デフォルトの名無しさん
2010/05/03(月) 13:23:07むしろ、今の列挙型の方が、順序型だと思うのだが?
0695デフォルトの名無しさん
2010/05/03(月) 13:24:110696デフォルトの名無しさん
2010/05/03(月) 13:24:44if (a) *lhs = foo;
else *lhs = bar;
でいいんじゃね
0697デフォルトの名無しさん
2010/05/03(月) 13:24:46配列サイズに型名を指定ってのはできないな
0698デフォルトの名無しさん
2010/05/03(月) 13:27:30どちらにしろテンポラリが3つ並ぶのが心臓に悪いというか、
ただの代入ごときでテンポラリが入る事自体がちょっと・・・と思ってしまう
0699デフォルトの名無しさん
2010/05/03(月) 13:28:100700デフォルトの名無しさん
2010/05/03(月) 13:28:25俺も?:派だけど、こういう書き方しとくと、デバッグ時に便利なこともあるよ
0701デフォルトの名無しさん
2010/05/03(月) 13:30:48[] がオーバーロードされてる時とか
0702デフォルトの名無しさん
2010/05/03(月) 13:46:52ん?
> pday = dayname[7];
は、コンパイルエラーにするけど、
> int count=6;
> count += 2;
> pday = dayname[count];
は、エラーにするなと?
だったら、
int count = 8;
pday = dayname[count];
は、どうするの?
>>697
> 配列サイズに型名を指定ってのはできないな
Pascal, Ada は可能だったような気がする。
0703デフォルトの名無しさん
2010/05/03(月) 13:55:17単に、動的評価(添え字が定義の範囲かチェックするコードを生成することになる)
はまではやらないってこと。
静的評価は出来るのでやるぞ、そう言うこと。
0704デフォルトの名無しさん
2010/05/03(月) 14:02:25gccの拡張は制限はあるが
ブロックは値を持つ
配列の宣言は定数じゃなくていい
0705デフォルトの名無しさん
2010/05/03(月) 14:05:54何が言いたいのか分からん。
C言語に代わる言語を設計しようっていうスレだよ?
0706デフォルトの名無しさん
2010/05/03(月) 14:31:19情報提供に「何が言いたいのか分からん。」て、何が言いたいのか分からん。
0707デフォルトの名無しさん
2010/05/03(月) 14:38:58そう言うことか、>>689 だと「エラーにするな」のように読めた。
最適化で >>689 でもコンパイルエラーになるケースはありそうだが、
それはいいんだよね。
個人的には、enum と int が混在しててもエラーにならないと言う
のは受け入れ難いけど。
0708デフォルトの名無しさん
2010/05/03(月) 15:33:41せいぜいコンパイル時整数と実行時整数を分けるぐらいだと思うけど。
0709デフォルトの名無しさん
2010/05/03(月) 15:36:300710デフォルトの名無しさん
2010/05/03(月) 15:40:13意図が分からん
っていうか、全然「強く型付け」してないだろ、それは
void foo(int x) { Weekday wd = x; }
これを静的にも動的にもチェックせずに許すんだろ?
intとenumは非互換として、
どうしてもintとenumを変換したいんなら、実行時チェックを行う
dynamic_castっぽい仕掛けを使えばいいんじゃないの
Weekday wd = dynamic_cast<Weekday>(x);
Weekdayの範囲に入っていなければ、bad_castをスロー
まあCのレベルの言語なら別の仕掛けになるだろうけどな
0711デフォルトの名無しさん
2010/05/03(月) 16:56:58>個人的には、enum と int が混在しててもエラーにならないと言う
>のは受け入れ難いけど。
その通りだ、配列の宣言にenumを使える変わりに、そこはenum
型にすれば良いんだ。確かにおっしゃる通し。
0712デフォルトの名無しさん
2010/05/03(月) 17:23:20それはそれでいいかと
0713デフォルトの名無しさん
2010/05/03(月) 19:30:57実装上、連想配列でenumはおいしくないな
ま、言いたいことはわかるがね
0714デフォルトの名無しさん
2010/05/03(月) 19:43:51がちがちな列挙型というとPascalとか思い出すよw
0715デフォルトの名無しさん
2010/05/03(月) 19:50:03言語を設計しようっていうスレなんだから、
ニュース速報系みたいな、そういう気分を語られても困る。
こういう場合こうなって便利とか書いて欲しい。
>>713
やるとしたら、普通の配列で行くべきだと思ってる。
連想配列とかはライブラリ対応。
0716デフォルトの名無しさん
2010/05/03(月) 19:55:19バイナリのインターフェース書くのに
enumが順序不明ベース型不明とかじゃやりにくいだろ?
0717デフォルトの名無しさん
2010/05/03(月) 20:18:51ついでに変数も、a は a[0] の意味ってことにして、配列と一本化。
0718デフォルトの名無しさん
2010/05/03(月) 20:30:330719デフォルトの名無しさん
2010/05/03(月) 20:41:41> バイナリのインターフェース書くのに
そんなところに enum 使う状況が想像できない。
>>714, >>717
「本物のプログラマ」用の言語ですか?
0720デフォルトの名無しさん
2010/05/03(月) 21:01:040721デフォルトの名無しさん
2010/05/03(月) 21:17:590722デフォルトの名無しさん
2010/05/03(月) 21:46:20> BASICのVariantは型がはっきりしないところが
はぁ? Variant の型がはっきりしないなんて初耳だ。
型をはっきり意識せず使っててバカにされてる奴はいたと思うが。
0723デフォルトの名無しさん
2010/05/03(月) 21:49:25型が変数に結びついている=静的型
型がオブジェクト/インスタンスに結びついている=動的型
ってだけの話
動的型だが型付けの強い言語もあれば、
静的型だが型付けの弱い言語もある
馬鹿にされるべきはどっちかっつーとお前なんじゃね
0724デフォルトの名無しさん
2010/05/03(月) 21:53:560725デフォルトの名無しさん
2010/05/03(月) 21:57:510726デフォルトの名無しさん
2010/05/03(月) 22:00:05分かったら糞して寝ろ
>>> x = 1
>>> y = "this"
>>> type(x)
<type 'int'>
>>> type(y)
<type 'str'>
>>> x + y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
0727デフォルトの名無しさん
2010/05/03(月) 22:04:19いんだよ。enumなんて構文にとりこんだ定数定義みたいなもんで。
それだけで不要なマクロなくせる訳だし
計算しちゃっておかしくならないよう演算を制限するだけでよし
0728デフォルトの名無しさん
2010/05/03(月) 22:10:48COM VARIANTとの違いを説明してくれ。
VBでこれはできるか? みたいなのはよしてよ。
0729デフォルトの名無しさん
2010/05/03(月) 22:21:40は?
>型がはっきりしない
>最近はやり出した動的型付けの言語はまさにそう
とか馬鹿げたことを言ってるようだから、動的型言語の実例を見せただけだよ
0730デフォルトの名無しさん
2010/05/03(月) 22:28:19ちょっとしたスクリプトには良いが、大規模になるときつい。
0731デフォルトの名無しさん
2010/05/03(月) 23:01:35単にテストのカバレッジ率が低いんじゃねえか
といいたいところだが、テストが多くなるのが動的型言語の欠点だわな。
Cの代わりになる言語は静的な型でいいだろ
0732デフォルトの名無しさん
2010/05/03(月) 23:02:07BASICという言語をわざわざだしているのに、型がはっきりしないという言葉をそのように曲解するという思考がよくわからない。
0733デフォルトの名無しさん
2010/05/03(月) 23:07:06いや、VBのOLE VARIANTって要はタグつきunionだろ?
本質的には動的型言語におけるオブジェクトと一緒だよ
変数の型として(静的に)データが何者かを記述しているのではなく、
自分が何者かを「データ自身が」知っている
「知ってる」んだから、「はっきりしない」というのはおかしいね
それで「馬鹿にされる」とかいうのも意味不明
0734デフォルトの名無しさん
2010/05/03(月) 23:12:25ましなデータ型なんだが
中身が何であれ勝手に型変換して通してしまうのが
バカにされる原因だろ
0735デフォルトの名無しさん
2010/05/03(月) 23:13:32MS系言語は頭悪いから次行こう
0736デフォルトの名無しさん
2010/05/03(月) 23:14:120737デフォルトの名無しさん
2010/05/03(月) 23:14:28Option Strict を使わず、なんでもVariantにするやつをバカにしていたもんだけどな。
このコンテキストではっきりしないというのは、実行時まではっきりしないという意味だろ。
それ以外の解釈法は私には発想できないな。
0738デフォルトの名無しさん
2010/05/03(月) 23:14:31C++のキャスト演算子や非explicitなコンストラクタのことですね分かります
0739デフォルトの名無しさん
2010/05/03(月) 23:16:58文字列処理はランしてみないと入力文字列をチェックできないからなのか
0740デフォルトの名無しさん
2010/05/03(月) 23:22:09ランタイムかくのにC++いらねえ
言語処理はCでも十分
0741デフォルトの名無しさん
2010/05/03(月) 23:33:400742デフォルトの名無しさん
2010/05/03(月) 23:36:59新たな言語設計者は好まないだろうな
0743デフォルトの名無しさん
2010/05/03(月) 23:38:39PyPy
0744デフォルトの名無しさん
2010/05/04(火) 00:00:36もっと高級な言語だと結構あるよ。
例えばlispとか
0745デフォルトの名無しさん
2010/05/04(火) 00:11:320746741
2010/05/04(火) 00:11:53探したらちゃんとこんなのがありましたw
http://en.wikipedia.org/wiki/Self-hosting
0747デフォルトの名無しさん
2010/05/04(火) 00:12:11Java、MonoのC#
0748デフォルトの名無しさん
2010/05/04(火) 00:36:55Set range = [A1]
range = 3 ' さあどうなるか
0749デフォルトの名無しさん
2010/05/04(火) 07:26:12”<<” ”>>” のシフト演算子って記号じゃなくて、
プロパティで対応するってのどうだろうか?
例えば、
AreaOfTriangular = base * height >> 1;
AreaOfTriangular = base * height.rightshift(1);
ただこれだと演算子の優先順位の問題が出てくるので、
精度を確保したい場合、こうやって。
AreaOfTriangular = (base * height) >> 1;
AreaOfTriangular = (base * height).rightshift(1);
こういうのも有りって事で。ビット演算子も、同様に
radius.and()
radius.or()
radius.xor()
radius.not()
代入については全体に宗教論争になると思うので後回しにするとして、
&& は AND に、 || は ORにしたい。
0750デフォルトの名無しさん
2010/05/04(火) 08:08:090751デフォルトの名無しさん
2010/05/04(火) 08:18:32むしろfoo >* 4でrorとかbit単位で使える範囲指定子とか
代入、コピー、演算なんかが欲しいね
他にbit型とかでbit var[100][2]とかで2bitx100の配列とかそういうの
変な記号が多いとわかりにくいが、アルファベットばっかも読みにくい
0752デフォルトの名無しさん
2010/05/04(火) 08:24:250753デフォルトの名無しさん
2010/05/04(火) 08:26:56C言語の良さは、演算子がsizeof除いて総て記号で統一されてる事にも有って、
その伝統を大事にしたいと言う気持ちはもの凄く分かるんだけど、それならば
C言語で良い訳だよ。
C言語からC++ときて、0x、拡張されている内に、記号演算子が増えすぎた
のと、優先順位だとかなんだとか、で、読み辛く、実装依存が増えすぎたと思うんだ。
なので、ここらで整理したいってのが>>1なので、そういう視点からの反論が
欲しいんですよ。こんな問題が起きるとか、結局は混乱の元とか。
0754デフォルトの名無しさん
2010/05/04(火) 08:28:28ビット演算はあまり多用しないだろうから、記号じゃなくてもいいと思う
&&や||はあった方がコードが見やすくていい
0755デフォルトの名無しさん
2010/05/04(火) 08:32:35計算式の中のビットシフトという事を表現するのに良い例が
見つからなかったので。
>>751
追加、ビットロテートはIntelぐらい?Intelというかx86ぐらい
しか持ってない?その辺詳しくないんだけど、それでそちらの対応は、
あれじゃない、CPU依存言語拡張、前から言ってるENVIRONMENT
DIVISIONの導入で、
unsigned int aa=1;
aa.intel_rot(4);
とかどうだろ?intelにするかx86にするかとか有ると思うけど、
それは後の議論だ罠。
0756デフォルトの名無しさん
2010/05/04(火) 08:43:42.rightshift();
.leftshift();
.rightlot();
.leftlog();
って面倒だから、サイン付きで+なら左、マイナスなら右って事で
どうだろ?
aa << 4 == aa.leftshift(4)
なので
aa << 4 == aa.shift(4)
aa >> 4 == aa.rightshift(4)
なので
aa >> 4 == aa.shift(-4)
実装出来るのか?
0757デフォルトの名無しさん
2010/05/04(火) 08:46:20組み込み屋だかんな
ビット演算なんて普通に多用するし
しょぼいCPUなら多彩なbit演算やrorができたら速くなる演算もあったりすんのよ
bitmapテーブルなんかもよく使うし。
でもCPUにbit演算機能があってもCからは使えなかったりする
演算の種類なんてむしろもっと増やして積和演算用の演算子とか
並列演算範囲の指定とか欲しいね
ま、そういう要求もあるってことね。
富豪なPCクラスのシステムだけ考えるならいまさらCの代替品なんて山ほどあるし
0758デフォルトの名無しさん
2010/05/04(火) 08:51:26なんで?
0759デフォルトの名無しさん
2010/05/04(火) 08:54:10おかげでアセンブラよりシフト演算が面倒になってる
シフト演算を実装するなら、桁あふれ情報を保持してほしい
(ついでにCPUのフラグレジスタの情報もあると便利かもしれない)
uint8_t x = 0xaa;
x.<<(2); #記号でも単語でもどっちでもいいけど
puts x.flood; #=>2 #2ビットのシフト演算で溢れたビット(2b'10)
uint32_t x = 0xffff.ffff;
x += 1;
puts x; #=>0
puts x.carry; #=>1
とかね
0760デフォルトの名無しさん
2010/05/04(火) 09:01:00それなんとかしたいんだけど、どんな表記構文にすれば良いか
タイミングの問題が有るじゃん。
例えば、
bb = aa.leftshif(4) * 5;
という構文にどうやって突っ込むのが分かりやすいか?
後、機械語に落とせる構文じゃないと不味いし。
0761デフォルトの名無しさん
2010/05/04(火) 09:07:360762デフォルトの名無しさん
2010/05/04(火) 09:10:530763デフォルトの名無しさん
2010/05/04(火) 09:13:25だから、それはCPU拡張で行くんだよって言ってるだろうが。
対象CPUに対してコンパイラ作るんだから、その辺言語仕様で
定義しておけば、新しいCPU作りやすいし、コンパイラも作りやすいじゃん。
CFを持ってるCPU
INTELのCF
をどう交通整理するのかはもう少し後で考えるとして。
言語から、intel_cf 定数を操作出来る訳だよ。
それをどんな構文で扱う事にすれば良いのかて話。
で、例えばintel_cfを使ったプログラムをCFを持たないCPUで
コンパイルするときには、基本的にコンパイルエラーもしくは、
CFを扱えるコードを生成するとかね、そういう風にやっていけば良いと思うんだ。
リファクタリングを視野に入れた言語って事かな?
0764デフォルトの名無しさん
2010/05/04(火) 09:15:58言語をややこしくする意味がわからん。
0765デフォルトの名無しさん
2010/05/04(火) 09:16:100766デフォルトの名無しさん
2010/05/04(火) 09:18:21演算のたびに更新されるでいいと思うけど・・・
確かに、CPUのフラグ変数はグローバルだから、演算のたびに
設定・参照すると重くなっちゃうね。
普通は通常通りで、べつに、溢れ情報を考慮する演算を追加するのがいいかな
aa.leftshift_with_carry(4) とか
0767デフォルトの名無しさん
2010/05/04(火) 09:19:06アセンブラ記述してしまうと最適化の恩恵を受けられないから。
CFを見る必要のないビットシフトの場合、CPUによって、
シフト命令の方が早かったり、かけ算しちゃった方が早かったり
するでしょ。そこなんだよ。
0768デフォルトの名無しさん
2010/05/04(火) 09:19:130769デフォルトの名無しさん
2010/05/04(火) 09:22:14まずそのIntel-Win-COBOL脳を改善する必要がありそうだなw
CPU固有の方言言語なんて誰も考えてないだろw
フラグは一見面白そうだがかなり難しいぜw
昔PL/Mで判定に使えたような記憶があるが、
どの演算で変化するかとかCPUによって違うし
最適化すると演算順序変わったり、演算がなくなったり、
関数呼んだら壊れるし、複雑な式のフラグはどうなるのか予想不可能だ
0770デフォルトの名無しさん
2010/05/04(火) 09:22:26参考までに知りたいんだけど、それなんていうCPU?
0771デフォルトの名無しさん
2010/05/04(火) 09:22:47フラグぐりぐり使っているところに最適化も期待するのか。
0772デフォルトの名無しさん
2010/05/04(火) 09:24:30インラインアセンブラは普通に最適化対象だぞ
だいたいそんな命令の置き換えなんてまさに最適化の仕事だろ
0773デフォルトの名無しさん
2010/05/04(火) 09:26:550774デフォルトの名無しさん
2010/05/04(火) 09:30:46知らなかった。SHは無いんだ
0775デフォルトの名無しさん
2010/05/04(火) 09:31:500776デフォルトの名無しさん
2010/05/04(火) 09:31:59どういう最適化の対象かって問題ですがな。
0777デフォルトの名無しさん
2010/05/04(火) 09:34:530778デフォルトの名無しさん
2010/05/04(火) 09:35:10答えたことにまで、異論挟んでくるその知性が
どうにも、答えに対して再反論してくるのなら
ともかく。
0779デフォルトの名無しさん
2010/05/04(火) 09:37:12uint33_t x;
0780デフォルトの名無しさん
2010/05/04(火) 09:37:17じゃなくて、問題はキャリーフラグはCPUグローバルなので
計算の度に更新されちゃうから、どう記述すると違和感なく
扱える構文になるか、って問題で、場合によってはフラグを
退避しても良いと思うんだけどね。そこだよ。
0781デフォルトの名無しさん
2010/05/04(火) 09:40:31CPU最大公約数+対象CPU拡張で、CPU最小公倍数的な言語が出来れば
C言語の代わりの新言語と言えるんじゃないのかなって思うんだ。
C言語拡張したいわけでも、もう一つ別のC言語や式言語作りたい訳じゃなく、
そう言うのは、もう既にみんなやってる。
0782デフォルトの名無しさん
2010/05/04(火) 10:13:13if.carry
if.nocarry
if.zero
if.nozero
とか
0783デフォルトの名無しさん
2010/05/04(火) 10:22:56> CPU最大公約数+対象CPU拡張で、CPU最小公倍数的な言語
自分ではうまいたとえだと思ってるんだろうけど、何を言いたいのか
さっぱりわからん。
0784デフォルトの名無しさん
2010/05/04(火) 10:26:20もうセミコロン廃止して
st1; st2; st3;をst1.chain(st2).chain(st3)にしようぜ。
0785デフォルトの名無しさん
2010/05/04(火) 10:29:08+. -. >>. <<.
crc演算が美しく書ける
0786デフォルトの名無しさん
2010/05/04(火) 10:30:550787デフォルトの名無しさん
2010/05/04(火) 10:37:54それこそ公約数的で残念じゃねーか
0788デフォルトの名無しさん
2010/05/04(火) 10:48:15その発想は無かったわ。そっちの方が良いかも。
今考えてたのは、cpu_flg型を作って。
cpu_flg qa,qb;
aaa.leftshift(4,q=intel_cf);
if(q){
キャリーが有った
}
とすればどうだろうかだったんだけど。
ンで、例えば、
DD= aaa.leftshift(4,qa=intel_cf)+bbb.leftshift(4,qb=intel_cf);
if(qa){
}else if(qb){
}
とか書けちゃえて、
この場合は、CFを退避するコードを生成する事にしたらどうだろ?
0789デフォルトの名無しさん
2010/05/04(火) 10:49:080790デフォルトの名無しさん
2010/05/04(火) 10:50:45CFを退避するコードは生成しないで、2番目の場合は退避しなきゃね
ってコードを生成する。
0791デフォルトの名無しさん
2010/05/04(火) 10:52:20>>790で書いたけど、それは覚悟の上で、でも、次のif文とかが
安全ならば、フラグ持ち越さない、フラグを退避しないように
最適化出来たら良いねって事で。
0792デフォルトの名無しさん
2010/05/04(火) 10:58:54フラグがつぶれそうなときは出口でCPU依存でフラグのset/resetする方がいいような
0793デフォルトの名無しさん
2010/05/04(火) 11:24:24俺の手元には、x86と、PPC601の命令リファレンスが有るんだけど、
32bit以上のCPUでこれは見ておけっての有る?
この際だから、シェアは有るんだけど命令セットが貧弱
そんなCPUな方が良いと思う。
それからインターネットで手に入ると嬉しい。
32bit以下はめんどくさいから考えたくない。
0794デフォルトの名無しさん
2010/05/04(火) 13:19:30CPUの一般的な機能について知っているなら改めてデータシートを見る必要はないよ。
(もちろん、個人でCPUの勉強するのはいいことだからどんどんやっていただいて構わないよ。)
それと、低級言語としては組み込み向けが多いから16ビットCPU以下も対象にしないとね。
(これも、一般的な機能を知っているなら改めてデータシートを見る必要はないよ。)
0795デフォルトの名無しさん
2010/05/04(火) 13:52:08命令セットが美しいのは68030とMIPS32
美しくないのはSPARCとARM
潔いのはSHとIA64
0796デフォルトの名無しさん
2010/05/04(火) 13:53:29君はそれで実装と提案やっていけばいいと思う。
後、組み込み分野でも16bitは終焉してきてるので、
16bitはC言語やアセンブラに任せておけば良いと思う。
そもそも、64K程度なんだからアセンブラで充分だし。
0797デフォルトの名無しさん
2010/05/04(火) 13:55:52じゃあ、それでおk。
実装は言語仕様が固まった後だけどね。
0798デフォルトの名無しさん
2010/05/04(火) 14:14:42> そもそも、64K程度なんだからアセンブラで充分だし。
いまどきそれはないわ。
0799デフォルトの名無しさん
2010/05/04(火) 15:21:590800デフォルトの名無しさん
2010/05/04(火) 18:07:11アセンブラなんて冗談かよ
0801デフォルトの名無しさん
2010/05/04(火) 19:01:320802デフォルトの名無しさん
2010/05/04(火) 19:03:040803デフォルトの名無しさん
2010/05/04(火) 19:14:12少ないタイプ量のために一意性を犠牲にする
私は英語を使うので英語だけ扱えればいい
いずれもC言語が生んだ悪しき慣習
早々に切り捨てねばなるまい
0804デフォルトの名無しさん
2010/05/04(火) 19:25:25新言語の新OSでも裏方ではCが使われ続ける
0805デフォルトの名無しさん
2010/05/04(火) 20:18:58全く新しい物を作りたいなら、Cだけでなくアセンブラも禁止するべき。
0806デフォルトの名無しさん
2010/05/04(火) 20:25:270807デフォルトの名無しさん
2010/05/04(火) 20:41:47よってアセンブリ言語禁止など妄言の極みである
何度も言うが抽象化不可能と分かってる部分まで抽象化しようとするな
0808デフォルトの名無しさん
2010/05/04(火) 22:24:030809デフォルトの名無しさん
2010/05/04(火) 22:29:57じゃなきゃ腐る
0810デフォルトの名無しさん
2010/05/04(火) 23:19:23馬鹿だな。全てのプログラム言語が基本的に等価だということを知らんのかね。
>807の通り基本的な部分と特殊な部分を分離するのが普通だろ。
特殊な部分はミニ言語orマクロで実装すれば良い。
だからベースはForth(ry
0811デフォルトの名無しさん
2010/05/04(火) 23:34:59全ての道はlispへとつながっとる
0812デフォルトの名無しさん
2010/05/04(火) 23:39:07コンパイル後にCのソースを吐けばややこしいこと考えないで作れるぜ?
0813デフォルトの名無しさん
2010/05/05(水) 00:04:460814デフォルトの名無しさん
2010/05/05(水) 00:17:50Cなら中間の言語に申し分ないからな
0815デフォルトの名無しさん
2010/05/05(水) 01:42:56そうすればアセンブリ言語は直接触る必要も無い
0816デフォルトの名無しさん
2010/05/05(水) 01:52:41アセンブリでやる必要があるのはOSだけじゃないがね。
ちょいスレチな風味だが
直I/Oとか割り込みハンドラなどの低レベルライブラリが
CPU毎に異なってるのが組み込み屋の悩みだな
メーカ提供のライブラリの出来も千差万別だし
言語の話と離れるが、共通化してくれたらいいのにね
0817デフォルトの名無しさん
2010/05/05(水) 02:11:09しょーがね
それが共通化出来たらデバイスドライバを書くプログラマの仕事が
無くなる事だけは確かだが
0818デフォルトの名無しさん
2010/05/05(水) 02:11:510819デフォルトの名無しさん
2010/05/05(水) 03:18:36mathライブラリなんかもアッセンブラで書かれてるよね。
goのmathライブラリにもある。
./src/pkg/big/arith_386.s
./src/pkg/big/arith_amd64.s
./src/pkg/big/arith_arm.s
./src/pkg/bignum/arith_amd64.s
...
0820デフォルトの名無しさん
2010/05/05(水) 06:15:42高速なメモリコピーとかも。
>>817
デバイスは多用だからそんなことはないと思うが
キャッシュセーフなI/Oとか諸々の奴がね。
同じ名前なら実装はなんでもいいって感じ
OS向けにはまた別途コードはいるだろうけど
0821デフォルトの名無しさん
2010/05/05(水) 09:01:20普通の人がアセンブラで書いてもコンパイラの最適化に勝てないけど。
0822デフォルトの名無しさん
2010/05/05(水) 09:12:43コンパイラの最適化が追いつかないって話よりも、
CPU固有の力を効率よく出すのにアセンブラが必要なのですよ。
少し前とは時代が変わってる。
0823デフォルトの名無しさん
2010/05/05(水) 09:22:54それはコンパイラの仕事だろ。
0824デフォルトの名無しさん
2010/05/05(水) 09:24:570825デフォルトの名無しさん
2010/05/05(水) 09:28:550826デフォルトの名無しさん
2010/05/05(水) 09:31:50論理演算をさせた時ぐらいになってきてるよ
それ以外の時は手でアセンブラを書く時間でコンパイルして走らせて
しまった方がずっと速い
0827デフォルトの名無しさん
2010/05/05(水) 09:32:05??>VM>コンパイラ>手アセ
0828デフォルトの名無しさん
2010/05/05(水) 09:54:420829デフォルトの名無しさん
2010/05/05(水) 10:05:01数学わからん奴には無理だが
0830デフォルトの名無しさん
2010/05/05(水) 10:06:110831デフォルトの名無しさん
2010/05/05(水) 10:24:550832デフォルトの名無しさん
2010/05/05(水) 11:05:110833デフォルトの名無しさん
2010/05/05(水) 11:11:39int year=365,week=7,yearofweek,int mod;
”/(剰余=%)”と言う演算子を作ってみる。
yearofweek = year /(mod=%) week; //...(1)
”/(剰余)”と言う演算子を作ってみる。
yearofweek = year /(mod) week; //...(2)
”/(剰余)/”と言う演算子を作ってみる。
yearofweek = year /(mod)/ week; //...(3)
”/剰余/”と言う演算子を作ってみる。
yearofweek = year /mod/ week; //...(4)
これは駄目だな、余剰を取らないのと区別付かない。
”/%=剰余”と言う演算子を作ってみる。
yearofweek = year /%=mod week; //...(5)
右向き代入と左向き代入が混在
”/剰余=%”と言う演算子を作ってみる。
yearofweek = year /mod=% week; //...(6)
=%と区別がつかん。
”/剰余%”と言う演算子を作ってみる。
yearofweek = year /mod% week; //...(7)
すっきりして良いかも。
なので、(1)か(7)でどうだろうか?
0834デフォルトの名無しさん
2010/05/05(水) 11:14:560835デフォルトの名無しさん
2010/05/05(水) 11:15:500836デフォルトの名無しさん
2010/05/05(水) 11:18:44気持ちは分かるんだけど、インテルのCPUだと、DIV命令で、
商と余りがいっぺんに出るんだよね。まぁ当然と言えば当然なんだけど。
なので、旧来のC言語の記法だと、商と余りを得るために、ただでさえ
重たい割り算を二回発行しなきゃならないんだよ。
それをどうやって構文の中に織り込んでいくのが良いかって事で、
読みにくいという批判は重々承知の上で、それでもまだ我慢できる
そういう記法を考えて欲しいんだよ。
0837デフォルトの名無しさん
2010/05/05(水) 11:21:470838デフォルトの名無しさん
2010/05/05(水) 11:33:470839デフォルトの名無しさん
2010/05/05(水) 11:36:430840デフォルトの名無しさん
2010/05/05(水) 11:37:500841デフォルトの名無しさん
2010/05/05(水) 11:38:42だいたい0.02年くらいか?
0842デフォルトの名無しさん
2010/05/05(水) 11:45:360843デフォルトの名無しさん
2010/05/05(水) 11:58:36int week = 7;
int weeks_in_a_year;
int mod;
// :% … 左側に商、右側に剰余を出す演算子っぽい何か
weeks_in_a_year :% mod = year / week;
//#せめてこのぐらいは…
0844デフォルトの名無しさん
2010/05/05(水) 12:00:340845デフォルトの名無しさん
2010/05/05(水) 12:01:47それも考えたんだけど、
weeks_in_a_year :% mod = year / week;
weeks_in_a_year :% mod = year / week * 7/5;
の場合どうしようもなくなるので、UPしなかった。
0846デフォルトの名無しさん
2010/05/05(水) 12:01:52内部実装と最適化次第でx86のdiv命令直接操作と同等のコードが得られるのに。
0847デフォルトの名無しさん
2010/05/05(水) 12:03:04だから、関数でOKというのなら、C言語使ってれば良いんだよ。
0848デフォルトの名無しさん
2010/05/05(水) 12:04:49std::pair<int,int> divmod(int lhs,int rhs)
{
return std::make_pair(lhs/rhs,lhs%rhs);
}
//
boost::tie(weeks_in_a_year,mod)=divmod(year,week);
0849デフォルトの名無しさん
2010/05/05(水) 12:40:34int q, r, a, b;
(q,r)=div(a,b);
unsigned int x, y, z;
bool c;
(z,c)=add(x,y);
こんな使い方ができる
あとはビット連結(::)とか、その左辺値代入とか。
c::z = x+y;
0850デフォルトの名無しさん
2010/05/05(水) 12:47:390851デフォルトの名無しさん
2010/05/05(水) 12:51:58>>848
0852デフォルトの名無しさん
2010/05/05(水) 12:56:4332ビット2個を並べて64ビットとして扱うような。
0853デフォルトの名無しさん
2010/05/05(水) 12:58:410854デフォルトの名無しさん
2010/05/05(水) 13:00:040855デフォルトの名無しさん
2010/05/05(水) 13:00:33とくに腰の軽いスクリプト系で
0856デフォルトの名無しさん
2010/05/05(水) 13:04:280857デフォルトの名無しさん
2010/05/05(水) 13:07:29MMXから考えると沢山有って、ややこしい。
それぞれに、アセンブラ使ってくれ、という時代が長かったから
しょうがないんだろうけど、後今度インテルが全面的に更新した
命令セット出すとか言ってるし。
0858デフォルトの名無しさん
2010/05/05(水) 14:16:44商と剰余が同時に求まるのは別にインテル CPU に限ったこと
じゃなくて、割と一般的な動作だよ。
問題は一つの式から二つの結果が返るのをどう扱うかの問題で
片方の値を特殊変数に返す (1) とか、複数値を返す構文 (2)
を作るとかがよくある手だよな。
(1) yearofweek = year / week; mod = _mod_; // _mod_ が特殊変数
(2) (yearofweek, mod) = year / week;
ただどっちの方法も、除算を複数含む式の扱いがスマートにで
きない。なんか、いい方法あるかなぁ。
0860デフォルトの名無しさん
2010/05/05(水) 14:30:090861デフォルトの名無しさん
2010/05/05(水) 14:44:55> 除算を複数含む式の扱いがスマートにできない。
0862デフォルトの名無しさん
2010/05/05(水) 14:54:180863デフォルトの名無しさん
2010/05/05(水) 14:54:25低レベル的にも効率よいな
関数でやるのは組み込みかinline関数必須で参照渡しなのが汚いんだよね
0864デフォルトの名無しさん
2010/05/05(水) 14:57:320865デフォルトの名無しさん
2010/05/05(水) 14:58:190866デフォルトの名無しさん
2010/05/05(水) 15:05:03レイヤが全く違わないか?
0867デフォルトの名無しさん
2010/05/05(水) 15:09:55商 = a / b
商, 余 = a / b
でいけるわな
左辺にカッコつけるとリストやタプルみたいなんが構文的に必要になるからダメ
0868デフォルトの名無しさん
2010/05/05(水) 15:11:53タプル構文を導入すればいいんだね
0869デフォルトの名無しさん
2010/05/05(水) 18:34:38ノウハウがないのが問題のようなので、多値を返せる関数フレームのあり方
はどうあるといいのか考えてみては?
0870デフォルトの名無しさん
2010/05/05(水) 18:50:27twitterでの議論があったよ
0871デフォルトの名無しさん
2010/05/05(水) 19:02:100872デフォルトの名無しさん
2010/05/05(水) 19:14:16>>870 の議論の通り実装については
> 機械語レベルでは構造体の返却と同じ扱いで実装可能
で全然問題ない。
メモリーを使うかレジスタで返すかは CPU によっても違うし。
問題は、わかり易い構文をどうするかで、>>870 のリンク先でも結論
出てない。
0873デフォルトの名無しさん
2010/05/05(水) 19:30:10CPUじゃなくてコンパイラじゃ?
当然、コンパイラがどちらを選択するのかっては、
CPUで決めるんだろうけど。
0874デフォルトの名無しさん
2010/05/05(水) 19:31:56Cの,演算子を見直して構文要素とするか複数コンテキストを作る演算子とする
すると多値戻り値も関数引数も多値の演算もすべて複数値コンテキストとして同列に扱える
c,d = foo(a,b=1,5*2,3)なんてのも許しちゃう
複数値を返す関数の戻り値をそのまま次の関数に渡せるし。
0875デフォルトの名無しさん
2010/05/05(水) 19:35:51レジスタ数と戻り値の型や数で決まるんじゃない
基本型2-3個くらいならほとんどのcpuでレジスタだろうし
続きの使い方次第ではスタック積んだり、入れるレジスタを最適化したりできそう
0876デフォルトの名無しさん
2010/05/05(水) 19:38:03のまとめはまとめじゃなくて、議論の出発点だな。
>>874
プログラミングモデルで考えると、おいらはむしろ、
戻り値を返さない事にしたい位だけどなぁ。
boolしか返せないようにしたいんだけど、現実的かどうかで
少し悩む。
LWLに馴染んだ人かな?
0877デフォルトの名無しさん
2010/05/05(水) 19:38:17既存の,はどうすんの?
0878デフォルトの名無しさん
2010/05/05(水) 19:39:06Cで書かれたpythonで出来てるんだから当然出来るんだろうが
今なにを問題にしてるんだっけ
0879デフォルトの名無しさん
2010/05/05(水) 19:44:01構造体戻しにするんだったらデータを引き出すのは呼び出し元の責任だよ。
呼び出し元の負担を低減するんだったらデフォルト値を用意するという手があるけど、
デフォルト値を戻して欲しいのか多値を戻して欲しいのかはやっぱり呼び出し元の責任だわな。
それよりも多値をバラして使いたいときの方が面倒だな。Cの場合だと一度変数に代入して名前を付けなきゃいかん。
Delphiのwithみたいなのが欲しいけど、構文の話なんで後でも良いや。
0880デフォルトの名無しさん
2010/05/05(水) 19:45:25そこまでやるならForth(ry
0881デフォルトの名無しさん
2010/05/05(水) 20:04:36> CPUじゃなくてコンパイラじゃ?
確かにそうだな。
CPU によって、レジスタで返しやすいやつとそうでないやつがあるって
言う意味で書いてた。
0882デフォルトの名無しさん
2010/05/05(水) 20:11:19多値戻り値を議論してるときにそれは無いわ(w
0883デフォルトの名無しさん
2010/05/05(水) 20:23:400884デフォルトの名無しさん
2010/05/05(水) 20:28:27> 複数値を返す関数の戻り値をそのまま次の関数に渡せるし。
int, float foo(int);
void bar(int, float);
bar(foo(1)); ってやると、
int i;
float f;
i, f = foo(1);
bar(i, f); ってなるってこと?
foo() の、int だけ使いたいときはどうする?
つまり、i, f = foo(1); bar(i, 1.0); ってやりたい時。
>>877
「新たなプログラミング言語」なんだから、既存のやつは
気にしなくていいんじゃね。
0885デフォルトの名無しさん
2010/05/05(水) 20:38:17じゃあ、今まで通りi, j = 0;なんて書くとどうなるんだろう。
こんなことで悩むぐらいなら(i, j ) = foo(1);と書かせればいい。
ついでにvoidに代入できるようにして、(i, void) = foo(1); bar(i, 10);
とさせればいい。ついでに関数の引数リストと
(x,y,z)記法を同一視できればいい。
#どんどん変な方向へ。
0886デフォルトの名無しさん
2010/05/05(水) 20:48:30bar((i=foo(),i),1.0); でいいんじゃないかな?
0887デフォルトの名無しさん
2010/05/05(水) 21:10:41そのアドレスを渡しまくればいいだけ
0888デフォルトの名無しさん
2010/05/05(水) 21:12:26タプルみたいなのはデータ型を導入せにゃならん
Pythonの多値はそんな奴だね
>>884
まさにそんな感じ。多値の一つを選択したいなら
bar( i,f = foo(1); i, 1.0)
てな感じでどう。
>>885
i,j = 0は多値コンテキストにシングル値代入だからエラーだ
多値はgolangをイメージしてるんだが引数にはできないんよね
あっちはvoidじゃなく_が捨て変数だね
ちなみにgolangは代入は並列に評価されるからa,b=b,aでswap
a,b=1,2*2,3は出来なくてa,b=1*2,2*3だ
あ
とタプルつーより引数も戻り値も無名で型推論からstructの実体を作るような
イメージを考えたらいいんよね
0889デフォルトの名無しさん
2010/05/05(水) 21:19:24構文に組み込めば ({a as int ,b as int ,c as bool})func();
呼び出し側が任意で返り値を捨てられる。if ((x)=func)〜 → if (x=a,(bool)c)〜
従来型のモノな返り値型と互換性が保てる。if (func()) 〜 → if (func(),c)〜
0890デフォルトの名無しさん
2010/05/05(水) 21:27:360891デフォルトの名無しさん
2010/05/05(水) 21:28:52> bar((i=foo(),i),1.0);
> bar( i,f = foo(1); i, 1.0)
う〜ん、一時変数は避けられないか...。
だったら、個人的には素直に2文に分けて書くようにした方が
いいように思う。
>>882
何を言いたいんだ?
0892デフォルトの名無しさん
2010/05/05(水) 21:37:13言ってもしょうがないから、多値戻りは彼らに任せてしまえば良いと思う。
0893デフォルトの名無しさん
2010/05/05(水) 22:03:59bar(( , use) = foo(), 1.0);
0894デフォルトの名無しさん
2010/05/05(水) 22:11:56構造体でダメな理由は?
単にバラすのが面倒というのなら、それこそパターンマッチングを応用すれば良いのに。
0895デフォルトの名無しさん
2010/05/05(水) 22:17:55bar(foo()[0], 1.0);とするとか?
関数の引数は多値であると考えると
bar foo() で、fooが多値ならbarの引数として渡せるといいのかも。
0896デフォルトの名無しさん
2010/05/05(水) 22:22:12構造体だといちいち定義しなければならない。
定義しなくても使えるtupleで十分なんだけどな。tupleの状態で取り回せるのでいちいちばらす必要も無いしな。
0897デフォルトの名無しさん
2010/05/05(水) 22:30:06構造体をいちいち定義するのも面倒
パターンマッチって意味わからん
データ型を想定しないで多値のコンテキストってを考えたら?
first classで扱っても面白いけど、皮むかないと普通の関数に渡せないよな
0898デフォルトの名無しさん
2010/05/05(水) 22:32:28それは、LWLの考え方だと思うんだ。
定義することが一々なのか、ライブラリになってしまって
実装詳細を得られ無い事や、変更されたときにどうするっていう
視点が無い。
この視点がないのが問題。
己をよく知ってから、言葉使い選んだ方が良いよ。
0899デフォルトの名無しさん
2010/05/05(水) 22:33:05seconds を sec, min, hour, dayに分解。
#include <stdlib.h>
div_t t;
t.quot = seconds;
int sec, min, hour, day;
t = div(t.quot, 60);
sec = t.rem;
t = div(t.quot, 60);
min = t.rem;
t = div(t.quot, 24);
hour = t.rem;
day = t.quot;
0900デフォルトの名無しさん
2010/05/05(水) 22:37:38今まで出てきた中で一番分かりやすいな。
0901デフォルトの名無しさん
2010/05/05(水) 22:40:42正直、鏡を見てみることをお勧めする。
0902デフォルトの名無しさん
2010/05/05(水) 22:45:21rest, min = rest / 60
day, hour = rest / 24
0903デフォルトの名無しさん
2010/05/05(水) 22:45:23LWLの考え方、と言う部分には反論無しかな(www
0904デフォルトの名無しさん
2010/05/05(水) 22:52:20sec, rest = second / 60
min, rest = rest / 60
hour, day = rest / 24
名なしの型はいいが、名なしのフィールドは間違いの元
0905デフォルトの名無しさん
2010/05/05(水) 22:54:29これくらいのコードは吐いてくれるだろう。
mov eax,[second]
xor edx,edx
mov ebx,60
idiv ebx
mov [sec],edx
xor edx,edx
mov ebx,60
idiv ebx
mov [min],edx
xor edx,edx
mov ebx,24
idiv ebx
mov [hour],edx
mov [day],eax
これのどこが不満なんだ。
mov ebx,60が2回あったら不満なのか。
0906デフォルトの名無しさん
2010/05/05(水) 22:55:480907デフォルトの名無しさん
2010/05/05(水) 22:58:21object a {
def main(argv:Array[String]):Unit = {
var a,b = foo();
var (c:Int,d:Int) = foo();
var e,f:(Int,Int) = foo();
var (g,h) = foo();//型推論
var (i,j):(Int,Int)=foo();// warning
// i,j = foo(); error
// (i,j) = foo(); error
}
def foo():(Int,Int) = {
return (1,2);
}
}
実装はジェネリックスを使ったjavaのclass。Tuple2〜Tuple20がある。
cのレベルで考えれば型情報のポインタ付きの構造体。
構造体を生成しなくてすませられるかどうかはJVM次第。
0908デフォルトの名無しさん
2010/05/05(水) 23:00:15いい加減にしてくれよ、C、C++の置き換え言語を作ろうって
話なのに、OSごとくっついてくるjavaの話されても困るんだって。
0909デフォルトの名無しさん
2010/05/05(水) 23:04:18OS作るときには標準関数無いから。
こっから話さなきゃ駄目?
0910デフォルトの名無しさん
2010/05/05(水) 23:07:30算術演算ライブラリも無いのか。
FPUの無いCPUではdoubleは使えないのか。
それは困った。
0911デフォルトの名無しさん
2010/05/05(水) 23:10:53LISPを作ろうとしているぞ
0912デフォルトの名無しさん
2010/05/05(水) 23:11:27scalaで書けばパターンマッチングでこのようにかけるので
こういうことだと思うよ
object a {
def main(argv:Array[String]):Unit = {
foo() match {
case (a:Int,b:Int)=>println(a+b)
}
}
def foo():(Int,Int) = {
return (1,2);
}
}
0913デフォルトの名無しさん
2010/05/05(水) 23:14:51javaのbytecodeは中間表現に置き換えて
JVMの最適化フェーズでやることをコンパイルタイムにやれば同じでしょ。
0914デフォルトの名無しさん
2010/05/05(水) 23:15:39Algolライクのな
0915デフォルトの名無しさん
2010/05/05(水) 23:16:47もしかして、本気で、それが反論たり得ると考えてる?
0916デフォルトの名無しさん
2010/05/05(水) 23:18:38OSに依存しない関数はあっていい。
0917デフォルトの名無しさん
2010/05/05(水) 23:19:310918デフォルトの名無しさん
2010/05/05(水) 23:29:20関数の戻り値の型を定義する時にどのみち必要だろ。
別定義が面倒ならばそれこそ関数宣言で戻り値の型を定義できるようにすれば良い。
で、>912みたいにして構造体の一部に名前を付けて活用する、と。
0919デフォルトの名無しさん
2010/05/05(水) 23:33:44pythonだったらこう出来るね
def div(dividend, divisor):
quot = dividend / divisor
rem = dividend % divisor
return (quot, rem)
rest,sec = div(second, 60)
rest,min = div(rest,60)
day, hour = div(rest,24)
これはかなり読みやすい。 標準でmathにあっても良さそうだね。
0920デフォルトの名無しさん
2010/05/05(水) 23:35:26GCCはだめだった。 IMULとSARの組み合わせを吐いた。
0921デフォルトの名無しさん
2010/05/06(木) 00:57:07ジジィどももな
仲良くしようぜ
同じ日本人じゃないか
なに?キモイって?
0922デフォルトの名無しさん
2010/05/06(木) 01:25:14それは定数での除算を逆数での乗算に最適化しているな。
idivとか滅茶苦茶遅いから正しい最適化だ。
60と24を引数で渡してやるとちゃんとidivを発行してくれる。
VC++だと/と%を連続して記述してもidivは1回しか発行しないように
最適化してくれる。GCCでも似たようなものだろう。
0923デフォルトの名無しさん
2010/05/06(木) 01:42:38(unsigned long long)a * b と書いてもmulに最適化されないgcc
VC++はどうなんだ
0924デフォルトの名無しさん
2010/05/06(木) 02:01:21VC++はmul一発だな。
0925デフォルトの名無しさん
2010/05/06(木) 16:45:530926デフォルトの名無しさん
2010/05/06(木) 22:03:400927デフォルトの名無しさん
2010/05/06(木) 22:11:310928デフォルトの名無しさん
2010/05/06(木) 22:30:090929デフォルトの名無しさん
2010/05/06(木) 22:45:26改良した。
div_t sec, min, day_hour;
sec = div(seconds, 60);
min = div(sec.quot, 60);
day_hour = div(min.quot, 24);
printf ("%d days %02.2d:%02.2d:%02.2d¥n",
day_hour.quot, day_hour.rem, min.rem, sec.rem);
0930デフォルトの名無しさん
2010/05/06(木) 22:45:44変数×関数はリバ可と決まった
0931デフォルトの名無しさん
2010/05/06(木) 22:53:32せめて div_t の定義でもあれば分かりやすいんだけど。
0932デフォルトの名無しさん
2010/05/06(木) 22:56:26つ stdlib.h
typedef struct {
int quot; /* quotient */
int rem; /* remainder */
} div_t;
0933デフォルトの名無しさん
2010/05/06(木) 22:57:12簡単といってもBASIC的な簡単さではなく、
シンプルといった意味の簡単さだ。
そうしていろいろ作ってみたが、要するにそれはLispだった。
0934デフォルトの名無しさん
2010/05/06(木) 22:58:160935デフォルトの名無しさん
2010/05/06(木) 22:58:22thx
0936デフォルトの名無しさん
2010/05/06(木) 23:52:050937デフォルトの名無しさん
2010/05/07(金) 00:17:061 2 +ならしってる
ポーランド基本ね
0938デフォルトの名無しさん
2010/05/07(金) 00:37:44・最適化技術次第で割り算の商と余りは1つの命令に最適化可能。
・名前なしの構造体あるいは、ジェネリックスで作成されたものと出来そう。
・演算子を定義できるように作れば割り算の商と余を出す演算子はライブラリとして作成可能。
・ただしヘッダファイル等にその情報を記述しておかないとリンクできない。
ジェネリックスをどうするかが課題と。
0939デフォルトの名無しさん
2010/05/07(金) 00:42:31C言語はLispより表現力があるだろう。
C言語の表現力の本質は何だ?
0940デフォルトの名無しさん
2010/05/07(金) 00:55:23新しいC言語にジェネリクスとか、演算子の再定義とかいらねーよ
C++でもやってろよ
0941デフォルトの名無しさん
2010/05/07(金) 01:08:26では何が欲しいんでしょうか?
0942デフォルトの名無しさん
2010/05/07(金) 01:14:32無名構造体と型推論は欲しいね
0943デフォルトの名無しさん
2010/05/07(金) 01:15:48定義の混乱したのはスパゲッティじゃなくてなんて言えばいんだろ
0944デフォルトの名無しさん
2010/05/07(金) 03:36:490945デフォルトの名無しさん
2010/05/07(金) 04:25:440946デフォルトの名無しさん
2010/05/07(金) 07:48:040947デフォルトの名無しさん
2010/05/07(金) 08:57:06>・最適化技術次第で割り算の商と余りは1つの命令に最適化可能。
「最適化」という表現は適切ではないと思うが、商と剰余を同時に扱うなら多値型を使うのだろう。
>・ただしヘッダファイル等にその情報を記述しておかないとリンクできない。
ヘッダファイルはいらないだろ。
0948デフォルトの名無しさん
2010/05/07(金) 09:45:18C/C++のヘッダファイルを不要にする。
共通ライブラリは外部参照として別途設定し
宣言は自動的にスコープ内に反映させる。
リアルタイムで構文エラーをチェックする。
これだけで敷居が大分下がる。
0949デフォルトの名無しさん
2010/05/07(金) 10:44:02Cと違ってファイル単品で文法レベルならパースできる。
これがJavaのIDEを強力にさせてる。
Cだとインクルードはあるわ、
マクロがトークンをいじったり、トークンを結合したりできる。
0950デフォルトの名無しさん
2010/05/07(金) 11:08:45現在の標準的な開発機で現実的な時間でコンパイルが終わるのであれば
必要以上にコンパイル速度に配慮する必要ない。
コンパイル速度のためにプログラマーに必要以上の手間をかけさせない方がいい。
0951デフォルトの名無しさん
2010/05/07(金) 11:32:360952デフォルトの名無しさん
2010/05/07(金) 11:33:50>「既存のXX言語を使えばいい。」という類の発言は無意味である。
0953デフォルトの名無しさん
2010/05/07(金) 11:47:56じゃあ今までの議論には意味があったとか思ってるの?
0954デフォルトの名無しさん
2010/05/07(金) 11:52:09【超高速】C/C++に代わる低級言語を開発したい 5
http://pc12.2ch.net/test/read.cgi/tech/1273199795/
0955デフォルトの名無しさん
2010/05/07(金) 12:00:35インクルードは悪しき伝統だよな。
コンパイラ屋がサボりたいだけだしな。
確かに実装を隠蔽できるというメリットは確かにあるが
もう少し便利になってもいいと思う。
0956デフォルトの名無しさん
2010/05/07(金) 13:09:310957デフォルトの名無しさん
2010/05/07(金) 13:11:340958デフォルトの名無しさん
2010/05/07(金) 13:13:57ヘッダはIDEが頑張って作る
0959デフォルトの名無しさん
2010/05/07(金) 13:18:17実装を隠すためにとかで、どうしても必要ならばコンパイラが吐けるようにしてもいい。
0960デフォルトの名無しさん
2010/05/07(金) 13:22:050961デフォルトの名無しさん
2010/05/07(金) 13:22:33・多値は名前なしの構造体にする。
の2つですか?
0962デフォルトの名無しさん
2010/05/07(金) 13:28:24return {1, 0};
割り算の場合は、商だけ取りたいこともあるだろうから
{商, 剰余}のリスト型を、商の型に暗黙キャスト出来てもいいかもしれない。
0963デフォルトの名無しさん
2010/05/07(金) 13:29:15>>958と>>959、これ以上の結論は仕様をまとめる人というか
コンパイラ作る段階になってコンパイラ組む人が自分の好みで
決めれば良いと思う。
ここで結論出すような話題じゃないし。
今はどんなアイデアがあり得るか、っていう段階。
争点として別視点が有るのなら提供して欲しい、
0964デフォルトの名無しさん
2010/05/07(金) 13:29:54少ない脳みその補完道具と言語とは全然関係ない
0965デフォルトの名無しさん
2010/05/07(金) 13:37:27でも内部を隠してexport, import出来る仕組みはないと困るわな
コンパイルしたらobjとともにヘッダ的な情報を用意する必要はあるとおもう
0966デフォルトの名無しさん
2010/05/07(金) 13:39:15IDEに優しくないというのは、Cの欠点のひとつ。IDEの便利機能を拒否するアホは相手にしなくていい。
0967デフォルトの名無しさん
2010/05/07(金) 13:40:25それってリストを戻してるのじゃなくて返す型の一時オブジェクトを初期化した
ものを返しているのだから、受け取る方で複数の変数に代入出来る訳じゃ
ないから>>904みたいな事ができる訳じゃないね。
0968デフォルトの名無しさん
2010/05/07(金) 13:43:200969デフォルトの名無しさん
2010/05/07(金) 13:43:53/演算子が{商,剰余}リストを返すようにして、イコールの前に複数の変数が並んでいればその順に商と剰余を代入するようにすればいいんじゃないの。
0970デフォルトの名無しさん
2010/05/07(金) 13:44:38そんなのリンカーの仕様だろ。言語には関係ない。
0971デフォルトの名無しさん
2010/05/07(金) 13:50:240972デフォルトの名無しさん
2010/05/07(金) 13:53:18ライブラリ関数の型を知らなきゃ駄目なので、色々大変なんだよ。
>>971
>商と剰余の両方が必要な状況はそれほど多くない。関数が構造体を返せばできること。わざわざそのために構文を用意するほどのものでは
CPUを見るとね、って事。(X=CF)と同じ気持ちって奴?
A %= B;
C /= B;
より重くなる多値は、この手の議論からは既に外れてる。
0973デフォルトの名無しさん
2010/05/07(金) 13:55:18Cはプロトタイプがあるので参照する.objが存在しなくてもコンパイルができる。それを禁止たところで循環参照を解決する何らかの仕組みが必要になる。
0974デフォルトの名無しさん
2010/05/07(金) 13:56:33つまり、関数呼び出しの時も、すべて名前付きパラメータにするべきだってことだな。
memcpy(dest:d, src:s, n:sizeof(d));
みたいな。
0975デフォルトの名無しさん
2010/05/07(金) 13:57:49> ライブラリ関数の型を知らなきゃ駄目なので、色々大変なんだよ。
いろいろとは?プログラマーが大変なの?
0976デフォルトの名無しさん
2010/05/07(金) 14:29:17そもそもコンパイル時に型が決定できないのでコンパイルできない。
テンプレートのようにリンク時に評価することは原理的には可能であろうが、そんな解決は美しくないし、分かりにくい。
0977デフォルトの名無しさん
2010/05/07(金) 14:29:29import hogeみたいに使う奴
コンパイルしたらheader的ファイル
PreCompiledHeaderみたいなのを自動で作る感じでいいだろ
今のように手動で作る必要はないわな
0978デフォルトの名無しさん
2010/05/07(金) 14:35:38>そもそもコンパイル時に型が決定できないのでコンパイルできない。
そんなのコンパイラが頑張ればいいだろ。
0979デフォルトの名無しさん
2010/05/07(金) 14:36:28そうだね。必要なときに自動生成できればそれでいいと思うよ。
0980デフォルトの名無しさん
2010/05/07(金) 14:40:08型を知らない関数を、プログラマはどうやって呼び出すのか?
気合いで行くってのも良いのかも知れない。
0981デフォルトの名無しさん
2010/05/07(金) 14:47:10マニュアル嫁
0982デフォルトの名無しさん
2010/05/07(金) 14:49:41.objをアーカイブした.libって型情報とか入っていないの?
0983デフォルトの名無しさん
2010/05/07(金) 15:00:17>>977でいいんじゃねえの
吐く情報はxmlでも新言語のやつでも全く独自でもいいけどさ
>>981
問題は人間じゃなくてコンパイラがどうやって知るかだろう
0984デフォルトの名無しさん
2010/05/07(金) 15:04:11だから、人間を問題にしてるのは>>980なんだが。
>>978はコンパイラに頑張れと言ってるし、>>981は人間にはマニュアル嫁と言っている。
0985デフォルトの名無しさん
2010/05/07(金) 15:10:380986デフォルトの名無しさん
2010/05/07(金) 15:22:14あれは独自の.aを読んでるみたいね
0987デフォルトの名無しさん
2010/05/07(金) 15:30:57それは、Javaにヘッダがないのと同じ理由。jarの間の依存関係は、非循環である必要があるが、Cでは循環参照した.oを作ることができる。
0988デフォルトの名無しさん
2010/05/07(金) 15:32:220989デフォルトの名無しさん
2010/05/07(金) 15:53:55循環参照は汚えし
0990デフォルトの名無しさん
2010/05/07(金) 19:31:13前スレ埋めろよ
0991デフォルトの名無しさん
2010/05/07(金) 20:55:43んで、マクロの重要な機能の1つに定数の置換があるわけだが、これはどうするの?
まさかエディタで置換とか言わないよな?外部参照の手段は?
0992デフォルトの名無しさん
2010/05/07(金) 21:11:080993デフォルトの名無しさん
2010/05/07(金) 21:12:03言語サポートのマクロに変えればいい
0994デフォルトの名無しさん
2010/05/07(金) 21:36:290995デフォルトの名無しさん
2010/05/07(金) 21:59:38マクロの置換はインラインだから実行時のオーバーヘッドが無いんだよ。
const修飾だとグローバルスコープに置かなきゃならんので参照のたびにオーバーヘッドが生じる。
この差は非常に大きい。2つを解決できるアイディアはないもんかね?
0996デフォルトの名無しさん
2010/05/07(金) 22:01:030997デフォルトの名無しさん
2010/05/07(金) 22:01:250998デフォルトの名無しさん
2010/05/07(金) 22:26:59プログラマの意図どおりにバイナリを生成する保障はどこにもない。
マクロはプリプロセスなので必ずインライン展開される。その違いを認識せよ。
0999デフォルトの名無しさん
2010/05/07(金) 22:45:291000デフォルトの名無しさん
2010/05/07(金) 22:46:2610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。