世紀の傑作ゴミプログラミング言語

この世のプログラミング言語の悪い部分を全て集めたらどうなるか。
19
しょしー @syocy

ログ出力の有無で顕在化する並行処理のバグとか過剰なログ出力でディスクがあふれてシステム停止とかを見ているので、多くの言語が採用する「ログ出力は副作用のないものとして扱う」という姿勢に疑問を持つ。むしろ積極的に言語機能で保護・制限すべき部分なのでは。デバッグ時のprintは別としても。

2018-03-25 18:38:37
Masaki Hara @qnighy

ログって必要だから出してるんですよね。単に型などで制限するという方針だと、ログを出さないプログラムが書かれるだけなのでは

2018-03-26 17:56:15
きしもと @ksmakoto

入出力が昔は言語の機能で(ライブラリじゃなく)、古臭い教科書(から更新されてない教科書)だと、どんな言語にも必ず入出力の機能がある、とか書いてあったりするが、最近また入出力が絡む機能を言語が持つようになってきているとかいうあたりか

2018-03-26 18:01:15
Masaki Hara @qnighy

多くのプログラミング言語はUNIX風のstdin, stdout, (stderr)を標準で持っているけど、ALGOLやJSのようにそういうのがない状態で登場する言語もたまにある

2018-03-26 18:04:21
Masaki Hara @qnighy

単に難しいというだけだとMalbolgeになってしまうので、「一見普通のプログラミング言語だけど、あらゆるプログラミング言語から落とし穴を拾い集めてきていて、ちゃんと動くプログラムを書くのが非常に難しい」あたりが狙いどころだろうか。

2018-03-26 18:13:13
淡中☆圏 @tannakaken

considered harmfulな要素のみで作られた言語

2018-03-26 15:46:36
Masaki Hara @qnighy

各言語の「ここが失敗だったな」という設計を寄せ集めた言語作ってみたいなあ(処理系がつらそうなので作らない)

2018-03-26 19:43:28
Masaki Hara @qnighy

null、配列が共変、ダイアモンド継承問題、スライシング問題、多彩なリテラルのための複雑な字句解析器、トークンベースのマクロ、実体化のタイミングでの名前解決、挙動を変える特殊化、ダイナミックスコープ、複雑な型構文

2018-03-26 19:47:42
Masaki Hara @qnighy

関数とコンストラクタが区別されていない、シングルスレッド、暗黙のthis、暗黙のthisを増やせる構文、実装ファイルとインターフェースファイルに同じことを二度書く、比較演算子における暗黙の変換

2018-03-26 19:53:45
Masaki Hara @qnighy

代入が=、代入演算子が代入された値を返す、暗黙の下位型変換、デフォルトグローバル変数、演算子オーバーロードの乱用、不必要にステートフルなライブラリ、弱い擬似乱数

2018-03-26 19:59:19
でこれき @dico_leque

引数が足りないときはundefinedが入るとか、配列の領域外に値を設定すると自動的にそこまで配列が拡張されるとか

2018-03-26 19:53:01
hsjoihs @hsjoihs

@qnighy 変数の巻き上げとかブロックスコープの欠如とかどうです?

2018-03-26 20:01:38
Masaki Hara @qnighy

文字列がバイト列、ライブラリごとに色々なエンコーディングを仮定している、文字列が書き換え可能、配列とタプルを区別しない

2018-03-26 20:08:45
弩.net @isyumi_net

@qnighy 配列と連想配列の区別がないもお願いします。

2018-03-26 20:06:49
Masaki Hara @qnighy

strictモードを持つ言語だと何が失敗だったかわかってかなり参考になりそう

2018-03-26 20:09:50
Masaki Hara @qnighy

JavaScriptやPerlなどが有名

2018-03-26 20:13:22
koba @kobae964

@qnighy bashのexpr周りで、スペースがあったりなかったりすると失敗するのとかもお願いします

2018-03-26 20:11:53
Masaki Hara @qnighy

@kobae964 あーあれもすごいですね

2018-03-26 20:12:17
まちカドおるみん @kotatsu_mi

世紀の傑作ゴミ言語が生まれようとしている。

2018-03-26 20:11:46
Masaki Hara @qnighy

名前のググラビリティーが低い、名前のググラビリティーが危険、複数の競合するビルドツールがある、複数の競合するパッケージマネージャーがある、エヴァンジェリストが初心者を萎縮させている、言語自体に競合するフォークがある(或いは多すぎる)

2018-03-26 20:19:03
Masaki Hara @qnighy

標準入出力がないために他ツールとの噛み合わせが悪い、単純に標準ライブラリが貧弱(自身のコンパイルのために必要な分しかない)、抽象的なライブラリ関数と具体的なライブラリ関数が併存している

2018-03-26 20:22:58
イショティハドゥス @Ishotihadus

