情報更新
ツイートの記録を停止しています

 

ツイート検索

 

@kmizu
サイトメニュー
Twilogユーザー検索
新規ツイートの取得を再開しました!取得再開にはログインが必要です。

Twilog

ツイートの記録を停止しています

このアカウントはTwitter APIの仕様変更の影響でツイートの記録を停止しています。
記録を再開するには、Twilogにログインしてください。

 

@kmizu

kmizu@kmizu

Stats Twitter歴
6,199日(2007/04/10より)
ツイート数
110,424(17.8件/日)

ツイートの並び順 :

表示するツイート :

2019年08月12日(月)50 tweetssource

8月12日

@kmizu

kmizu@kmizu

@omuomugin はい。「安全」って言葉の意味が強すぎるってのが私も違和感がある原因かと思います。TypeScriptについていうと、Gradual Typingという概念の導入が必要なので、全ての型にふつーに型がつく世界とは違う、ということなのかなと(TypeScriptが本当にGradual Typingの概念満たしてるのか未調査)

posted at 22:28:46

8月12日

@kmizu

kmizu@kmizu

@omochimetaru はい。それは同感です(non-nullnessといいますか、そこはとてもうれしいところかと)。ただ、それは「null安全」のサブセットであって、「null安全」でうたっているところのものとは、ずれがあるようだ、という話です。

posted at 19:10:10

8月12日

@kmizu

kmizu@kmizu

@nobkz Noneとかの値でないことがわかっているので、パターンマッチを書いても無駄(case Noneとかで例外投げる羽目になる)、という場面がある、ということだと理解しています(し、実際そういうケースがしばしばあります)。

posted at 17:02:58

8月12日

@kmizu

kmizu@kmizu

しかし、連休だというのに、というか、連休だからこそ、というべきなのか、家でだらだらしている…。

posted at 15:47:25

8月12日

@kmizu

kmizu@kmizu

その辺の共通点があるのが、真の(?)意味での「null安全」に対しても疑念が湧いてくる理由の一つだったりします。

posted at 15:27:51

8月12日

@kmizu

kmizu@kmizu

なお、Scalaでv.get() ができたり、Kotlinで v!! ができたり、Rustでv.unwrap() ができたり、Swiftでv! ができたり、どれもこれも、短い名前で、Option/Optional/nullableを外せるのは、結局、それだけカジュアルにそういう操作やりたいという要求が強かったからなのだと思います。

posted at 15:26:34

8月12日

@kmizu

kmizu@kmizu

@_yyu_ かなり似た話として、たとえば、パターンマッチの網羅性チェックがされるというのはうれしいのですが、それを網羅安全性(もちろん今考えた造語です)とかいう用語にされたら強烈な違和感を覚える、みたいな。

posted at 14:31:12

8月12日

@kmizu

kmizu@kmizu

@_yyu_ そうですね。他の〇〇安全と比べて、用語として浮いている、と感じています(他の〇〇安全にも微妙なものがあるかもしれませんが)。

posted at 14:26:37

8月12日

@kmizu

kmizu@kmizu

なお、型レベルでのnullable/not-nullableの区別は明らかに嬉しい(少なくとも、たとえば、Javaがunsoundじゃない問題とかは、たぶんこれで解決しそうだし、実用上もメリットが多い)ので、それはそれとして。

posted at 14:00:21

8月12日

@kmizu

kmizu@kmizu

私の「null安全」批判には2つの別の話があってややこしいので、整理すると
(a) 「null安全」をうたっているものの、それを危うくする操作がカジュアルにできてしまっていて、うたい文句と実質がずれている、という話
(b) そもそも「null安全」で達成される性質がどの程度嬉しいのか、ということの疑念

posted at 13:57:41

8月12日

@kmizu

kmizu@kmizu

わけで、本気で「null安全」(先ほど自分が言ったような意味での)を追求しているのなら、カジュアルに!!使えたり、他の言語でもそれが簡単にできるっての、どうかと思うわけです。実用的にそうする意図はわかるものの。

posted at 13:49:24

8月12日

