2013年12月16日

正規表現が構文として必要かどうかという話から

適当にツイートを洗い出してまとめた。これから読むところ。
20
FUJI Goro @__gfx__

dart、いいんだけどオーバーヘッドがやはり気になるなあ。

2013-12-15 22:02:35
FUJI Goro @__gfx__

dartVMはほんとに速くなったし、標準化はほんとに期待してる。あと正規表現さえ構文に組み込まれればサーバーサイドでも使えますよこれは。

2013-12-15 22:04:54
Inada Naoki @methane

@__gfx__ なんでサーバーサイドで使うのに正規表現が構文で必要なんですか…? Python も Go も正規表現構文無いけど不自由感じないし、むしろリテラルあるとシンプルな文字列操作で良い場面で正規表現を使う悪習が広まるので良くないと思うのですが。

2013-12-15 22:43:35
FUJI Goro @__gfx__

@methane いやぼくからみると、golangもpythonもシンプルな正規表現演算でいい場面なのに複雑なコードで対応せざるをえない、文字列操作に向かない言語ですよ。

2013-12-15 22:51:37
Inada Naoki @methane

@__gfx__ 正規表現を使ったほうがいい場面はライブラリで対応可能で、 import と数タイプ増えるだけなのに、構文を汚す必要性は感じたことが無いですね。。。

2013-12-15 22:54:05
FUJI Goro @__gfx__

@methane それは賛成できかねますね。

2013-12-15 22:58:45
Inada Naoki @methane

@__gfx__ 事実として正規表現がリテラルでない言語(Java, C++, Python, Go など)は広くサーバーサイドで使われているので、リテラルであったほうがいいかどうかはセミコロンがあったほうがいいかどうか程度の問題だと思います。

2013-12-15 23:01:49
Inada Naoki @methane

@__gfx__ なので Dart は正規表現リテラルなくても、コミュニティの盛り上がりがあればサーバーサイドで実用されると思います。

2013-12-15 23:02:48
Inada Naoki @methane

Scala も Haskell も正規表現リテラルないよね?というか正規表現リテラルって、文字列リテラルと別に複雑な(覚えきるのが難しい)エスケープ規則のあるリテラルを導入してやってることはメソッド呼び出し一個減らしてるだけだし、

2013-12-15 23:08:32
Inada Naoki @methane

名前から意味がわかりやすかったり、ドット打った後はエディタやIDEの補完が効くメソッドの代わりに、意味をいちいち丸暗記で覚えないといけない記号増やしてるだけだよね?

2013-12-15 23:09:20
Inada Naoki @methane

個人が使い捨てするスクリプト言語ならいいけど、チームで開発する言語としては、学習コストと生産性のコスパ悪すぎない?

2013-12-15 23:10:16
FUJI Goro @__gfx__

@methane いや正規表現構文をセミコロンと同一視するとか…。正規表現構文のある言語をまともに触ったことありませんね?経験していないものに必要性を感じないのは当然ですから、一度ちゃんと触ってみてはいかがでしょうか。

2013-12-15 23:10:59
Inada Naoki @methane

if s.startswith(('foo', 'bar')): のほうが、 if s =~ /\A(foo|bar)/ より、リーダビリティ(ピアレビューのしやすさ)が上だと思う。

2013-12-15 23:12:34
Inada Naoki @methane

@__gfx__ JavaScript 触るときも、できるだけ文字列操作でやりたいところですが、ちょっと文字列メソッドが少なすぎるので辛い時はリテラル使いますが、、、

2013-12-15 23:15:55
Inada Naoki @methane

@__gfx__ むしろ、正規表現に頼らなくても文字列操作が充実している言語で、メソッド覚えずに低レベルの操作の組み合わせで実現しようとして正規表現のほうが楽だと感じられてるのではないでしょうか?

2013-12-15 23:16:16
Kazuho Oku @kazuho

@methane @__gfx__ JavaもC++も、数年前までクロージャがなかったのが最近入ったわけですよね。そのような安定性を重視する言語を例にこれからの設計を語るべきではないと思います。

2013-12-15 23:16:58
Kazuho Oku @kazuho

まあ僕は、むしろ、今後サーバサイドプログラミングにおける文字列処理の需要は減っていくのではないかと思っています

2013-12-15 23:17:21
FUJI Goro @__gfx__

@methane javascriptの正規表現構文というかリテラルは変数の埋め込みができないので大して便利とは思いませんね。あれだったらなくてもいいです。

2013-12-15 23:18:14
Inada Naoki @methane

@kazuho @__gfx__ これからの設計の話をしていたわけではなく、サーバーサイド言語として普及する条件の話をしていたつもりです。これからの設計としても、正規表現リテラルがなくてただのライブラリにしても生産性が落ちないくらい、普通のことが簡単な設計がいいと思いますが。

2013-12-15 23:19:27
コルン @colun

@methane この例のリーダビリティは個人の好みに寄ると個人的には思います(ただし私はstartswithで書きます)が、'foo'や'bar'などの固定文字列じゃなくて変数を使う場合に、startswithの方が圧倒的に柔軟だと思います。

2013-12-15 23:19:41
Inada Naoki @methane

@colun @__gfx__ さんの仰る正規表現リテラルは変数の埋め込み(?)ができるそうなので、固定文字列じゃなくて変数を使う場合 (prefix を設定ファイルで定義する場合など) にもストレートに対応できるかもしれません。

2013-12-15 23:21:15
コルン @colun

@methane @__gfx__ 何の言語の話なのか把握していませんが、変数の埋め込みをする場合はエスケープしないといけないという僕の認識は間違っているのでしょうか? また、'foo'や'bar'が変数なのではなく、['foo','bar']という配列が変数の場合とか。

2013-12-15 23:23:33
Kazuho Oku @kazuho

@methane @__gfx__ いえ、設計の正しさを主張するために現在のC++やJavaの言語仕様を例にあげるのは、5年前にクロージャは不要だと主張するのと同じかもよ、ということです。

2013-12-15 23:24:13
FUJI Goro @__gfx__

文字列操作といえば正規表現、という時代はすでに終わっているというところは異論はないです。

2013-12-15 23:24:40
残りを読む(150)

コメント