論理演算が is とか not とか and とかで記号じゃない

2018-03-26 20:16:28
イショティハドゥス @Ishotihadus

各言語の「ここが失敗だったな」という設計を寄せ集めた言語作ったらただの Python 2 になりそう

2018-03-26 19:44:00
残りを読む(76)

コメント

asakurah @asakurah 2018年3月26日
色んな言語の落とし穴を集めた言語か…。考えてみるのは面白いなぁ
0
yasu⋈(HIRATA Yasuyuki)@アスカネット @hirayasu 2018年3月26日
当時の状況や経緯を考慮せず「この仕様がダメ」と断罪するのはちょっと…
3
yasu⋈(HIRATA Yasuyuki)@アスカネット @hirayasu 2018年3月26日
ちなみに、Perlだと "10" + "10" は20になりますね。
0
otsuyokodon @otsuyokodon 2018年3月27日
しかしガベージコレクションが良い考えだと思ったやつは誰なんだ。その考えかたがゴミだと思いつつある。GC様のふるまいを伺いつつプログラミングしなければいけなくなってしまった。
0
otsuyokodon @otsuyokodon 2018年3月27日
BAT という例がある。普通の言語だと思っていたら確実にはまる。
0
べんがろほ @6engaroho 2018年3月27日
for(i in 配列)の "i"が文字列になるやつとか、Luaの配列が1から始まるのとか。
0
sake @sake_ne_ku 2018年3月27日
10年、20年後には、この時代はカオスだったねとか言われてるだろうなぁ
0
ワス @wsplus 2018年3月27日
その昔FORTRANつー謎言語あって、授業の最初に「現在使われていないが勿体ないから教える」と1年間講義が続き、その後Mac触って「本当に無駄だった」と悟った
1
中村ヘボピー @hebop_ 2018年3月27日
そこにMSX-BASICの「変数は最大2文字」と「ラベルが使えないので飛び先は行番号指定」を加えてよりカオスにするのだ。
1
tomtia_tw @tomtia_tw 2018年3月27日
まぁまだまだFORTRANは死んでないけどね。今年はFortran 2018も出るはずだし。
2
アズなんとかさん @as_capabl 2018年3月27日
あえてCoqから「引数や型の推論は可能だが、直近で定義された型の合う定義を問答無用で持ってくる」というのを引っ張って来たい
0
アズなんとかさん @as_capabl 2018年3月27日
Prologのバックトラッキングを入れて「手続き処理の最中でうっかり失敗すると失敗駆動ループが回る」というクソ仕様にしたら最強かもしれない
0
アズなんとかさん @as_capabl 2018年3月27日
(バックトラッキング自体は失敗ではないけど、失敗駆動ループとかに悪用できるようにしたのは失敗だと思う)
0
nekosencho @Neko_Sencho 2018年3月27日
コンピュータは仕様がまるっきり別者になってるからね。 初期の、秒間数千回の計算、メモリ数千(大型コンピュータでさえ!)ってのと、パソコンですら秒間数兆回計算できる演算装置に数十億級のメモリがある時代では扱い方もぜんぜん違うだろ
0
いくた♥️なお featuring Tricity155 @ikutana 2018年3月27日
命令文が先頭一致でマッチするってクソ言語があって、 ディスクを抜く前にREMOVEコマンドを実行しないとディスクが壊れてしまうのに、 REMOVってやると、コメントのREM文として処理してしまって、そのままディスクを壊してしまうっていう言語がありましてね。 DISK BASIC (通称N-DISK BASIC)というんですけど。
1
yasu⋈(HIRATA Yasuyuki)@アスカネット @hirayasu 2018年3月27日
FORTRANはスパコンとかで現役 (むしろ好んで使われる) だから、使われていないわけでは無いんだよなあ。あと、数学系とかでプログラミングが絡む場合、書籍でもFORTRANが使われていたり。(後者はPythonになりつつあるみたいだけど)
1
ぼんぼ (直射日光を避けてください) @tm_bonvo 2018年3月27日
全行に行番号が必要だったり全ての変数がグローバルだったりするBASICとか、よくもまぁあんなんでそこそこの規模のコード書いてたなぁとか思う
0
hatano @_hatano_ 2018年3月27日
FORTRANは死んでいるといってよいのでは? Fortranは生きてるけど。
0
Ralph Rdlizer@Where'll we go from now? @Ralph_Rdlizer 2018年3月28日
hebop_ NECのPC9800シリーズのBASICがラベルを使えた当時、IBMマルチステーション5500系のBASICはまさに『ラベルが使えないので飛び先は行番号指定』になっていました。そのIBMのBASICで冒頭に置いている宣言系をデバック中にREMで括り、デバック後“リナンバーしてから”REMを外し、後にエラーが発生した際飛び先がズレていることに気づかず、当時新人だった私が気づいたことが…。
0