【PHP】下らねぇ質問はここに書き込みやがれ 15 (92レス)
1-

1: (ワッチョイ 5b7b-vCJ4) 2024/10/29(火)20:52 ID:zqRlJI/00(1) AAS
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
★スレ立て時 ↑ が3行以上になるようコピペ

PHPに関する質問スレです

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 14
2chスレ:tech
省1
9: (ワッチョイ 617b-8+ss) 2024/11/06(水)19:16 ID:r48zHH+W0(6/16) AAS
> oniguruma 付属のテスト用ファイル /sample/callout.c では (*FAIL) と (*SKIP) が問題なく動きます
> RUBY オプションを ONIGURUMA オプションで上書きし、実行時の syntax に RUBY を指定した状態で
> (*FAIL) と (*SKIP) が正常に機能します
つまりonigurumaは正常にコンパイル出来ている

> onig_init();
については947自身で答えが出てるのでよしとして、

> それが使われているのではないか」という仮説を立てています
省16
10: (ワッチョイ 617b-8+ss) 2024/11/06(水)19:19 ID:r48zHH+W0(7/16) AAS
ちなもうちょっといけるかと思って callout_name_entry を呼び出し元の onig_set_callout_of_name を
oniguruma>grep -n -r onig_set_callout_of_name * すると(他多数)
doc/CALLOUTS.API.ja:98:# int onig_set_callout_of_name(OnigEncoding enc, OnigCalloutType type, ,,,
doc/SYNTAX.md:786:function set in `onig_set_callout_of_name()` will be invoked, passing the given name
が引っかかるのだが何ぞこれ?
11
(1): (ワッチョイ 617b-8+ss) 2024/11/06(水)19:23 ID:r48zHH+W0(8/16) AAS
SQLiteと同様に、onigurumaはユーザーC関数を登
録して正規表現内から呼び出せたりするのか?
phpにはこのインタフェースはなさそうだが
というかこの辺はそちらの方が詳しいはず
と思って SYNTAX.md の方見たら
> 29. ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME (enable (*name))
なのでまんま君が使いたい機能か
省12
12: (ワッチョイ 617b-8+ss) 2024/11/06(水)19:24 ID:r48zHH+W0(9/16) AAS
なのでこちらは、現状、
・(*SKIP)(*FAIL)の定義自体を見つけられない(が、どこかにあるはず)
 ありがちなのは'SKIP'ではなく、最速の s[i]=='S' && s[i+1]=='K' ... とかの可能性で、
 これも一応探したが、ない…
 高速化の為に探索部分と一体化してて、grep等では探せないのかも…
・(*SKIP)(*FAIL)を探しに行っている関数 onig_st_lookup の定義が見つからない(が、これもどこかに定義されてるはず)
 マクロで書き換えててgrepではヒットしない場合もあるが、一般的にはこれはあまりないはず…
省21
13: (ワッチョイ 617b-8+ss) 2024/11/06(水)20:57 ID:r48zHH+W0(10/16) AAS
ごめん間違ってた(>>11)

× > mbstring>grep -n -r FAIL *
○ > oniguruma>grep -n -r FAIL * のつもりが、やってなかった

やればぞろぞろ出てきたので、また続き報告します
14: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:01 ID:r48zHH+W0(11/16) AAS
oniguruma/regexec.c:6399: onig_builtin_fail が(*FAIL)の定義
oniguruma/regexec.c:6433: onig_builtin_skip が(*SKIP)の定義
なのは分かった

これらを呼び出してるところは、grep -n -r onig_builtin_fail * では出てこない
そこで、(これはC知ってないと無理だが、)
oniguruma>grep -n -r '#define' * | egrep -v '#define *[A-Z]' で小文字マクロを確認、onig_を付けてるケースが多いので、(※2)
oniguruma>grep -n -r builtin * とすると
省11
15
(2): 947 (ワッチョイ 6274-erF6) 2024/11/06(水)22:04 ID:D3puRbUV0(1/2) AAS
ありがとうございます、規制に引っかかったのでとりあえずこちらに書きました
agree.5ch.net/test/read.cgi/mango/1715675838/333

