タグ

astに関するmanabouのブックマーク (43)

  • Graydon HoareのCompiler講義資料が面白かった話 - Arantium Maestum

    Graydon Hoareが2019年にカナダのブリティッシュ・コロンビア大学でコンパイラ関連のゲスト講義した時の資料21 compilers and 3 orders of magnitude in 60 minutes - a wander through a weird landscape to the heart of compilationを読んだら大変面白かったのでメモ。 作者 Graydon HoareはMozillaでRustを開発したことで有名。その後Rustの開発もMozillaも離れて(というかRustの開発からは2013年に離れたようだ)、一時期AppleSwift開発チームに所属していたらしい。(ソース:Reddit: I wonder, why Graydon Hoare, the author of Rust, stopped contributing in

    Graydon HoareのCompiler講義資料が面白かった話 - Arantium Maestum
  • Goの型から静的解析でTypeScriptを生成したい

    export type Param = { action: string; created_at: string; status: "Failure" | "OK"; version: number; } というinterfaceを生成してくれるライブラリです。jsonタグを見ます。 つまるところ、OpenAPIgRPCを利用すればGoTypeScriptで共通の型を利用できますが、それをもっと手軽にGoの型からTypeScriptのinterfaceを生成できたら便利そうだな、というのが開発した理由です。 類似のライブラリはあったのですが型解析のために一度コンパイルし、reflectを利用した型解析をしており一時ファイルを生成していました。そのためあまり使い勝手が良くなく、また実行に時間がかかるなどの問題があったため独自で作ることにしました。 Goの静的解析 Goでは静的解析ツールを

    Goの型から静的解析でTypeScriptを生成したい
  • TypeScriptリポジトリの歩き方 - Qiita

    * こちらはオプトテクノロジーズ社内勉強会での発表資料になります TypeScript リポジトリの歩き方 TypeScript のコードリーディングのはじめの一歩としてどこから手を付ければ良いのかを知る手助けになればと思いこさえました 目次 コードベースの概観についてドキュメントから知る 実装のエントリポイントから読み進める 動かして試す 自分が実際にコードリーディングしたときの例 コードベースの概観についてドキュメントから知る まず TypeScript の内部アーキテクチャの概観について知っていきましょう TypeScript の wiki が大変参考になります Architectural Overview: コード上のコンポーネントを図示しつつ説明している Layer Overview や全体で利用されているデータ構造を説明する Data Structures といった、実装を理解

    TypeScriptリポジトリの歩き方 - Qiita
  • 大統一 Node ツールチェイン Rome の野望 現状の実装

    つい先日 beta リリースされたフロントエンドのツールチェインの Rome について、その思想とコードを読んだ結果の現状について。 Rome Frontend Toolchain この記事は公式ドキュメント以外にもソースを読んで得られた undocumented な部分も含んでいるので、すぐ古くなる。その前提で読むように。 問題の認識とその解決手段 フロントエンドの最適化は実行前のプリプロセスに、エコシステムの開発リソースの多くが当てられている。Node のツールチェインが発達するにつれて、自前の パーサ+AST 定義を持つ実装が増えていった歴史がある。 acorn(estree) babel prettier typescript terser それぞれのツールの生成する AST はそのツールの都合で微妙に/もしくは大幅に定義がずれている。typescript に至っては完全に別物。こ

    大統一 Node ツールチェイン Rome の野望 現状の実装
  • JavaScript AST入門【委託】 - 達人出版会

    JavaScriptのソースコードを扱いやすいように加工されたデータ構造であるASTとそのツールエコシステムの解説書です。トランスパイルなども一般的なJavaScriptでは、ASTを自由に操作することでそのエコシステムを使いこなし、ソースコードの解析・加工が簡単に行うことができます。 関連サイト書の関連ページが用意されています。 NextPublishingオフィシャルWebサイト内容紹介JavaScriptのASTを理解して開発生産性をUP!書はJavaScriptのソースコードを扱いやすいように加工されたデータ構造であるASTとそのツールエコシステムの解説書です。他の言語と異なりトランスパイルなども一般的なJavaScriptでは、ASTを自由に操作することでそのエコシステムを使いこなし、ソースコードの解析・加工が簡単に行うことができます。JavaScriptのASTを理解して、

    JavaScript AST入門【委託】 - 達人出版会
  • 「Go言語でつくるインタプリタ」をRustで実装しました。 - Sansan Tech Blog

    はじめに こんにちは。DSOC 研究開発部 Architect Group Data Direction Teamの有山です。 気温が上がってきて夏っぽくなってきましたね。毎年夏用にTシャツを集めるのが趣味なのですが、今年は個人的にブームが再燃してるGOODENOUGH*1を古着で集めようかなと考えています。 ところで皆さんは普段何の言語を書いていますか? Data Direction Groupでは主にPythonを使用していますが、ある時から四則演算の計算順序やif文の条件分岐はどうして正しく動くのだろうと疑問に思うようになり、実際に正しく動かしているシステムを理解してみたくなりました。色々検討した結果、「Go言語で作るインタプリタ」というが内容的にも分量的にもちょうどよく、これを読み進めることにしました。 初めは読みながらコードを写経していましたが、複雑なロジックについては理解した

    「Go言語でつくるインタプリタ」をRustで実装しました。 - Sansan Tech Blog
  • TypeScriptのcompiler APIをいじる - asterisc

    はじめに これを作っているときに、もともとのagreedとswaggerの型の帳尻を合わせるために、TypeScriptのASTをいじっていろいろやりました。 そのときに調べたことなどをメモ代わりにまとめます。この内容は調べたこと+僕独自の解釈が入っている可能性があり、正確ではないかもしれませんが、ご了承ください。 TypeScript Compiler API 何ができるようになるか TypeScript Compilerを使うことにより、TypeScriptのASTの解析や編集などを行うことができます。linterや、静的解析、自動生成系のツールを作る際によく使う機能です。 例えば前述のagreed-typedではTypeScriptの型定義やコメントをASTを解析することにより抜き出し、そこからOpenAPI2.0(Swagger)を生成しています。 実際のアプリケーションコードを書

    TypeScriptのcompiler APIをいじる - asterisc
  • Ruby中間表現のバイナリ出力を改善する - クックパッド開発者ブログ

    Ruby 開発チームに4週間インターン生として参加いたしました、永山 (GitHub: NagayamaRyoga) です。 私は「Ruby中間表現のバイナリ出力の改善」という課題に取り組み、Railsアプリケーションのコンパイルキャッシュのサイズを70%以上削減することに成功しました。以下ではこの課題の概要とその成果について述べたいと思います。 InstructionSequenceの概要 まず、RubyVM 内で実行される命令の中間表現、InstructionSequence (以下 ISeq と省略) について簡単に説明します。 通常の Ruby プログラムは、以下のような手順で実行されます。 ソースコードを構文解析し、抽象構文木を作る。 抽象構文木をコンパイルして、ISeq を作る。 RubyVM (YARV) で ISeq を解釈し、実行する。 ISeq は、このように Ruby

    Ruby中間表現のバイナリ出力を改善する - クックパッド開発者ブログ
  • Prettier のしくみ

    2019年7月30日のginzajsのLT資料です

    Prettier のしくみ
  • Google の SQL parser/analyzer の ZetaSQL とは何であるか

    2019年4月に GoogleSQL parser/analyzer の ZetaSQL が公開されました。 現在 BigQuery Standard SQL や Cloud Spanner で実装されている SQL 方言であり、 Cloud Next 2019 で BigQuery UI から Cloud Dataflow で実行されるパイプラインを記述できる機能として発表された Cloud Dataflow SQL にも使われることがツイートからも見て取れます。 ZetaSQL については Google の外の人がまともに言及しているのを見たことがなく、聞いたことがないか様子見という人が多いと思うので分かっていることを書いていきます。 既存の文献から見る素性ZetaSQLSpannerSQL 実装について書かれた Spanner: Becoming a SQL Sys

  • How a Go Program Compiles down to Machine Code

    Here at Stream, we use Go extensively, and it has drastically improved our productivity. We have also found that by using Go, the speed is outstanding and since we started using it, we have implemented mission-critical portions of our stack, such as our in-house storage engine powered by gRPC, Raft, and RocksDB. Today we are going to look at the Go 1.11 compiler and how it compiles down your Go so

    How a Go Program Compiles down to Machine Code
  • ASTを使ってSQLAlchemyのテーブル定義コードを生成する - MonotaRO Tech Blog

    はじめに こんにちは、 whosaysni です。 MonotaROでは開発インフラを整備するチームで働いています(この記事書いてる間にデータマーケティング部門に転属になりました)。 最近のちょっとしたツールづくりの話題をお伝えしたいと思います。 簡単にやったことをまとめると SQLAlchemyのテーブル定義を自動生成するプログラムを書いた プログラムを生成するのに抽象構文木を使った コードを整形するのに yapf を使った です。では始めましょう。 課題: Table() 呼び出しコードを生成する SQLAlchemy といえば、様々な種類の DB API に対応していて、Python コードから SQL の構文オブジェクト (SQL式) を操作して SQL を生成・実行でき、 ORM (Object-Relational Mapper) のインタフェースも備えている、データベース操作

    ASTを使ってSQLAlchemyのテーブル定義コードを生成する - MonotaRO Tech Blog
  • AST メタプログラミング | try! Swift Tokyo 2018 Day1-15 - niwatakoのはてなブログ

    Swift にはランタイムにおける動的な振る舞いがほとんどありません。コード注入の実現方法や、AST を用いたアスペクト指向プログラミングについてお話します。 AST メタプログラミング こんにちは、フリーランスでデベロッパーです。メタプログラミングの手法の話をしたいと思います。 メタプログラミングは興味深いと思います。 ASTとは、通常見られません。ですが開発ツールを通してみなさん利用していると思います。幾つか種類があります。違いを説明していきます。 ASTは抽象型シンタックスツリーのことです。プログラムの構造を表します。 Xcodeもリファクタリングのために使っています。 開発ツールの中でプロウグラマティックに扱うことを可能にしています メトリクス分析は典型例です。 これらはSourceKitがつくるASTを利用して実現しています ASTを入手する方法です それぞれ違うものが入手できま

    AST メタプログラミング | try! Swift Tokyo 2018 Day1-15 - niwatakoのはてなブログ
  • Ruby の NODE を GC から卒業させた - クックパッド開発者ブログ

    こんにちは、技術部のフルタイム Ruby コミッタの遠藤(@mametter)です。メリークリスマス。 Ruby 2.5.0 がリリース予定です。いろいろな改善が含まれています。クックパッドからの主な貢献としては、「trace 命令の削除による高速化」や「分岐・メソッドカバレッジの測定のサポート」などがあります。 ユーザから見える改善はいろいろと記事が出てくると思うので、この記事では、「抽象構文木のメモリ管理のリファクタリング」というあまりユーザから見えない改善を紹介してみます。 概要 Ruby のパーサは、NODE という内部的なオブジェクトで構成された抽象構文木を生成します。2.4 までの NODE は GC に管理される普通のオブジェクトでしたが、2.5 からは GC の外で管理するようになりました。これにより、3 つ嬉しいことがあります。 大きなコードのパースが速くなりました

    Ruby の NODE を GC から卒業させた - クックパッド開発者ブログ
  • Speee Cafe Meetup #07 に参加した - r7kamura - Medium

    TypeScript, Flow最近会社で開発している Web アプリケーションに TypeScript を導入したという話を聞いたので、その辺に居た人を交えて、Flow と TypeScript を比較するとどういう感想ですか、という会話をした。あまり詳しくないという人向けに説明しておくと、どちらのプロジェクトも、JavaScript の文法に手を加えて静的な型検査を行えるようにしようというものである。

    Speee Cafe Meetup #07 に参加した - r7kamura - Medium
  • スタンフォードのコンピュータサイエンスの授業の感想|Rui Ueyama

    いまのところ25単位分(マスター修了に必要な単位数の約半分)の授業を取ったので感想を時系列でちょっとまとめたい。昔のやつは記憶が曖昧になっているけど。 CS243 プログラムの解析と最適化 (2014Q4)要するにコンパイラの最適化の授業。前半はデータフロー解析とかでかなり実用的な感じがしたが、後半は行列計算の命令の依存関係を抽出してベクトル最適化とか、ItaniumみたいにレジスタのたくさんあるCPUでループアンローリングするみたいな話で、実際に役に立つのかはよくわからなかった。 と、そのときは思ったが、巨大な行列の計算はよくあるので、興味を持てなかった僕がダメだっただけかもしれない。 とにかく難易度が高かった。かなりがんばって夜中までやっていたつもりだけどもっと真剣に取り組むべきだったかもしれない。なにせこれが最初の授業だったのでレベル感がよくわかっていなかった。教授がドラゴンブックの

    スタンフォードのコンピュータサイエンスの授業の感想|Rui Ueyama
  • mattnさんのリファクタリングを読み解く - 生涯未熟

    現在絶賛開発中のkirimoriですが、なんとGolang界隈で有名なmattnさんにリファクタリングをして頂くという、とても嬉しい事態がありました✨ kirimoriについてはこちら↓ syossan.hateblo.jp リファクタリング前提でかなり雑に書いていたのですが、めちゃくちゃ良い感じにコードを直して頂けたので自分の勉強のために読み解いてみます👏 リファクタリング前 kirimoriは以下の機能を有しています。 initコマンドでkirimoriの設定ファイル(toml形式)を作成します addコマンドでコマンドライン引数に指定したプラグインを追加します removeコマンドでコマンドライン引数に指定したプラグインを削除します listコマンドでプラグインの一覧を表示します で、構成的には kirimori.go に全てのコマンドの処理をベタ書きにしてある感じになっております

    mattnさんのリファクタリングを読み解く - 生涯未熟
  • 二週間で簡単なインタープリタ言語を実装してみた (日記) - プログラムモグモグ

    私は昔から言語処理系に興味があり、自分で言語を作ることを夢見てきました。 しかし、いざ言語を実装しようと思って言語処理系に関するを読んでも何から手を付けていいか分からず、アセンブラもまともに読めないまま、数年が経ってしまいました。 大学時代は情報系ではなかったため、コンパイラの実験がある情報系の学科のカリキュラムを羨ましく思い、情報系の授業の教科書を手にとって見ても読む気が起きず、自分に作れるのは所詮、構文木をちょこっといじって変換するレベルのもの (例えばsjspなど) にとどまっていました。 そんな中、去年のRebuild.fmで、とても感銘を受けた回がありました。 LLVMのlinkerであるLLDを開発されているrui314さんの回です。 rebuild.fm セルフコンパイルできるC言語のコンパイラを実装するという話のなかで、インクリメンタルに開発する重要性について話をされてい

    二週間で簡単なインタープリタ言語を実装してみた (日記) - プログラムモグモグ
  • goパッケージで簡単に静的解析して世界を広げよう #golang - Qiita

    はじめに Goの標準パッケージには、goパッケージというものがあり、Goのソースコードを静的解析するのに便利な機能が提供されています。 goパッケージを使うと、以下のようなツールが簡単に作れます。 ソースコードを自動生成するツール ソースコードに対してlintやフォーマットを行うツール リファクタリングツール ソースコードから特定の何かを検索するツール ミニ言語の処理系 また、goパッケージを学ぶとコンパイラや言語処理系の知識も学べるので、他の標準パッケージとはまた少し違った知識を得ることができ、プログラミングの知識の幅が広がります。 しかしながら、goパッケージに関する日語の文献は少なく、学習しづらいのが辛いところです。 私もこれまでgoパッケージについて、Qiita上でいくつか記事を書いてきましたが、どの記事が何をするときに役に立つのか分かりづらくなっていました。 そこでこの記事では

    goパッケージで簡単に静的解析して世界を広げよう #golang - Qiita
  • gas のルールを見ていこうの会 - SideCI TechBlog

    あけましておめでとうございます。 id:Pocke です。 GAS(Go AST Scanner) という、Go言語用のセキュリティ検査ツールがあります。 この記事では、そのツールに含まれるルールを洗い出してみました。 記事のルールは2017/01/05現在のものになります。 https://github.com/GoASTScanner/gas/tree/d4f9b88cbf6b9f190a2425120c9cecc466ec363b コードナンバー GASの各ルールにはG101の様なコードナンバーが付与されています。 この番号にはそれぞれ以下のような意味があります。 G1xx : misc G2xx : injection G3xx : filesystem G4xx : crypto G5xx : blacklist では、このルールをひとつづつ見ていきましょう。 G101: Loo

    gas のルールを見ていこうの会 - SideCI TechBlog