koicのブックマーク (59)

  • JavaScript の undefined と null を完全に理解する

    JavaScript で頻出する undefined と null について語ります。 言語仕様上の違い JavaScript (ECMAScript) において、仕様上 undefined と null は当然ながら明確に区別されています。いくつか言語仕様上の扱いについて挙げてみます。 比較 厳密な比較演算子 === において undefined と null は区別されます。ゆるい比較演算子 == においては両者は区別されません(仕様 7.2.14)。 console.log(undefined === null); // false console.log(undefined == null); // true 他の falsy な値(false とみなされる値)との比較は、ゆるい比較演算子であっても区別されます(仕様 同上)。 console.log(undefined == fa

    koic
    koic 2022/10/18
  • 「for やめろ」またはイベントループと nextTick() - Block Rockin’ Codes

    ものすごく遅レスですが、LLDiver で @esehara さんの LT であった話。 forやめろ、あるいは「繰り返し」という呪縛から逃れるために 簡単に言うと、 1~10 までを出力する方法を複数考えるというもの。 for, while, 再帰, goto etc.. と出て、途中で終わっちゃったので結論はよくわかりませんでしたが、 Node ではどれも使わずにできるな、と思ったのでちょっと例を出してみます。 ちなみに、タイトルでネタバレしている通りイベントループの話です。 そしてよくある「イベントループとは何か」「なぜ止めてはいけないのか」「process.nextTick() とは何か」「setImmediate() と何が違うのか」 などを解説する良い例だったので、書いてるうちに実はそっちがメインの解説となりました。 サンプルの実行結果は Node v0.11.13 です。(書

    「for やめろ」またはイベントループと nextTick() - Block Rockin’ Codes
    koic
    koic 2022/10/13
  • Node.jsに本気で向き合う①基本概念を理解する

    Node.jsを雰囲気で使っていたので、どこがどうなっているかをしっかり?理解しようと思いました。ざっと全体的な概念に触れつつ、業務でよく使う箇所についてまとめます。 長くなりそうなので「基概念を理解する」、「コアモジュールを理解する」、「よく使うパターンについて理解する」の3つにわけます。今回は簡単にNode.jsの利点と、イベントまわりについて、あとはおまけ的にモジュールimportとconsole.log系についてまとめました。 そもそもNode.jsとは フレームワーク…ではなく、JavaScriptの実行環境です。サーバーで動きます。シングルスレッド、イベントドリブン、ノンブロッキングI/Oあたりが特徴です。v8エンジンという実行エンジン(Google Chromeと同じ)で動きます。 何を知るとよいか これは自分の考えですが、 Node.jsのコアモジュールをざっと把握してい

    Node.jsに本気で向き合う①基本概念を理解する
    koic
    koic 2022/10/13
  • Rustの非同期を浅く整理する

    はじめに 自分の理解の整理も兼ねてRustの非同期を整理してみます。私はRust初心者かつ知能があまり高くないので誤りなどが多分に含まれていると思います。誤りはコメントでご指摘いただけると助かります。 非同期ランタイムはtokioを前提としています。 taskとruntime Rustの非同期には2つの主要概念があります。taskとruntimeです。 task taskは処理の単位です。taskはtokio::spawnという関数で起動されます。またtaskの実行はruntimeによって管理されます。 spaenのシグネチャを見ればわかりますが、tokio::spawnはFutureトレイトの実装を要求します。(Sendと'staticも要求しますが、その理由は省略します。) FutureトレイトについてはFutureセクションをご覧ください。 pub fn spawn<T>(futur

    Rustの非同期を浅く整理する
    koic
    koic 2022/05/10
  • Rust入門

    プログラミング言語Rust入門です.なるべくわかりやすいように解説しました.公式ドキュメントを読んでみたけど,あまりよくわからなかったという人に向いているかもしれません. 誤字や間違いなどのご指摘は以下からコメントをお願いします. https://zenn.dev/mebiusbox/scraps/90bc293a07430d

    Rust入門
    koic
    koic 2022/05/09
  • Python 3.15からデフォルトのエンコーディングがUTF-8になります - methaneのブログ

    Pythonがファイルを開くときなどに使われるエンコーディングはロケール(WindowsではANSIコードページ)依存でした。 Unixの世界ではどんどんUTF-8ロケールが一般的になっている一方、WindowsのANSIコードページはなかなかUTF-8になりません。 そのために、Unixユーザーが open(filepath) のようにエンコーディングを指定しないままUTF-8を仮定するコードを気軽に書いてしまって、Windowsユーザーがエラーで困るといった問題が発生します。 また、Windowsでもメモ帳(Notepad.exe)やVSCodeはすでにUTF-8をデフォルトのエンコーディングで使用しています。ANSIコードページがUTF-8になるのを待っていたらどんどん周りの環境から置いていかれ、レガシー化してしまいます。 Pythonがデフォルトで利用するエンコーディングをWind

    Python 3.15からデフォルトのエンコーディングがUTF-8になります - methaneのブログ
    koic
    koic 2022/05/07
  • Rust開発時の便利ツールたち

    前書き Rustを書くときに便利なツールをまとめた記事が無い気がしたので作成。(ちゃんと探してないので既にあるかも) 公式ツール cargo パッケージマネージャ 基だけどとても便利なツール 一度はThe Cargo Bookを読んでおくことを推奨。 rustfmt フォーマッター cargo fmt でもフォーマットの修正が出来る。(こっちを使うことが多い) clippy lintツール こう書いたほうが良いよという提案もしてくれるので便利。 cargo clippy --fix を使うと自動で直してくれる。 rust-analyzer Language Server rls もあるが、(最近は?) rust-analyzer の方がメジャーな気がする。 追記 : RLSは非推奨になりました。RLS Deprecation 非公式ツール cargo-watch ソースコードの変更を検知

    Rust開発時の便利ツールたち
    koic
    koic 2022/05/06
  • Rust入門日記 - 基本編

    とりあえず、Rustを入門するにあたって、いろいろ学んだことや、注意ポイントなどをまとめていく。 まとめ終わったら、Ruby, PHP使いが始めるRust的なBookにまとめていこうかななどと思っている。 読んでいる資料など The Rust Programming Language(日語版) 実践Rustプログラミング入門 AtCoderRust で始める!競技プログラミング入門(Rust 版 APG4b) 環境 macOS Catalina IntelliJ Idea Ultimate 2020.3 + Rust Plugin 自分が業務上経験している言語など Ruby JavaScript TypeScript PHP Java Groovy 最近、メインで使っているのがRubyであるため、Ruby関連のツールとの比較やらが よく出てくるかもしれない。 目標 とりあえずの到達

    Rust入門日記 - 基本編
    koic
    koic 2022/05/01
  • Rustで設定値を持つにはどうしたらいいですか | κeenのHappy Hacκing Blog

    κeenです。Rustではじめてアプリケーションを書くときに困りがちなことの1つにグローバルな値を持つにはどうしたらいいか分からないというのがあるようです。 その書き方を何パターンか紹介しできたらなと。 一応この記事には元ネタというかインスパイア元があり、以下のリポジトリも見ながら書かれています。 https://github.com/paulkernfeld/global-data-in-rust let にする 一番よくあるケースだとCLIや起動時に読み込んだ設定ファイルの値をどうするかでしょう。データの性格として起動時に一度だけ生成してあとは(ほとんど)いじらないようなものです。そういうものは main 関数内で let して、あとは借用で持ち回ればよいです。 起動時にファイルかろ設定値を読み込んで動くアプリケーションを雰囲気で書くとこんな感じです。 use std::io; str

    Rustで設定値を持つにはどうしたらいいですか | κeenのHappy Hacκing Blog
    koic
    koic 2022/04/30
  • GoとRust - 並行処理編

    GoRustの変更処理を比較することで両者を深く理解する試みです。 詳しい内容やスライドでは省いたところをブログに書きました https://zenn.dev/nasa/articles/compare_rust_go_concurrency

    GoとRust - 並行処理編
    koic
    koic 2022/04/28
  • 『並行プログラミング入門』を執筆しました - 未完成な論を綴るブログ

    これは、Rust Advent Calendar 2021 (2)の25日目の記事です。 https://qiita.com/advent-calendar/2021/rust 2021年8月にオライリー・ジャパンより出版された『並行プログラミング入門』を執筆しました。 並行プログラミング入門 ―Rust、C、アセンブリによる実装からのアプローチ 作者:高野 祐輝オライリージャパンAmazon 執筆から出版まで 書のGitリポジトリのコミットログでは、2018年の2月10日に初コミットがあるため、2021年8月21日の出版日まで、実に3年6ヶ月もかかったことになります。これほどかかったのは、執筆にかけるための時間がそれほどとれなかったのと、何より内容が難しいと言うのが大きいと思います。並行プログラミングについては、Webや書籍等含めて、様々な文献で言及されてはいるものの、それを体系的にま

    『並行プログラミング入門』を執筆しました - 未完成な論を綴るブログ
    koic
    koic 2022/04/28
  • Ruby on Browser 1.0 リリース - ブログのおんがえし

    窓の杜で取り上げていただいた後も実装は少しずつ続けていて、ひとまずブラウザ上で最新のRubyを試すのに必要な機能は一通り実装できたんじゃないかと思う。リファレンスマニュアルへのリンクを貼ってシンタックスハイライトを入れたりCtrl+Enterで実行できるようにした。(自分が書いたサンプルコードはScrapboxにあるのでコピペして試せます) https://rubyonbrowser.ongaeshi.me/ モバイルでも簡単なコードだったら書けるように色々工夫したのでちょっとしたコードを書きたいときにぜひ試してみてほしい。(Select Allボタンは結構こだわった) 他のブラウザ言語処理系と大きく違うこととして「ファイルを読み書きするAPIも使える」ということがある。元々WASIがWASMにファイルIOや通信を持せたることを目的にしたものなのでRuby WASM/WASI自体がファイル

    Ruby on Browser 1.0 リリース - ブログのおんがえし
    koic
    koic 2022/04/17
  • Rust から WebAssembly にコンパイルする - WebAssembly | MDN

    Rust のコードがあれば、それを WebAssembly (Wasm) にコンパイルすることができます。このチュートリアルでは、Rust プロジェクトWebAssembly にコンパイルし、既存のウェブアプリケーションで使用する方法を示します。 RustWebAssembly には、主に 2 つの用途があります。 アプリケーション全体を構築する — ウェブアプリ全体を Rust ベースで構築します。 アプリケーションの一部を構築する — 既存の JavaScript フロントエンドの内部で Rust を使用します。 今のところ、Rust チームは後者のケースに焦点を当てているので、ここではこれについて説明します。前者の場合、yew のようなプロジェクトをチェックアウトしてください。 このチュートリアルでは、Rust で npm パッケージを構築するためのツールである wasm-

    Rust から WebAssembly にコンパイルする - WebAssembly | MDN
    koic
    koic 2022/04/15
  • RustのSizedとfatポインタ - 簡潔なQ

    概要: RustにはSizedというトレイトがあり、一部の例外を除いて暗黙のうちに実装されている。Sizedが実装されていない型はDynamically Sized Typeと呼ばれ、これらのデータはfatポインタを経由してアクセスする。この仕組みを説明する。 Sizedの使い方はAPIリファレンス、The Bookの該当部分とその日語訳、Rustonomiconの該当部分をまず読むとよい。 この記事では、コンパイラがSizedをどう実装しているかという観点からまとめ直してみた。 Sizedとは何か Sizedは標準ライブラリで定義されているトレイトである。 pub trait Sized {} Sizedトレイトは次の2つの意味をもつようだ。 Sizedを実装する型は、全て同じバイト数である。C言語のsizeofに相当するstd::mem::size_of が使える。(Sizedでない

    RustのSizedとfatポインタ - 簡潔なQ
    koic
    koic 2022/04/12
  • Why is "&&" being used in closure arguments?

    koic
    koic 2022/04/06
  • Rustのturbofishを理解する | κeenのHappy Hacκing Blog

    このエントリはRustその3 Advent Calendar 20193日目に飛び入り参加しているエントリです。 Rustの型パラメータ指定の構文、通称ターボフィッシュ(turbofish)について。 Rustでジェネリクス関数は以下のように関数名に続いて <パラメータ名> で指定しますよね?

    Rustのturbofishを理解する | κeenのHappy Hacκing Blog
    koic
    koic 2022/04/04
  • rust-blog/posts/translations/jp/common-rust-lifetime-misconceptions.md at master · pretzelhammer/rust-blog

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    rust-blog/posts/translations/jp/common-rust-lifetime-misconceptions.md at master · pretzelhammer/rust-blog
    koic
    koic 2022/04/03
  • Rustコンパイラ組込みのlintについて調べる - 低レイヤ強くなりたい組込み屋さんのブログ

    はじめに Rustコンパイラであるrustcには組込みのlintがあります。 Rustlintツールでは、clippyが有名ですが、rustc組込みの方もソースコードの改善に役立ちます。 7月の技術書同人誌博覧会のネタ探しの一環だったのですが、思ったより世の中の役に立ちそうだったので、ドラフトを公開します。 原稿落とさなければ、「組込み / ベアメタルRustテクニック集」的な薄いを出す予定です。 ちなみにここに書いている内容は、全てThe rustc bookに書いてあります。 lint lintはソースコードをコンパイラより厳密なルールに則り、検査するためのツールです。 Rustコンパイラには、様々なlintルールが組み込まれています。 ソースコードをコンパイルする時、自動的にlintによる検査が行われます。 プロジェクトの運用ルールに合わせて、適切なlintルールを設定することで

    Rustコンパイラ組込みのlintについて調べる - 低レイヤ強くなりたい組込み屋さんのブログ
    koic
    koic 2022/04/03
  • LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ

    コンパイラを作ってみたいと思っていても、アセンブリ言語はよくわからない。 パーサーみたいなコードは書いたことがあるけれど、コード生成の処理はさっぱりだ。 実行ファイルをバイナリエディターで見るとかなにそれ怖い。 そんな私なのですが、LLVMに興味を持ち始めています。 SwiftRust、あるいはEmscriptenなど、近年注目されている言語やコンパイラ技術の中枢にはLLVMがあります。 アセンブリはよく分からなくてもLLVMを使いこなせるようになれば、マルチプラットフォームで実行ファイルを生成できる言語処理系を作るのではないか。 コンパイラ作ってみたいな、LLVMを使ってみようかなと思っている今日このごろです。 ところが、いざLLVMを勉強しようと思ってもどこから始めればいいかよく分かりませんでした。 マニュアルは巨大で読む気が起きないし、リファレンスを見てもさっぱりです。 雰囲気はわ

    LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ
    koic
    koic 2022/04/02
  • Rustのモジュールの使い方 2018 Edition版 | κeenのHappy Hacκing Blog

    このエントリーはRust Advent Calendar 20187日目の記事です。 κeenです。Rust 2018が来ましたね。最近業も副業(?)も大詰めで中々時間がとれずAdvent Calendarに遅刻してしまいました。 それはさておき、私はRustのモジュールの使い方を過去に書きました。 この記事は中々好評だったようですが、状況が変わりまして2018 Editionでモジュールが大幅に変更され、分かりやすくなりました。 巷に2018での変更点は多く喧伝されていますが2015との差分ばかりで、今からモジュールシステムを学ぶ方はまず複雑な2015を理解してから差分を読んで、簡単な2018を理解しないといけなくなっています。 そこで2018からはじめて学習する方向けにモジュールシステムの解説をしようと思います。 とりあえずサンプルプロジェクトを作ります。 $ cargo new m

    Rustのモジュールの使い方 2018 Edition版 | κeenのHappy Hacκing Blog
    koic
    koic 2022/04/02