kujirahand / nadesiko3

Japanese Programming Language Nadesiko v3 (JavaScript/TypeScript)
https://nadesi.com/
MIT License
234 stars 19 forks source link

cnako3でnadesiko3-serverを起動した時、ctrl+cでプロセスが止まらない #1668

Closed kujirahand closed 3 months ago

kujirahand commented 3 months ago

cnako3でnadesiko3-serverを起動した時、ctrl+cでプロセスが止まらない 確かに再現する https://nadesi.com/cgi/kaizen3/?m=thread&threadid=86

kujirahand commented 3 months ago

https://github.com/kujirahand/nadesiko3/pull/1447 の副作用ではないかと指摘していただきました。調査します。

kujirahand commented 3 months ago

確かに、sys.__linereaderをコメントアウトすると、ctrl + cで止まりました。

npm i -g nadesiko3-serverでサーバーをインストールした後、下記のコードを実行すると、ctrl + cでサーバーが停止しません。非同期処理で毎行読み出しを行う弊害かと思います。

!「nadesiko3-server.mjs」を取り込む。
3030でWEBサーバ起動した時には
  「サーバーが起動しました」と表示。
ここまで。

「/」へWEBサーバGETした時には
  「hello」をWEBサーバ出力。
ここまで。

加えて、以下の問題もクリアできなていないといけません。 https://nadesi.com/cgi/kaizen3/?m=thread&threadid=66

以下のように、cnako で入力をリダイレクトで入れた時に、2回目以降の尋ねる命令が使用できません。

ソースコード (code.nako3)

名前は『あなたの名前は?』と尋ねる
「{名前}さんこんにちは」と表示

年齢は『あなたの年齢は?』と尋ねる
「{年齢}歳! 若い!」と表示

入力(input.txt)

TumoiYorozu
1

cnako3 code.nako3 < input.txt

出力 あなたの名前は?123 123さんこんにちは あなたの年齢は?

現在、競技プログラミングサイト AtCoder の言語アップデートにて、なでしこ3が使用可能になりつつ調整中なのですが、リダイレクトで複数行の入力を受け取れないので、入力が複数行ある問題が解けなくなってしまっています。 https://atcoder.jp/contests/language-test-202301/submissions/40365113

入力が1行だけの問題は解けてACが取れます https://atcoder.jp/contests/language-test-202301/submissions/40365743

mnoriaki commented 3 months ago

C だと isatty() を使って判別して切り替える方法がとれるようです: https://daily.belltail.jp/?p=230

Javascript でも isTTY() があるようですが、使えそうでしょうか: https://nodejs.org/api/tty.html

kujirahand commented 3 months ago

@mnoriaki さま、ありがとうございます😊 async/awaitを使った場合の問題だったようで、f6c03286f9c6e35c5beb44eb8c1d42715663a915 の修正で解決しました✨