向こうにも書きましたがもう調べて頂かなくて大丈夫です、すみません..
16: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:04 ID:r48zHH+W0(12/16) AAS
同様に onig_st_lookup を探す
oniguruma>grep -n -r st_lookup * で
src/regint.h:241:#define st_lookup onig_st_lookup
src/st.c:237:st_lookup(st_table* table, register st_data_t key, st_data_t* value)
と分かる
中身見たら FIND_ENTRY を呼んでおり、これはすぐ上 src/regint.h:224:#define FIND_ENTRY で定義されてる
ちなみにすぐ下 src/regint.h:271:st_insert(register st_table* table, register st_data_t key, st_data_t value)
省7
17: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:06 ID:r48zHH+W0(13/16) AAS
多分onigurumaをコンパイルする際に『phpとやりとりする』(=APIの)正規表現の文字エンコ
ードを決められる
多分コンパイルオプションにあるから確認してみて
なおこれは対象文字列のエンコ
ードとは違うので注意
phpで言うと、
mb_ereg_replace(
省17
18: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:23 ID:r48zHH+W0(14/16) AAS
>>15
読んだ
> あなたのような優秀な方を空回りさせてしまうのは申し訳無さすぎますので..
これは気にする必要ない
俺は「たまには他人のコードも読むべき」と認識してるから、機会見つけて読んでるだけ
一人で読んでても仕様とか知らんしハマるので、他人がいるときに合わせて読んでるだけだから
実際君はかなり仕様を知ってるし、結果的に辿りやすくなってる
19: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:25 ID:r48zHH+W0(15/16) AAS
> oniguruma には自分で任意の (*hoge) を作って oniguruma に登録することが
> 出来るという機能があります
あーやっぱこれ目当てですか

> そこで php_mbregex.c の中で任意の (*hoge) を作って oniguruma に登録し、
> test.php を実行して任意の (*hoge) が正規表現のパーツとして認識されるか
> どうかを確認したところ、ちゃんと認識されました
さらっと書いてるけどこれは結構ハードル高いはず、まあ動いたのならすごいが
20: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:25 ID:r48zHH+W0(16/16) AAS
> なので、(*hoge) の名前が文字化けして見つからないという訳ではなさそうです
orz、ハズレか…

> PHPでこの機能が使えているということは FAIL や SKIP も自前で
> 登録し直して使うことが出来るようになるかも知れません
まあ既に動いているのなら行けるはずではあるが、本来は書くのはエグいはず
コピペで移植してしまえであれば、
src/regint.h:989 の辺りから定義をコピペして php_mbreegxをコンパイルしてしまえば
省2
21: 947 (ワッチョイ 6274-erF6) 2024/11/06(水)23:13 ID:D3puRbUV0(2/2) AAS
ぶっちゃけ理解が全然追いついてないので明日またじっくり読ませて頂きますね
今日はありがとうございました

> なので、定義自体は存在してて、呼び出し部もある
> だから(*SKIP)(*FAIL)の文字列から検索出来てないだけ

ここが問題の核心ですね、どんなラスボスが潜んでいるのやら..
22: 947 (ワッチョイ 6274-erF6) 2024/11/07(木)19:42 ID:4fm0tpd+0(1/2) AAS
また規制のためこちらへ
agree.5ch.net/test/read.cgi/mango/1715675838/334-335n

昨日のレス把握完了です、これからお返事書きます(時間かかるかもです)
23
(4): (ワッチョイ 821b-Eaw9) 2024/11/07(木)19:56 ID:bj7jL5K50(1) AAS
phperですがjsp+java案件に入りました
直近の課題として、phpとの差異に四苦八苦してます

まず大きな問題としては、今までほぼ手続き型のphpしか触っていなかったのでオブジェクト指向でのJavaに苦戦してること(今まではユーザー定義関数群を1ファイル内に記述して適宜各画面で読み込んでいたに過ぎず、継承やclass・フィールド・メソッドといった経験をしてこなかったこと)

次いで、jsp→サーブレットの仕組みや処理の流れを落とし込めていないこと。jspそのものはphpファイルのようにスクリプトを埋め込めることは理解しましたが、コンパイルや、そしてサーブレットに渡してゴニョゴニョするんやで❤の辺りから頭から煙出てます。

次いで、Javaとphpの記述の違いに悩んでる事。例として文字列の比較や、型宣言など。

諸先輩方はどんな風にして他言語をphp基準に身につけたか、そのほか叱咤激励あれば教えて欲しく投稿しました
省3
24: 947 (ワッチョイ 6274-erF6) 2024/11/07(木)20:11 ID:4fm0tpd+0(2/2) AAS
あ、私の件はもう解決したと言って良い状態なのでお構いなく..
私より >>23 さんを優先してあげてください、ありがとうございました〜
25: (ワッチョイ 92a7-FIyw) 2024/11/08(金)22:24 ID:P0eM6kWU0(1) AAS
コマンドラインに現在時刻を出力するプログラムで(Windows+cmd)

while(1){
echo date('H:i:s').PHP_EOL;
sleep(1);
}

これだと改行して延々と表示されます
改行せずに1行で更新し続けたいときはどうすればいいですか?
省1
26
(1): (ワッチョイ 821b-Eaw9) 2024/11/08(金)23:49 ID:CkExJYb90(1) AAS
私は>23ですが、こんなのどうでしょう
コードベタ書きは書き込み制限あるので一部ホワイトスペース入れたりお茶濁してるので適宜変換したください

?
while (1) {
echo "\r" . date('H:i:s');
sleep(1);
}
省7
27
(1): (ワッチョイ 92a7-FIyw) 2024/11/09(土)00:08 ID:LVg5ycPw0(1) AAS
>>26
確認できました!どうもありがとうございます
DELあたりが怪しいと0x08をどうにかしたら…
なんて思ってましたが見当違いだったようで(ノ∀`)
28: (ワッチョイ 821b-Eaw9) 2024/11/09(土)00:17 ID:dAMFh9qY0(1) AAS
>27
解決できたようで良かったです!
もしJava経験あれば私>23なのでアドバイスください!笑
29
(1): 前スレ 947 (ワッチョイ 6274-erF6) 2024/11/09(土)01:35 ID:k7Zpjetb0(1) AAS
NGスレ06 にお返事を書いてましたが連投規制なのか続きを書けなくなりました
agree.5ch.net/test/read.cgi/mango/1715675838/334-n

書けない間についに問題の核心部分を突き止められました!
原因は oniguruma で廃止された onig_init(); を php_mbregex.c で使っていたことでした
github.com/php/php-src/blob/84400eefbb6f09ca7de971f49a86ab26520dfff3/ext/mbstring/php_mbregex.c#L115

PHPを知らない私は PHP_MINIT_FUNCTION(mb_regex) の MINI の部分を見て

「これはバージョン番号が小さい(=古い) oniguruma を使うときのものだな、きっと」
省11
30: (ワッチョイ 2bfe-oqWL) 2024/11/13(水)21:28 ID:4Dur4Zt/0(1) AAS
EOLの意味を理解しているのか聞いてみたい
31: (ワッチョイ 8374-Hy2o) 2024/11/13(水)22:10 ID:k2yyDMs20(1) AAS
clsコマンドでもいけそう、以前のログ全部消えるけどw
linuxfan.info/clear-command-prompt
32: (ワッチョイ 9b5f-LJoO) 2024/11/14(木)00:18 ID:36degyxc0(1) AAS
End Of Life
33: (ワッチョイ 8374-Hy2o) 2024/11/14(木)11:20 ID:9s7D31RY0(1) AAS
エターナル オオイタ ライフ
34
(2): (ワッチョイ 7541-f4e/) 2024/11/16(土)09:07 ID:ld+Km1C90(1) AAS
変数名ってなんでローマ字は駄目って言われるんですか?
日本人しか触らない日本のシステムなんだからわざわざ英語名にしなくても日本人全員が理解できるローマ字でいいと思うんですが
ましてやドメインに関わるものなら固有名詞に近いものまであるのにローマ字でなく英語にこだわる理由が分かりません
現場のリーダーに同じことを聞いたらローマ字だと問題あるかもしれないからと言われてそれ以上は聞けませんでした
35: (ワッチョイ 9581-FVZ9) 2024/11/16(土)11:23 ID:f4UqUxRm0(1) AAS
大人になったらわかるよ
36: (ワッチョイ 451b-Qp40) 2024/11/16(土)11:24 ID:Ga052jrd0(1) AAS
長い表記で更に人目でわかりにくいしデメリットしかなくない?
37: (ワッチョイ 8374-Hy2o) 2024/11/16(土)12:05 ID:8jjP2bBu0(1) AAS
日本人なのになんで分かりにくいローマ字を使うのだ
分かりやすくするなら漢字と平仮名とカタカナを使いたまえ

ちなみにonigurumaはメタ文字として使う文字を好きに変えられるのだが
試しに \ の代わりに ゑ にしたらちゃんと動いたよ
日本語で書く正規表現が作れそうでwktk
38: 23 (ワッチョイ 434d-eXrB) 2024/11/16(土)12:08 ID:SHCNbAVj0(1/2) AAS
>34
ローマ字記法(ヘボン式・日本式・訓令式)の事かな?結露から言うと、その命名規則にしてる現場もあるよ。特にレガシーな業務システム(2000年から2010年辺り)の現場で多い。例えばh o s y u U n y o(保守運用)とかs y a i n B a n g o u(社員番号)とか。

問題点と言えば、
・現場でしか使用されていない特殊な専門用語や業務用語を変数名にすると引き継いだプログラマーは初見で変数の意味を理解できない
・記述が長くなる
・ヘボン式や日本式の違いで誤記が発生する。例として社員なら s h a i n、s y a i n など
・英語話者プログラマーが読めない
省1
39: 23 (ワッチョイ 434d-eXrB) 2024/11/16(土)12:18 ID:SHCNbAVj0(2/2) AAS
>34 一般的にプログラムはチームで書くことが多くて、「誰が見ても分かる」が原則。この「誰が見ても分かる」がポイントで、もし内輪だけで使うプログラムならローマ字表記でも良いと思う。一方で、プログラマーが入れ替わる現場や英 語話者の居るグローバルなチームならローマ字表記不可。

他の理由には、開発されたプログラムそのものも大概は英 語圏で作られている。その為変数や定数の命名もベースは英 語圏から発生していて、その命名は汎用的に使用できるようになってる。よって上記同様、ローマ字表記法は汎用的ではない。

最後の理由としてプログラムは様々な箇所で引用される。作成されたプログラムが信頼に足りる素晴らしい内容なら、多方面で引用され関数やメソッドやA P Iとして汎用される。そのため英 語話者が読んで意味が通じないならそれはプログラムとしては良くてもソースコ ー ドとして通じない。 こんなところでしょうかねー。早い話オープン ソースにしようものならローマ字表記法は絶対出来ないですしねw 逆に1人だけで使うプログラムとか、内輪だけの限られた世界でしか使用しないプログラムならローマ字表記でも良いと思いますよ。
40: (ワッチョイ 43f8-jToT) 2024/11/16(土)16:59 ID:ti8Vm5gi0(1) AAS
一番最悪なのはローマ字でファイルやクラス設定して途中から名称変わったせいでどのクラス参照して良いんだかわからなくなるパターン
41: (ワッチョイ 424b-1WbX) 2024/11/17(日)18:56 ID:b+Rg3+ay0(1) AAS
aiに聞いたほうがはやい
42: (ワッチョイ 5274-EBAf) 2024/11/17(日)21:05 ID:SiCr1RNY0(1) AAS
次回、

「ヘボン式至上主義者と訓令式至上主義者の仁義なきソース手直しバトル」

ご期待下さい
43: (ワッチョイ 625f-zF9U) 2024/12/01(日)22:47 ID:mC7SLf5H0(1) AAS
異常を ijo と ijou のどちらにするかも悩ましいですよ
44: 前スレ947 (ワッチョイ 1b74-8ln4) 2024/12/22(日)14:26 ID:caN9k0/00(1) AAS
(ご報告) Oniguruma の 'SYNTAX.md' の件

以下の通り、'SYNTAX.md' の更新が一応完了したのでお知らせです

github.com/kkos/oniguruma/blob/master/doc/SYNTAX.md
github.com/kkos/oniguruma/blob/master/doc/onig_syn_md.c

Print the table in 'SYNTAX.md'
github.com/kkos/oniguruma/issues/315

私のスキルがショボいせいで中途半端な出来になっており、作者様には申し訳ないです..
省6
45: (ワッチョイ e34a-fWee) 2024/12/22(日)16:31 ID:tnFaHC5s0(1) AAS
完成させるだけでも立派よ
46: 前スレ947 (ワッチョイ 1b74-8ln4) 2024/12/23(月)12:35 ID:hOdCdrxj0(1) AAS
そう言って頂けると嬉しいです、ありがとうございました

私はC言語を知らず、動的なメモリ確保やsprintfなどを使えなかったのですが、
それらを使わなくても作れるプログラムだったのはラッキーでした^-^
47: (ワッチョイ ca74-2smG) 01/01(水)19:48 ID:dR6PfI6k0(1) AAS
Oniguruma の (*SKIP) が正式に使えるようになりました
外部リンク[10]:github.com

元旦にでっかいお年玉ありがとうございます > 作者様
48: (ワッチョイ 1f74-3+vo) 05/01(木)08:41 ID:7ocNYzTh0(1/2) AAS
規制テスト
49
(1): (ワッチョイ 1f74-3+vo) 05/01(木)09:10 ID:7ocNYzTh0(2/2) AAS
開発終了の理由は Oniguruma#349 です。 最後のコメントをご覧ください。
Oniguruma#351 は Oniguruma の fix_351_349 ブランチでのみ解決済です。

Oniguruma#351で解決した問題
github.com/kkos/oniguruma/issues/290#issuecomment-1805754012

Oniguruma#351で解決した問題の原因
github.com/kkos/oniguruma/issues/290#issuecomment-1825555154

個人的にはもしPHPが再び Oniguruma を取り込む場合は fix_351_349 ブランチ を取り込むことをおすすめします。
省8
50
(1): (ワッチョイ 2770-RTB+) 05/08(木)21:42 ID:MhxTwPG60(1/25) AAS
>>49
お疲れ。#290,#350,#351は読んだ。
相変わらず君はまともだね。正しく議論も出来ているし。
昨今の馬鹿ばかり無限に湧いてくる5chに辟易してる俺にはかなりの驚きだ。
(ただしこれは誰が悪いというわけではなく、俺が今更「永遠の9月」を追体験してるだけではあるが。
参考: 外部リンク:ja.wikipedia.org永遠の9月)
51: (ワッチョイ 2770-RTB+) 05/08(木)21:43 ID:MhxTwPG60(2/25) AAS
> 個人的にはもしPHPが再び Oniguruma を取り込む場合は fix_351_349 ブランチ を取り込むことをおすすめします。
PHPは互換重視、というより、互換絶対、だ。だから厳しいだろう。
(いうて最近はコンテナにぶち込んでさようなら、というのもありのようなので、
互換性の問題を仮想化で解決したとも言え、問題ないのかもしれんが)

界隈の状況全く知らんが、普通に考えて、
・特に問題ない場合(=互換性が保たれている場合)、最新リリースを取り込む
・最新リリースでbreaking changeされており、互換性を保ったリリースの提供が今後もされない見込みの場合、
省4
52: (ワッチョイ 2770-RTB+) 05/08(木)21:44 ID:MhxTwPG60(3/25) AAS
(実際どうなのかは確認してないが)、一番可能性のあるパターンは、
fix_351_349は一時的な解決策として動作確認の為のリリースであり、
問題なければ、最終的に正式ブランチに「何らかの動作モードで切り替えられる」形式でマージされる。(例: (外部リンク:github.com 内 \U)
そしてPHPは php_mbstring.c 内でそれを互換モード(=非fix_351_349モード)に固定して取り込む、といったところか。
だから君はこうなるよう、つまり、
・fix_351_349が希望通りの動作をすることをを確かめ、
・正式ブランチに何らかのフラグで切り替えられる形式でマージされ、
省9
53: (ワッチョイ 2770-RTB+) 05/08(木)21:44 ID:MhxTwPG60(4/25) AAS
…と思っていたが、昨日mergeしたのか?
(まあ実は俺はGitHubはほぼ使ってないのでissueのアイコン見ても何が何だか分からないのだが)
breaking change したのなら、決定が拙速すぎる気はする。
少なくともユーザー界隈、つまりPHP,Ruby,VSCode界隈に打診して反応聞いたほうが良い気が。
まあこれからフラグ付加すりゃいいだけという話かもしれんが。
54: (ワッチョイ 2770-RTB+) 05/08(木)21:45 ID:MhxTwPG60(5/25) AAS
breaking changeは結局、
・これまで書いたコード
・これから書くコード
のどちらを優先するか、でしかない。

ちなみにRubyが死んだのはこの辺の判断を間違ったためだと思ってる。
2012年のRubyカンファレンスだか何かで、
・互換性を重視してこの仕様にしました!!! ← ウォー!!!
省13
55: (ワッチョイ 2770-RTB+) 05/08(木)21:46 ID:MhxTwPG60(6/25) AAS
ついでに、前回結果的に投稿しなかった内容も書いておく。
(というか、中途半端には書いたが、全部書ききるのが面倒で、とりあえず結果も出たようだし、まあいいか、になってしまった)
PHPではなくほぼ正規表現とonigurumaの話なので、PHPにしか興味ない人は読む必要はない。
以後続くようならスレは移動してもいい。
俺はIP表示がなければどこでも可(ワッチョイも問題なし)なので、
別スレに落とされたレスがあれば、それに対するレスはそこに落とす。
56: (ワッチョイ 2770-RTB+) 05/08(木)21:46 ID:MhxTwPG60(7/25) AAS
>>29
解決したのはすごいよ。
普通はたどり着けないからね。ラッキーでど命中したというのはあるが、それにしても、だ。

> 速度面での恩恵が大きい (2chスレ:mango
正規表現にもよるが、'/....ABC/'とか書きたければそうね。
(俺の理解が正しければ)O(n^2)が(*FAIL)でO(1)になるのだから爆速だ。
ただ現在は、こういう「頭が決まらない(=頭が何でもマッチする)正規表現はバックトラックが激しく発生するので駄目、
省14
57
(1): (ワッチョイ 2770-RTB+) 05/08(木)21:47 ID:MhxTwPG60(8/25) AAS
とはいえ、現実的に無理だからαという判断なのだと思うし、実際この方向の需要も確実にあるのも事実。
例えば
A. preg_match('/OK|NG/', ... よりも、
B. if ($str[i]==='O' && $str[i+1]==='K' || $str[i]==='N' && $str[i+1]==='G') ...
の方が(PHPでは微妙だが、少なくともCでは)速いのは確実だが、
正規表現の方が読みやすさが格段に上なので、if文だと将来的にメンテコストが上がる。
(この辺しょうもないと思うかもしれないが、Aだと見た瞬間理解《所要0.5秒》に対し、
省6
58: (ワッチョイ 2770-RTB+) 05/08(木)21:48 ID:MhxTwPG60(9/25) AAS
ただし俺として最高なのは、Aのソース記述をコンパイル段階でBにして最速化する、であって、
つまり全自動での最適化を望んでる。手動で手間かけてまでやりたくない。
この場合に必要なのは「明示的な『任意の最適化の許可』フラグ」だ。
これはつまり、現在 retry-limit-in-match over 等で落ちてる正規表現に対し、
「任意の最適化の許可」フラグを付ければ、「通る『事がある』」という、なんとも微妙な方向で、
制御して確実に動作させきるという、αな「正道派」からすると許容できない仕様ではある。
ただ俺は「結果が正しく、十分速ければ、何も問題ない」という、大半の、βな「ライトユーザー」的な発想であり、
省12
59: (ワッチョイ 2770-RTB+) 05/08(木)21:49 ID:MhxTwPG60(10/25) AAS
そして一般的には、プログラマはα方向、非プログラマはβ方向を好む。
これは、プログラマは論理的理解をしてでも確実に制御しきりたいのと、
そもそもプログラマはソースコード内に記述して使うことが大前提のため、
読む回数>>>書く回数、というか、読むことに費やす時間>>>書くことに費やす時間、となるから。
だから、プログラマにとっては、多少冗長でも、すぐ読める記述のほうが好まれる。
逆に非プログラマは、まあ俺の偏見でもあるのだろうが、例えば昔に5chの正規表現スレにも書き込んだことがあるが、
かなりアウェイ感、というか、見解の相違を感じた。
省10
60: (ワッチョイ 2770-RTB+) 05/08(木)21:50 ID:MhxTwPG60(11/25) AAS
とはいえ、VSCodeにもonigurumaが入ってるらしいので、連中が順調に成長してるのは事実だ。
もしかするとRuby以上にいい線行ってるかも、とも思う。
とはいえ、αの方向はどうなの?とはかなり疑問ではある。
現行の先読み/後読み等もそれなりにややこしいので、
そもそも論理的理解力が乏しい非プログラマ連中にはかなり向いてない。
結果、現在もいるであろう、「正規表現だけしか出来ない馬鹿」を余計にのさばらせるだけではある。
61
(1): (ワッチョイ 2770-RTB+) 05/08(木)21:50 ID:MhxTwPG60(12/25) AAS
まあこれに関しては余談になるが、
ずいぶん昔にコメントアウトの /* */ を正規表現で削除する処理する、というブログページがあって、(とはいえ今検索しても出てこないんだが)
曰く、単純に preg_replace するだけでは、内部に任意のコメントを書かれたときに対応出来ない、
だからコメントとしてこういう文字列を書かれた場合に対応するためにこう、そしてこう、、、、と続き、
最終的にこれだ!!!これで何をコメントされても完璧に動く!!!
というのがあって、この程度書けないようなやつは困る(キリッ、みたいな締めになっていたが、
うむ、なるほど、俺には読めんな、とは思った。(結果忘れてここに書けないのはすまん)
省10
62: (ワッチョイ 2770-RTB+) 05/08(木)21:51 ID:MhxTwPG60(13/25) AAS
結果、「プログラマ」連中は、ソースコードに書かれてる程度の正規表現は読める必要があるが、
過度な正規表現は他のプログラマが読めないので禁止であり、中庸の正規表現の使用に落ち着く。(これがPCRE程度、というのが多分一つの目安)
非プログラマ連中は、極めた「匠」となり、なんでも正規表現でやり切るか、
「正規表現書けるの?すごーい!!!」程度の「ウルトラライト」に二極化する。(勿論断然多いのは後者)
なので、α方向は実際どうなのよ?はかなり疑問である。
現実的に現在のPCREな正規表現だと色々足りてないのは事実だが、
onigurumaなバックトラック制御を今後もてんこ盛りな方向だと、
省5
63
(1): (ワッチョイ 2770-RTB+) 05/08(木)21:51 ID:MhxTwPG60(14/25) AAS
さて読んでて思ったのだが、これ、仕様が矛盾してて、現実的に実装できない可能性も有るのでは?
これは当人も気づいてて言及してるが、実際に矛盾してるかどうかまでは分からないようだ。
> JS also ensures that /\w/iu is the inverse of /\W/iu. (外部リンク:github.com
俺も考えてみたが、よく分からん。
単純には、[\w]!==[^\W]でどうにも実装できないケースがあれば、
どのみちいつか breaking change するしか無いので、後腐れなく出来るのだが。

ところで同様の問題は、多分「濁点」にもある。
省15
64
(1): (ワッチョイ 2770-RTB+) 05/08(木)21:51 ID:MhxTwPG60(15/25) AAS
例えば典型的な糞ッタレ正規表現、
> a.*b.*c.*d.*e // --- (a)
についてだが、
> a.*+b.*+c.*+d.*+e // --- (b)
は確かに一つの解だろう。しかしこれは、最速ではない。
人間がやるときを考えれば分かるが、

$len = strlen($str); // ---(c)
省17
65
(1): (ワッチョイ 2770-RTB+) 05/08(木)21:52 ID:MhxTwPG60(16/25) AAS
ちょっと伝わりにくいだろうからもう一度書いておくと、俺の希望としては、
プログラマがコードとして書くのは(a)で、
これを内部的に(c)で処理して最速化しろ、
処理順だけ書けば(d)になるが、この正規表現では読むのに時間がかかる(所要30秒)ので無理、
「匠」は(b)を書くが、これは(a)よりは理解に時間がかかる(所要10秒)し実行速度も最速ではない。
「プログラマ」は(a)で無理なら最速の(c)プログラムを書くが、
(a)は2秒で理解出来るのに対して、
省6
66
(1): (ワッチョイ 2770-RTB+) 05/08(木)21:53 ID:MhxTwPG60(17/25) AAS
とにかく、ユーザーが困っているのは「仕様」ではなく「実行速度」なのだから、
それを「仕様」の限定化(仕様縮小=スペックダウン)で回避するのは悪手であり、まず高速化をやるのが先だ。
あるいは \U のように、unicode対策を外すフラグ付加(=フラグ付加時のみ仕様縮小での高速化)で対応できる。
kkos氏はこの仕様が実行速度に多大な影響を及ぼしているのを知っており、元々外したいと思ってたのだろうがね。
しかし、この状況で「仕様」を変更するのは、一般論としては明確な間違いだ。
何度も言ってるが、今の仕様は正しいので。
(とはいえ、結局この辺の采配、つまり理想と現実の兼ね合いでどう仕様を決めていくかが最終的な繁栄/衰退につながるので、
省2
67: (ワッチョイ 2770-RTB+) 05/08(木)21:53 ID:MhxTwPG60(18/25) AAS
> Therefore, choices for elements other than the character class are generated after the character class.
ちなみにこの意味が分からない。(が、#350にもそのまま転載されてるから彼らの中では通じてるのだとは思う)
これって具体的にどういう意味か分かる?
/(?i)[\S]/ を
/(?-i)(?:s|t|st|ss)/ ではなく、
/(?-i)(?:ss|st|s|t)/ (greedyなので長いほうが先、ついでにアルファベット順でssの方が先)
と見なす(に近い)ということか?
省10
68: (ワッチョイ 2770-RTB+) 05/08(木)21:54 ID:MhxTwPG60(19/25) AAS
以降は前回の話について
(途中まで書いてたのに付け足してるので時系列的にちぐはぐかもだが。
あと若干、何まで書いたのか忘れてるので、重複も有るかも?)

> 名前が見つからずにエラーになる原因は oniguruma に "FAIL" や
> "SKIP" などが登録される前に callout_name_find されているのが原因でした
つまりonigurumaの「登録」(初期化ルーチン)と「検索」(phpのmb_ereg_replace)が
レーシングしていて(通常「競合」と訳されてるようだが、個人的には「競争」と訳すべきだと思っている)
省2
69: (ワッチョイ 2770-RTB+) 05/08(木)21:54 ID:MhxTwPG60(20/25) AAS
> C言語のことを知りたいなら本なりで基礎から学ばないとダメですね
そうだが、実際の所、何となく読めるはず。
理由は簡単で、C言語は現在のメジャー言語全部の下敷きになっており、
文法はメジャー言語から見ればスモールセットでしかないから。
実際学んでも、ifとforとwhileだけですかー、と何も無さ過ぎてビビるはず。
ただしポインタを生で使える点だけが違う。
(とはいえphpでも全容を把握する為にはポインタの理解はある程度必要なので、
省9
70: (ワッチョイ 2770-RTB+) 05/08(木)21:55 ID:MhxTwPG60(21/25) AAS
というのを11月に思ってたのだが、(特定する気もないので該当するかどうかを答える必要はないが)
もし君が学生で、職業プログラマを目指しているのなら、今すぐにでもCをやるべきだ。
理由は上記のとおり、上達速度が上がるから。
なんかね、君の「知識/経験」と「能力/実力」のアンバランスさが異常で、正直俺は遭遇した事がないレベル。
「やってみたら出来ちゃった」的に話が進んで行ってるのが異常で、
普通は知らない言語の時点で諦めるし、勿論環境も立ち上げない。
こういうの無視して闇雲に突撃したところで成果も出ない。
省7
71: (ワッチョイ 2770-RTB+) 05/08(木)21:55 ID:MhxTwPG60(22/25) AAS
ただし、C言語の「理解」が目的で、C言語を「極める」必要はないことに留意すること。
C言語が50年も現役で居続けられるのは仕様/構成が素晴らしいからであり、この理由を理解するのは重要だが、
今C言語を書く必要がなければ、達人である必要はなく、当然書ける必要もない、
というか、Cにも問題が多々あったから、Cをベースとして他言語が発達してて、
つまりCの駄目なところは他言語使えばだいたい解決してる。だからCを書くこと自体に苦労する必要はない。
ただし、どういう思想でどういうコードを要求してる言語なのかを理解することは本当に重要。
まあこれでは分かりにくいので一つ例を上げると、「ポインタ」になる。
省4
72: (ワッチョイ 2770-RTB+) 05/08(木)21:56 ID:MhxTwPG60(23/25) AAS
さて話を戻すと、onigurumaはC界隈でもあまりやってはいけないとされている「マクロ芸」をやってる。
だからCマクロを知らないと読めないが、これはoniguruma側の問題だ。
(なおC++ではCの問題はCマクロで色々誤魔化せる事だとし、
Cマクロが使われる状況毎にC++文法を用意し、これを使う事でCマクロの除去を目指している。
だからC++ではCマクロは禁忌とされてる。
《と言っても『当初の』C++は、で、その後明後日の方向に暴走してたが》)

Cマクロは「ソースコードを直接書き換える」ので強力だが、結果、
省8
73: (ワッチョイ 2770-RTB+) 05/08(木)21:56 ID:MhxTwPG60(24/25) AAS
onigurumaで小文字マクロが大量に使われてるのは、おそらく大改修中だからだ。
全部大文字マクロに変更して変更箇所が膨大になるよりは、小文字のままで行ったほうが混乱しないと踏んだのだろう。
そして今回は初期化ルーチンのレーシングだが、こうなったのは仕様が変更されたから。
単体のonigurumaの使い方は分からんが、PHPで言うと、

当初:CGIで、毎回PHPを起動しては全部捨てる(各PHP毎にonig_initを呼ぶ)
今:モジュールで、一度PHPを起動したら常駐(初回にonig_initializeを呼んで以降は呼ばない)

レーシングしてたのは改修中で整合性取れてなかったのか、単に変更忘れててバグってたか知らんが。
省9
74: (ワッチョイ 2770-RTB+) 05/08(木)21:57 ID:MhxTwPG60(25/25) AAS
あとちなみに、(*FAIL)が辞書にない=(*FAIL)も辞書登録する、ということであって、
つまりonigurumaは(*FAIL)もユーザーが動作を上書きできるようにしてる。
普通はこの辺はリテラルで与えるので、登録されてねえ…ってことには構造的にならないんだけどね。
まあこの辺はkkos氏のポリシーなんだろう。

てな感じ。まあぶっちゃけだいぶ忘れちゃってるのを色々覚えで書いてるし、どこまで投稿したかも忘れてるので、
重複があったり、間違ってたらごめん。
75: (ワッチョイ 277c-RTB+) 05/10(土)22:48 ID:4QcnHpbT0(1/2) AAS
補足

実際にコンパイラ/インタプリタの実処理系で
「特定の文字列が含まれたソースコードは開けない/動かない」なんてことは聞いたことがないので、
これらでは仕様策定時の想定通り、if文で処理してる。
だからシンタックスハイライターで正規表現を使うのは手抜きでしかないが、
>>57の通り、この手抜きをやって新しい文法により早く対応することを優先するのは正しい。
(全部if文で書け、なんて言われたらシンタックスハイライターをメンテするやつが居なくなる)
省6
76: (ワッチョイ 277c-RTB+) 05/10(土)22:50 ID:4QcnHpbT0(2/2) AAS
>>63-66
仕様変更は 外部リンク:github.com に付け加えると

1. 全部諦める ← kkos氏の選択
2. モードスイッチでコンパイル時に切り替える
3. \U フラグ等で動作時に切り替える
4. 現行通り、[\s\S]!==. (つまり現行は中途半端な仕様になってる)
5. [\s\S]===. となるように仕様をアップグレードする
省10
77
(1): (オッペケ Sr87-Dtu1) 05/14(水)23:27 ID:UpG0dv4Tr(1) AAS
凡人エセプログラマーの私にはあなたが一体何をしているのかさっぱりわかりません
何やらすごいことをしているのは空気でわかります
しかし宇宙語並に理解不能なのでよければ軽く解説してくださるとうれぴいです
78
(2): 49 (ワッチョイ 7a74-CB35) 05/18(日)12:03 ID:miJJONwf0(1/3) AAS
>>50
遅くなってすみません、やっと全部把握出来たので少しづつレスしていきます。

>>77
PHPのmbstringのmb_ereg()系の関数に使われている正規表現エンジンのOnigurumaが先月開発終了となりました。
その原因は /\w/i と /[\w]/i の動作が一致しない等の不整合があり、fixが手間的に難しいということでした。
Issue 349: 外部リンク:github.com

また、この問題とは別に大文字小文字を区別しない時の [\w] などが "ss" や "st" などの複数文字に一致すると
省11
79
(1): 49 (ワッチョイ 7a74-rPai) 05/18(日)21:38 ID:miJJONwf0(2/3) AAS
>> 個人的にはもしPHPが再び Oniguruma を取り込む場合は fix_351_349 ブランチ を取り込むことをおすすめします。
>PHPは互換重視、というより、互換絶対、だ。だから厳しいだろう。

了解です。私は頓珍漢なことを言っていたようです、すみません。

> 昨日mergeしたのか?

いえ、これは私がOnigurumaをforkしたリポジトリでのmargeです。
このmargeは不適切ということでforkしたリポジトリは削除しました、ご指摘ありがとうございました。
(セキュリティ上の理由でforkしたリポジトリは非表示に出来ないようです)
省8
80: 49 (ワッチョイ 7a74-rPai) 05/18(日)21:43 ID:miJJONwf0(3/3) AAS
> [r`(?i)^[^\W]$`, 'ss'], // ❌ ← むしろこれがアウトだろ、疑問マーク付いてないが

これはOnigurumaの最適化によって /(?i)^\w$/ として扱われていると思われます。

> // The negation rule is about negation of the outermost class, only 🤔 ← この解釈が間違いで、
> [r`(?i)^[[^\W]]$`, 'ss'], // ✅ 🤯 ← これと
> [r`(?i)^[\w&&[^\W]]$`, 'ss'], // ✅ 🤯 ← これには俺は問題を感じない

これはおっしゃる通りだと思います、解釈の間違いですね。

> [r`(?i)^s{2}$`, 'ß'], // ❌ ← これはヒットするべきでは?
省5
81: 49 (ワッチョイ 7a74-CB35) 05/20(火)07:37 ID:gP4XTsxY0(1) AAS
ROMってる方のために補足です。

> 1. 全部諦める ← kkos氏の選択
> 2. モードスイッチでコンパイル時に切り替える
> 3. \U フラグ等で動作時に切り替える
> 4. 現行通り、[\s\S]!==. (つまり現行は中途半端な仕様になってる)
> 5. [\s\S]===. となるように仕様をアップグレードする

これは大文字小文字を区別しない場合の話です。
省10
82
(1): (ワッチョイ 5afa-Rabv) 05/21(水)08:08 ID:fstAuxa70(1) AAS
Onigurumaってそんなに関心もたれるものでもないんじゃ
83: (ワッチョイ 33bb-5lkG) 05/21(水)21:44 ID:/jwTY25H0(1/5) AAS
>>78
すまん#349読んでなかった。
そして#264も読んだ。

まず全般的にだが、謝る必要は全くない。
君が不味いことをしたわけではない。
俺が偉いわけでもなく、正しいわけでもなく、決定権を持ってるわけでもない。
君は自由に、やりたいことを勝手にやればいいだけ。
省2
84: (ワッチョイ 33bb-5lkG) 05/21(水)21:46 ID:/jwTY25H0(2/5) AAS
して#349、もう辞めます!ってか。なんか割と大事(おおごと)だが。
さすがに開発元が辞めてしまったら使用者側としてはどうにも動きづらいだろう。
一般的に、またPHP的に、ありがたいケースは順に、
・辞めるの止めます、で復帰してくれてそのまま開発継続
・主たるcontributorの誰かがforkして、大部分のcontributorがそこに集まって開発継続
・複数のforkでそれぞれ開発が行われ、その中で良さげなものを探して使う
・誰もforkしない、または使えそうなforkがないので、ひたすら現行バージョンを使う
省13
85: (ワッチョイ 33bb-5lkG) 05/21(水)21:47 ID:/jwTY25H0(3/5) AAS
して、君はこれどうしたい?
普通に考えれば、最新リリースバージョンの Version6.9.10 まではPHPには入る。(いつになるかは不明だが)
だからPHPにVersion6.9.10が入れば満足なら放置でいい。
oniguruma単品で使ってて、あるいはVersion6.9.10でも不満があるのなら、
・まず仕様について積極的にcontributeしてるやつを探し、
・次にコードに対して同様にcontributeしまくってるやつを探し、
そいつらの動向を見て、みんなが集まりそうなforkに寄生して一緒に開発するのがまあ妥当。
省13
86: (ワッチョイ 33bb-5lkG) 05/21(水)21:48 ID:/jwTY25H0(4/5) AAS
> 了解です。私は頓珍漢なことを言っていたようです、すみません。 (>>79)
いや謝る必要はまったくない。
ただ、PHP程の歴史があると、仕様変更は結局、
・これまでのコードをメンテしないといけなくなる連中がパニくるため、
・クソ仕様をさっさと更新して欲しい「ご新規さん」は少数派で、多数決的に勝つのは無理
・だからクソ仕様が周知されてて、界隈で「いい加減直そうぜ」とならないと仕様変更されない
 (なのでPHP8で修正された事項も『皆さんご存知のクソ仕様』ばかりのはず。onigurumaはこれに程遠い)
省17
87: (ワッチョイ 33bb-5lkG) 05/21(水)21:50 ID:/jwTY25H0(5/5) AAS
>>82
正規表現ライブラリの問題は、多分「仕様」側と「実装」側が乖離してる事。(これは他の非プログラマ向けソフトも同様だが)
正規表現の使用対象をざっくり二分すると
・ソースコード
・自然言語
で、「実装」側、つまりプログラマは前者なのでasciiが通ればほぼ問題ない。
PHPではユーザー入力やDB登録されてるテキストが後者になるので、多少は取り扱うけども、
省14
88: (オッペケ Sr03-oAJh) 05/22(木)02:35 ID:muJghNBDr(1) AAS
>>78
ご説明ありがとうです。
ChatGPTに聞きながら読んでみたけど、結論正規表現的には日本語はクソって言ってました。
とにかく恐ろしいほどの苦労があることはわかりました。
89: 49 (ワッチョイ 7a74-CB35) 05/23(金)20:54 ID:uUJ622wJ0(1) AAS
>して、君はこれどうしたい?

正規表現についてはもう十分な知識を得られたと思うので次は教えて頂いた通りに
C言語を本格的に始めてみようと思います。以降スレ違いになるのでこちらでお願いします。

c言語教えてくれ
2chスレ:tech

PHPスレのみなさまありがとうございました。お邪魔しました。
90: (ワッチョイ 655f-AFj/) 06/20(金)15:02 ID:zfoKSuMt0(1) AAS
配列について教えてくださいーーー
DBでSELECTして得た結果を$array1に受けて処理した後にMoveNext()の直前でその配列を$array2にコピーしています。
それによって前の行と内容が同じかどうかを判断したいのです。
しかしMoveNext()をするとコピー先の$array2の内容も$array1と同じように次のレコードに変わってしまいます。
(参照渡しはしてないのです。)
何故なのでしょう!?

$array1 = $db=>Execube (....);
省10
91: (ワッチョイ f65f-xkro) 06/20(金)15:46 ID:Mw7W7PWm0(1) AAS
>(参照渡しはしてないのです。)

参照渡しをしているのに よくもそんなことを言えたものだな
92: (ワッチョイ 655f-AFj/) 06/21(土)00:25 ID:4ubedfeT0(1) AAS
あぁ...オブジェクトを値渡しするにはcloneが必要なのですね
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.403s*