タグ

ASTに関するraimon49のブックマーク (20)

  • なぜSQLiteはバイトコードを使うのか

    以前にデータベースを自作しようとして、SQLiteのアーキテクチャを見てみたらVMだったことに疑問を感じ、それをツイートしたところ作者からリプをもらいました。 作者いわく、次のような背景があったとのことでした。 SQLiteを作った当初はデータベースエンジンのことをよく知らないがコンパイラのことをよく知っていた SQLデータベース・エンジンを書くという問題をコンパイラ構築の問題として扱うのは自然なことだった データベースエンジンのコアの部分をVMにするという発想がまったくなかったので、どんなメリットがあるのか?と気になっていました。 それを作者に聞いたら、詳細な説明ページを作ってくれました。 個人的にVMにしたことで、評価&実行のパフォーマンスは多少良くなると思うが、データベースエンジンのパフォーマンスにそれほど寄与していないんじゃないかな?って思ったりしました。 記事はそのページについ

    なぜSQLiteはバイトコードを使うのか
  • データベースの仕組み(アーキテクチャ)をざっくり理解する

    フリーランスエンジニアをしているrevenue-hackです! 普段はGo言語でバックエンドを中心にやっています〜 ↓登壇したときの資料です! より図を入れて詳しく書いております! 今回はデータベースの特にRDBの仕組み(アーキテクチャ)についてざっくり理解して、なにかに役立てようぜ〜 というような内容になります。 ↓記事はこちらに移しました!↓

    データベースの仕組み(アーキテクチャ)をざっくり理解する
  • Rust AST 入門

    これは、簡単な Rust の AST をざっと読めるようになる、もしくは該当のドキュメントを読めるようになる、といったことを目的としたものである。入門といっても網羅的なものではなく、雰囲気を掴んでほしいという意味合いで書いたものであって細かいところまでは説明しないつもりである。なお Rust には型などより多くの情報も含む HIR などいくつかの AST があるが、ここではコンパイル時に最初に作られる AST についてのみふれる。 プログラミング言語で一般的に述べられる AST 自体についてはここでは説明しないので他を参照するとよい。有用そうなもののリンクは以下の通りである。 ASTs - What are they and how to use them Crafting Interpreters また、AST を確認するというと AST explorer も有用だが、 AST expl

    Rust AST 入門
  • 現代フロントエンドに欠かせないwebpackとBabelを理解しよう

    Transcript ݱ୅ϑϩϯτΤϯυʹ͔ܽͤͳ͍
 XFCQBDLͱ#BCFMΛཧղ͠Α͏ʂ� CVJMEFSTDPO�UPLZP����� /BNF� ����4BLJUP�.VLBJ� 5XJUUFS
 ����!@@TBLJUP@@� $PNQBOZ� ����$ZCP[V�JOD�
 ����'SPOUFOE�&YQFSU�5FBN "CPVU�NF w#BCFMͷલʹݱࡏͷ+BWB4DSJQUʹ͍ͭͯ� w#BCFMʹ͍ͭͯ� wXFCQBDLʹ͍ͭͯ� wXFCQBDL #BCFMͰ಺෦࣮૷Λ௥͍ͬͯ͘ "HFOEB #BCFMͷલʹݱࡏͷ+BWB4DSJQUʹ͍ͭͯ &$."4DSJQUͱ5$�� w+BWB4DSJQUʹ͸&$."4DSJQUͱ͍͏ݴޠ࢓༷͕͋Δ� w͜ͷݴޠ࢓༷ΛܾΊ͍ͯΔҕһձ͕5$��
 5FDIOJDBM�$PNNJUUFF��� � w&4��

    現代フロントエンドに欠かせないwebpackとBabelを理解しよう
  • 15. CERNでのソフトウェアエンジニアリング

    CERNでソフトウェアエンジニアとして仕事をしている高橋祐花さんと、CERNでの話やスイスでの暮らし、外国語、フェミニズムなどについて話をしました。出演者: 高橋祐花 (@00_)、Rui Ueyama (@rui314) https://turingcomplete.fm/15 ハッシュタグは#tcfmです。 TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。 イントロ (0:00) CERNはWWWが発明された場所 (1:25) Patreonを使ってサポーター制度を導入 (2:50) CERNの粒子加速器が生成するペタバイトレベルのデータを処理している (8:27) TensorFlowを使って太陽系外の惑星を発見する話 (14:39) C++で大量のデータを処理 (1

    15. CERNでのソフトウェアエンジニアリング
  • lltsvでLTSV形式のデータをサクサクパースしよう | メルカリエンジニアリング

    LTSVはLabeled Tab-separated Valuesの略で、コロンで区切られたラベルと値の組み合わせ(key:value)をタブ区切りで表現したフォーマットです。 主にログデータのフォーマットとしての利用が想定されています。 uri:/upload status:400 size:13599 reqtime:0.280 apptime:0.150 uri:/downalod status:200 size:12812 reqtime:0.330 apptime:0.210 uri:/item/new status:200 size:29830 reqtime:0.050 apptime:0.050 uri:/item/fav status:200 size:33123 reqtime:0.100 apptime:0.099 uri:/top status:301 size:1

    lltsvでLTSV形式のデータをサクサクパースしよう | メルカリエンジニアリング
    raimon49
    raimon49 2018/12/22
    lltsvっていう名前がllを連想させてセンスある。
  • 20 万行超のコードベースをテストせずにリファクタリングリリースした話 - MonotaRO Tech Blog

    こんにちは、鈴木です。 20 万行を超えるアプリケーションのほとんど全てのソースコードを変更し、テストを行わずに番リリースしました。 「それってテストいるんですか?」問題 いきなりですが質問です。ソースコードを 1 バイトでも変更したら再テストする必要はあるでしょうか。「絶対に再テストすべき」という方もいれば、「状況によるしケースバイケースかな・・」という方もいらっしゃると思います。 ケースバイケースと考える方は、どのような場合にテストを行わなくて良いと考えるでしょうか。例えば、コメント内の誤字を修正した場合はどうでしょうか。ローカル変数の名前を typo していたので修正した場合、デッドコードを削除した場合はどうでしょうか。 こんなことがありました ある日、Python のソースコードを眺めていると、「# $Id」のような CVS 時代のコメントがありました。いまやソースコードは Gi

    20 万行超のコードベースをテストせずにリファクタリングリリースした話 - MonotaRO Tech Blog
    raimon49
    raimon49 2018/10/06
    >「AST が変化しない場合はテスト不要」という基準を作り、それを確認するための小さなツールを作成 / 頑固なレビュアーを納得させるための良いアプローチ。
  • PHPコードの解析をPhanからPHPStanに移行しようか検討しています - コネヒト開発者ブログ

    こんにちは、サーバーサイドのお仕事してます金城(@o0h_)です。 7月は「波よ聞いてくれ」と「ベアゲルター」が共に出るという、嬉しい事態でした。沙村作品は魅力的なキャラクターがいつも多いですが、その中でも女性キャラの強さ・芯の太さに圧倒されます。 [まとめ買い] ベアゲルター さて、今回はタイトルの通り「(静的)解析どうするの」という問題について少し考えている事をまとめてみます。 「Phan」か「PHPStan」か、どっちが良いでしょうか? 現在コネヒトではPhanを導入してコードをチェックしています。 「道具で安心感を得られる」のは最高なので、Phanもまた最高なのです。しかしながら、実際に日常的に回していく中で、いくつか気になっていることもあります。 実行に時間がかかる (プロダクトでは利用しない)php-astエクステンションが必要になる エラーが発生した時の原因箇所の特定が大変

    PHPコードの解析をPhanからPHPStanに移行しようか検討しています - コネヒト開発者ブログ
  • tslintでjQuery使うのやめましょうって怒る - hitode909の日記

    TypeScriptのリファクタリングに興味がでてきていろいろ調べていた.ASTでリファクタリングやってる知見ないですかって聞いたら,tslint --fixの仕組みに乗っかると楽ではって意見をもらって,やってみたら簡単だった. ふだん触ってるプロダクトではjQueryだんだん脱出しようと思っていて,JQuery型で受け取ったりプロパティとしてJQuery型で保持していたら怒るのを作ってみた.HTLElementにしましょう!って案内してくれる.JQuery型で受けてるのをHTMLElementにすると当然動かなくなり,コーディング規約にあわせてfixするとかができなくなるので不便.次はtscodeshiftで書き換えるのをやってみようと思う. gist.github.com よく寝た!!!!!!!!と起きたら2時半だった— 趣味はマリンスポーツです (@hitode909) 2018年4

    tslintでjQuery使うのやめましょうって怒る - hitode909の日記
  • Swift コンパイラのアーキテクチャ - Qiita

    Swift のコンパイラの開発に手を出してみたい方向けに、コンパイラの全体構成がどうなっているのかを、大まかに説明します。コードリーディングの参考になればいいなと。 Swift コンパイラの構成 僕はプログラムを把握するときに、エントリポイント(最初に実行される箇所、 main 関数)が分からないとすごく不安になります。逆に言えば、エントリポイントさえ分かれば、そこから処理を追っていけば良いのでその後の理解が非常に楽になります。なので最初は swift コマンドのエントリポイントから。 注意: このエントリで、 GitHub にある実際のコードにリンクを張っていますが、行番号は時と共に変わってしまうので、ファイルまでのリンクになっています。関数名などで検索してください。 ドライバー (Driver) swift コマンドですが、実体は tools/driver です。 tools/driv

    Swift コンパイラのアーキテクチャ - Qiita
  • Go 言語の値レシーバとポインタレシーバ

    「レシーバ」とはGo 言語はある種のオブジェクト指向プログラミング (OOP) 言語であり、 OOP 言語の慣例通り、メソッドを呼び出される対象のことを「レシーバ」と呼びます。 ちなみになぜ「レシーバ」と呼ぶのかというと、昔の OOP 言語の文脈ではメソッド呼び出しのことを「メッセージの送信」と言い、メソッドを呼び出される側は「メッセージの受信側」だからです。 「値レシーバ」と「ポインタレシーバ」Go 言語では「値」と「ポインタ」が明示的に区別されているため、たとえばある構造体に対してメソッドを定義する場合でも、「値型」に対する定義なのか「ポインタ型」に対する定義なのかはっきりと区別しなければなりません。それぞれについて簡単に説明します。 値レシーバ「値型」に対してメソッド定義されたものが「値レシーバ」です。 Go 言語では構造体は値なので、以下の例では Person という値型に対して

    raimon49
    raimon49 2017/01/24
    いわゆるselfアクセスしてフィールド変更したい場合はポインタレシーバでメソッドを宣言する。nil pointerでも呼び出し可能な点に注意。
  • GoogleがGoによるPython実装、Grumpyを発表

    Googleが既存の社内のPythonコードをGoで実行するためのPython実装を公開している。 Google Open Source Blog: Grumpy: Go running Python! google/grumpy: Grumpy is a Python to Go source code transcompiler and runtime. Googleの発表によれば、YouTubeのフロントエンドサーバーとYouTube APIはほとんどPythonで書かれているという。現在、YouTubeのフロントエンドはCPython 2.7で実行されているが、CPythonの制約により効率化には限界があるのだという。 GrumpyはPython 2.7のコードをGoのコードに変換するツールgrumpcの実装だ。grumpcPythonで実装されていて、astモジュールでPyth

  • try! Swift オープンソースSwiftへの貢献 #tryswiftconf Day3-10 - niwatakoのはてなブログ

    Jesse Squires InstagramでiOSアプリを開発しているソフトウェアエンジニアです。jessesquires.comにてSwiftやObjective-Cに関するブログを書いています。Github上で多くのオープンソースプロジェクトにコントリビュートしています。走ることと新しいことを学ぶのが好きで、主にブラックコーヒーとブラックメタルによって元気になります。 twitter.com Swiftに貢献したいですか?どのように、また、どこから取り掛かればいいか分かりませんか?パッと見て圧倒されるかもしれません。この講演では、さまざまなSwiftプロジェクトがどのように関係しているかを見て、貢献し始めるために必要なスキルを議論し、あなたが行うであろう最初の変更が承認されるためのベストな方法を学びます。 セッションビデオ公開済み DIAMONDスポンサーのRealm様より、セッ

    try! Swift オープンソースSwiftへの貢献 #tryswiftconf Day3-10 - niwatakoのはてなブログ
  • makeのくびき - saneyuki_s log

    gulpって何だよ、makeでいいじゃん(要約」論争について、私もちょっと一講釈をぶってみることにする。あれやこれやといった実利的な話をするつもりはない。そういうものは既に書いた人がいるのでそちらを参照のこと。 Gruntの思い出 Gruntは、私の印象で言えば車輪の再発明の失敗作のようなもので、タスク間の依存関係が破滅への一途をたどり管理不能に至るなど、宣言型の負の側面が強く出てしまった。しかし、設定は当にサンプルコードのコピペだけで組み立てられるので、JSが不得手なデザイナーなどには非常に受けが良かったという点は忘れてはならない。ちょうど、html5ブームが格化して, Apache Antとかに慣れ親しんだJava(主にSIer)系の人が入ってきたタイミングにあった道具かつ、Yeomanファミリーにも組み込まれており、それでいて簡単な事をやらせるには悪くはない具合のシンプルさ、

    makeのくびき - saneyuki_s log
    raimon49
    raimon49 2016/01/17
    「何でGruntがそれなりに普及していたか?」が整理されていて読み応えがある。誰もがコマンドラインファーストな国に住んでいる訳じゃない。
  • Swiftコンパイラの構造と基盤テクニック - Qiita

    はじめに Swiftのソースコードが公開されてから1週間以上が経ちましたが、意外にもまだSwiftコンパイラの構造を解説した日語記事が少ないので、書いてみることにしました。 SwiftコンパイラはC++で書かれていますが、適切なモジュール化とコーディングスタイルの統一により、とても読みやすいものになっています。 ざっくりとしか解説しませんのでコミッターになれるほど詳細な仕様まではつかめませんが、今後Swiftの仕様がわからなくてソースコードを参照するときの参考や、そもそもコンパイラの構造自体に興味を持っている方の助けになれればと思います。 自分自身Swiftのコミッターというわけではなく、単に少しコンパイラについて学んだことがあるSwift好きという程度ですので、間違っている箇所などあればどしどしご指摘ください。 注意事項 この記事で対象としているソースコードのリビジョンは公開時のもの(

    Swiftコンパイラの構造と基盤テクニック - Qiita
  • Visual Basicの全角キーワード

    Visual Basicでは、BASIC時代からずっとですが、アルファベットの大文字と小文字を区別しないことは皆さまもご存知かと思われます。 で、実は、大文字小文字だけじゃなくて、半角全角も区別しないという。以下のコード、コンパイルして実行することもできるし、Visual Studio上ではちゃんと、Moduleとかの部分が青色(キーワードの色)で表示されます。 Module Module1 Sub Main() Dim x = 10 Console.WriteLine(x) End Sub End Module まあ、今のVisual Studio上では、全角文字でキーワードを打つと、自動補完で打ったそばから半角CamelCaseに変換されていくんで、自動補完に直されるたびにCtrl+Zで元に戻したりしないとこのソースコードを作れなかったりはするんですが。 もちろんRoslynでもいまだ

    Visual Basicの全角キーワード
  • 次世代Webカンファレンスのstandardizationで話してきた

    te = @teppeis wada = @t_wada con = @constellation vv = @vvakame 今JavaScript書く時に何で書いてます? vv = TypeScript + Babel? con = C++ばかり書いて テストはJavaScriptで書いてるのでES6 te = 趣味はES6、仕事はIE8で動くように書いてる IE8は来年1月に終わる wada = 趣味はES6+Babel、仕事はIE8 ES6の印象 vv = hoistingとか面倒な問題が減った wada = Arrow Function、Template Stringなどが便利 IE8対応 IE8対応してるひと = 半分 Babel、BrowserifyとかデフォルトのターゲットはES5以上 予約語の問題とかES3だと動かないことがある stefanpenner/es3-safe

    次世代Webカンファレンスのstandardizationで話してきた
  • 夏のインターン講義「1営業日で書くJavaScriptコンパイラ」の設計と実装 - クックパッド開発者ブログ

    今年、クックパッドでは夏のインターンと題して20名弱のインターンを受け入れました。 このインターンは前半と後半に大きく分かれており、 後半が社員に混じって業務をするいわゆる普通のインターンで、 前半は7日間にわたってプログラミング関連の講義を受けるという仕組みです。 わたし(青木)はその前半の過程において、「プログラミングパラダイム」という 1 日の講義を担当し、 JavaScriptの処理系を書くという、ツッコミどころの多い課題を実施しました。 稿では、その講義を開発する際に考慮したこと、特に難易度調整についてお話しします。 また講義のために開発したJavaScript処理系「JetSpider」についても軽くふれます。 ▼講義資料 Cookpad Summer Intern 2015 - Programming Paradigm from Minero Aoki JetSpiderコ

    夏のインターン講義「1営業日で書くJavaScriptコンパイラ」の設計と実装 - クックパッド開発者ブログ
  • 17. The power-assert Goes To The Next Scene | CodeLunch.fm

    Technical topics that software engineers talk about at lunch.

    17. The power-assert Goes To The Next Scene | CodeLunch.fm
  • 16. The power-assert Leaves From Moratorium | CodeLunch.fm

    Technical topics that software engineers talk about at lunch.

    16. The power-assert Leaves From Moratorium | CodeLunch.fm
    raimon49
    raimon49 2015/09/09
    APIデザイン シンプルさとイージーさ
  • 1