タグ

ブックマーク / kawasin73.hatenablog.com (4)

  • Rust で SQLite を再実装した 2023 - kawasin73のブログ

    気合いで実装、どうもかわしんです。 この記事は Rust Advent Calendar 2023 の6日目 兼 情報検索・検索技術 Advent Calendar 2023 の 6 日目です。 RustSQLite をフルスクラッチで実装しています。 github.com なぜ SQLiteRust で再実装しようと思ったのかについては以前の記事で紹介しています。一言で言えば、誰も RustSQLite を書いている人がいなかったからやってみたのですが、そもそも SQLite が強すぎるということが再実装しているうちにわかってきて絶望しています。 kawasin73.hatenablog.com 4 ヶ月前にこの記事を書いたときは簡単な SELECT 文しか実行できなかったのですが、現時点では SELECT, INSERT, DELETE 文をサポートし、express

    Rust で SQLite を再実装した 2023 - kawasin73のブログ
  • SQLite のおもしろ仕様 (1) : データ型 - kawasin73のブログ

    型は型、どうもかわしんです。SQLite では型は絶対ではなく、あくまでも尊重です。信用しすぎると裏切られます。 最近 RustSQLite をフルスクラッチで再実装しています。 github.com なるべく家の SQLite と compatible にするために SQLite のドキュメントやコードを読んで挙動を理解しながら作っています。これを作ることになった経緯はこの記事で紹介していますが、その過程でいろいろ知らなかった面白い仕様や実装があったので紹介していきたいと思います。今回はその第一弾です。 kawasin73.hatenablog.com データ型と Type Affinity SQLite のドキュメントの中で、今の所一番面白いのがこれです。 www.sqlite.org まず、SQLite の内部的には 5 つのデータ型しかありません。 NULL INTEGER

    SQLite のおもしろ仕様 (1) : データ型 - kawasin73のブログ
  • 新しい技術を追わない - kawasin73のブログ

    時代はワークライフバランス。どうもかわしんです。 新しい技術は追わない。これは僕の個人的な方針です。別に最先端を追い続けることを否定するわけではありません。 ここでいう新しい技術は、web 界隈の新しいフレームワークとかライブラリとか SaaS とかです。 新しい技術を追い続けるのって大変 休日も時間を費やして勉強するのって大変ですよね。若いうちは Twitter で流れてくるいろんな技術記事を片っ端から貯めて通勤・通学時間に読んでましたが、もう 26 歳になって体力も時間も限られてきました。今はたまった記事も読まなくなったしそもそも興味を惹かれる記事が流れてこなくなって貯まらなくなりました。 必要ないものにモチベーションが湧かない 今勤めてる会社は社内ツールとか社内フレームワーク、ライブラリが溢れているガラパゴスな環境だから、勉強するモチベーションが湧かないです。使わないので。 あと、僕

    新しい技術を追わない - kawasin73のブログ
    lugecy
    lugecy 2023/08/06
  • Rust で SQLite を再実装している - kawasin73のブログ

    セキュリティを盾に一点突破。どうもかわしんです。最近 RustSQLite を実装してます。 以前の記事で HTTP Parser を Rust で実装しようとしたものの、すでに実装されていたので断念しましたが、いい題材を見つけました。SQLite です。開発中のリポジトリはこれです。 github.com 今の時点では、Read Only で1つの WHERE 句を持った SELECT 文しか処理できないですが、以下の機能を実装しています。 sqlite3 で生成された database ファイルの読み取り (cursor.rs, btree.rs, record.rs) SQL 文の解析 (token.rs, parser.rs) テーブルとインデックスのメタデータのパース (schema.rs) 動的なファイルの読み込み (pager.rs) SQL クエリとスキーマ情報を元に

    Rust で SQLite を再実装している - kawasin73のブログ
    lugecy
    lugecy 2023/08/06
  • 1