@kmizu

kmizu@kmizu

もうちょっと細かくいうと、実のところ「null安全」な言語では、型検査を通ったプログラムでNullPointerException(相当)が発生しない、という性質だととらえるのは意味がある一方で、カジュアルに!! とかでnullableを「はずせる」っていうのは(実用的にはわかるものの)「null安全」を危うくしてる

posted at 13:46:08

8月12日

@kmizu

kmizu@kmizu

nullable/not-nullabeの型レベルでの区別がKotlinをはじめとした色々な言語に取り入れられた事自体は望ましいし、素直に良かったと思うのですが、それが、「null安全」というキャッチーだけどビミョーな言葉に吸収されていくのは喜べないなあというのが正直な気持ちです。

posted at 13:39:12

8月12日

@hidemotoNakada

Hidemoto Nakada@hidemotoNakada

ある言語が「null 安全」かどうか、ってどうやって判断するのだろうか。Juliaも 型Aの変数にnothing は代入できない。かつては Nullable{A} みたいな記法があったみたいなのだけど、今はなくてunion{A, Nothing} と書くことが推奨されているようだ。

Retweeted by kmizu

retweeted at 13:24:09

8月12日

@iiduna_yutaka

織部ゆたか@iiduna_yutaka

「韓国のサムスンや中国のメーカーはすごいぞ」という人に「やはりこれからは企業と政治が癒着する時代なのだ。財閥復活! 財閥復活!」っていうとなぜか怒られそうなのは腑に落ちないんだけど「豊かだった時代の日本を取り戻せ」論と合わせると、財閥と政治家が癒着するの理想だと思うんだけどなあ

Retweeted by kmizu

retweeted at 13:15:16

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz あ、そういう話ならわかります。理由っていうのが漠然とした書き方だったので、ちょっと誤解していました。そういうものをコメントで書けって話ならわかります。

posted at 12:50:18

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz 実際に私がget()したくなった話としては、 ASTからASTへの変換処理中に、ある構文木ノード中の要素が必ずSomeになることがあって、でも、そのために別のASTの階層を作るのは正当化できない、という話がありました。

posted at 12:43:57

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz なぜNoneにならないのにOptionを選択したか、に関しては、型としてはOptionであっても、一般に、利用側での特定の実行パスを経ることによって != Noneであることがわかる場合がある、というのが私の答えになろうかと思います。

posted at 12:42:38

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz そこはまさに「方便」としては、「原則使わない」はありだと思っているので、それでいいのかな、というのが一つの答えで、「方法論」としては、そもそも一つのワードで書けない(もう少し詳細な場合分けが必要)、ということになろうかと思います。

posted at 12:40:56

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz 証明できるなら型で縛れる、はScalaの型システムの下で、だと、正しくないと思います。フルスペックの依存型がある言語ならともかく。

posted at 12:31:41

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz その問題意識はわかります。一方で、コメントで書く、というの、審査するコストがかかるとも思います。軽々しく使ってしまえる、get()という名前が良くなくて、assertNotNoneAndGet() くらいにしてくれると、表明しているということがわかるのかなあ(私はget()するときは常に表明しているつもりです)

posted at 12:30:14

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz どう防ぐかという観点でいうと、業務を円滑に進めるための「方便」として「原則使わない」はわかるものの、方法論を提示する観点では、「原則使わない」は何も言っていないのかなという意見です。

posted at 12:26:24

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz あと、「なぜ」をコメントで書くというの、assert v != Noneの根拠を書くってことになるのでしょうか。それは有効だと思いますが、突き詰めると証明プログラミングみたいな話になりそうです。

posted at 11:55:47

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz これは、MeyerのOOSC 2nd editionでも類似の話があったのですが、不必要にget()使いたいわけもなく、必要な箇所だと思ったからこそ、get()したいのであって、それに対して、「原則使わない」は回答になっていないよなあと。もちろん、よくわからず使う人への戒めとしてはわかるんですが。

posted at 11:53:11

8月12日

@kmizu

kmizu@kmizu

@gakuzzzz 私は、その「原則使わない」って言い方が結構曲者だと思っています。気持ちはわからなくもないのですが、どういう場合に原則に当てはまらないかという言及がないので、その原則って何ぞやってなるわけで。

posted at 11:51:03

8月12日

@kmizu

kmizu@kmizu

Catsとかを使うことと、Scalaで関数型プログラミングをすることは全く別のことなんだけど(Scalaで不変コレクションを使ったプログラミングをするだけでも、関数型プログラミング(=副作用をなるべく用いない)をしてることになるはず)、そこらへんがしばしば誤解されてる気がします。

posted at 11:23:39

8月12日

@kmizu

kmizu@kmizu

で、そういうときに、原則!!は使わないとか、原則get()を使わない、というルールだけだと(安易にそうしてしまう人への警鐘として意味があると思いますが)、問題は解決しないよなと。

posted at 11:19:33

8月12日

@kmizu

kmizu@kmizu

null安全の話なんですけど、私の経験上、いったんnullable(あるいはOption)にしたものの、利用側の特定のコンテキストで assert v != null; あるいはassert v != Noneという表明をしたくなる(つまり、ある実行パスでnon-nullableであると確信している)ことがしばしばあります。

posted at 11:18:25

8月12日

@kmizu

kmizu@kmizu

ご利益は色々あると思うのですが、たとえばDSLの構文や意味論を定義するときには役に立つと思いますし、既存のプログラミング言語の構文や意味論を相対化して考えられると、単に「与えられた言語から選ぶ」だけでなく、マクロなどによって新しい「構文」を定義して使うという考え方も得られるかなと。

posted at 11:07:41

8月12日

@kmizu

kmizu@kmizu

その一つとして、プログラミング言語論はかなり重要だと考えていて、それが、プログラミング言語ハンズオンとか構文解析ハンズオンをやる動機につながっています。

posted at 10:58:53

8月12日

@kmizu

kmizu@kmizu

この意見には自信を持てていないのですが、プログラミング教育と同時にコンピュータサイエンス教育もちゃんと行われるとよりよいと最近思います(この、コンピュータサイエンスといっても幅が広いのでどこまでを選択するかという問題がありそうですが)。

posted at 10:52:59

8月12日

@nishio

nishio hirokazu@nishio

@kis 生存者バイアスに加えて、選択肢が2つだけではないのに2択の問いにするミス、良し悪しを2軸で測ろうとするミス、「誰も助けてくれない」環境がいいと言ってるツイートで「困った時に助けてくれるメンターがいた方がいい」という整合性のなさ、など問題だらけなので添削課題として有用そうですね。

Retweeted by kmizu

retweeted at 10:46:50

8月12日

@kmizu

kmizu@kmizu

@koher もうちょっと詳しくいうと、要するにテキトーに型をnullableにしたところで、!= nullだと利用側が判断したら、Kotlinでいうところの!!が使われるだけ(単にNullPointerExceptionの発生場所が変わるだけ)なので、何をnullableにするかの基準まで示して本当の問題解決だろう、という意図です。

posted at 10:42:41

8月12日

@kmizu

kmizu@kmizu

@koher どもです。その、null safetyというのは、型レベルでのnullable/non-nullableの区別のことをさしていますか?だとすると、私の言いたいこととしては、null safetyというキャッチーな言葉で、nullに関する問題が解決されたかのように言うのは危ういということです。

posted at 10:39:28

8月12日

@kmizu

kmizu@kmizu

@kis @curelemonade2 個人的な経験では、JVM言語を効果的に使う上ではJVM知る方がより良い、という気がします(JVMを知る、はJava言語より知る、より難しいですが)。

posted at 01:46:37

8月12日

@kmizu

kmizu@kmizu

Gmailが新UI(って1年以上前か)になってからか、色々変な挙動(メールを開こうとすると失敗するがリロードすると成功する、が度々起こるのが特に代表的)に悩まされることが増えた気がする。Chromeに拡張機能ほとんど入れてないので、それ以外の理由だと思うのだけど。

posted at 00:53:58

このページの先頭へ

×