並び順

ブックマーク数

期間指定

  • から
  • まで

201 - 240 件 / 1100件

新着順 人気順

compilerの検索結果201 - 240 件 / 1100件

  • Python コードの高速化のアプローチ - Qiita

    はじめに こんにちは。こんばんはかもしれません。爲岡 (ためおか) と申します。 2020年4月から株式会社グロービスにて機械学習エンジニアとして働いています。 グロービスでは機械学習技術を利用したプロジェクトや、データ基盤の運用改善プロジェクトを担当しています。 機械学習技術を利用したシステムには様々なものがあると思いますが、 現状のグロービスにおいては、ユーザのリクエストに対して機械学習を行い、 すぐに結果を返す必要があるようなシステムは扱っておらず、 ある程度の時間をかけて学習、推定した結果を非同期にアプリケーションに連携するシステムのみを扱っています。 ゆえに、今のところは機械学習技術を利用したロジックを書くときに、速さを意識することはあまりありません。 一方で、空いている時間に競技プログラミングをやっていることもあり、 高速なコードについて考えたり、書いたりすることは個人的には好

      Python コードの高速化のアプローチ - Qiita
    • 「LLVM lld」「mold」が解決した、リンクが遅い問題 間違った思い込みの解消に必要だったのは“クレイジーな人”

      Blue Whale Systems株式会社の植山類氏は、「LLVM lld」「mold」が解決したプログラムのビルドの問題を例に、“大きな問題”を解決することについて話しました。全3回。 1個の本質的な問題を解いてしまうほうが細かいことを考えるよりも簡単 植山類氏:では始めます。本日、機会をいただいて講演をすることになった植山と申します。この講演の内容は「大きな問題のほうが小さな問題より解くのは簡単だ」というタイトルです。 どういう趣旨かというと、常に簡単だというわけではないのですが、いろいろな場面で、1個の本質的な問題をドッカンと解いてしまうほうが、いろいろな細かいことを考えるよりも簡単なことが多いという話です。 そういうソリューションが往々にして見逃されがちということがけっこうあって、そういうことにどうやって挑戦していくのかという気持ちの話を、僕がそういう大きな問題を解決した経験を踏

        「LLVM lld」「mold」が解決した、リンクが遅い問題 間違った思い込みの解消に必要だったのは“クレイジーな人”
      • TypeScriptで学ぶ代数的データ型

        代数的データ型とはなにか 代数的データ型とは、要素の個数の足し算と掛け算のアナロジーで語ることができる型のことを指すというふわっとしたコンセンサスがありますが、 厳密に「これが代数的データ型である」という定義はおそらくありません[1]。 また、代数的データ型はいわゆる関数型言語で実装されることが多い言語機能であり、 代数的データ型を重用するプログラミングスタイルは関数型の一派としてみなされる傾向がある[2]と思っています。 本記事では数学的な説明やアナロジーは用いず、なるべく具体的なコードを提示します。 そして、代数的データ型という言葉を「かつ」と「または」を表すことができる型として使います。 更に、「または」の型はコンパイラによって漏れなく徹底的にチェックされる必要があります。 詳細は後ほど説明します。 本記事の構成 まず、本記事における「代数的データ型」とはなにかを説明し、それをコード

          TypeScriptで学ぶ代数的データ型
        • Goコンパイラのお勉強(3)~配列の効率的な操作に関する最適化~ - Techtouch Developers Blog

          はじめに string と byte のキャスト最適化 1. map のキー指定のためのキャスト 2. string を byte 毎に処理するためのキャスト 3. 比較のためのキャスト memclr による配列ゼロクリア最適化 ガベージコレクションのマークスキャン回避 おわりに 参考文献 はじめに SRE の izzii (𝕏: @ahneahneahne) です。今回をもって「Go コンパイラのお勉強」と題した連載ブログが完結です!仕事の話とは直接関係がないネタだったので、書く内容に悩むということはなく気持ちよくかけました。さて、今回は「配列の効率的な利用」と題して golang/go CompilerOptimizations で扱われている残り物の紹介をしていきます笑 残り物とは言っても知ると知らないとでは Go コードの読み方が変わるかと思いますので、ぜひ! [第 1 回] G

            Goコンパイラのお勉強(3)~配列の効率的な操作に関する最適化~ - Techtouch Developers Blog
          • GitHub - carbon-language/carbon-lang: Carbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)

            Fast and works with C++ Performance matching C++ using LLVM, with low-level access to bits and addresses Interoperate with your existing C++ code, from inheritance to templates Fast and scalable builds that work with your existing C++ build systems Modern and evolving Solid language foundations that are easy to learn, especially if you have used C++ Easy, tool-based upgrades between Carbon version

              GitHub - carbon-language/carbon-lang: Carbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)
            • Javaのネイティブバイナリ生成可能なGraalVMの全機能が無料に、最適化コンパイラやG1ガベージコレクションを含む。本番環境でも利用可能

              Javaのネイティブバイナリ生成可能なGraalVMの全機能が無料に、最適化コンパイラやG1ガベージコレクションを含む。本番環境でも利用可能 オラクルは、同社がJavaディストリビューションとして提供しているGraalVMの新ライセンス「GraalVM Free Terms and Conditions」(GFTC)を発表し、あわせてこれまで有償版のGraalVMに含まれていた全ての機能を含む新ディストリビューション「Oracle GraalVM」の提供を開始しました。 GFTCでは、これまで有償版のGraalVMで提供してきた最適化コンパイラやG1ガベージコレクションなどを含むすべての機能が無料で利用可能となり、本番環境での利用も許諾されます。 Introducing a new distribution — Oracle @GraalVM! Use all the greatest G

                Javaのネイティブバイナリ生成可能なGraalVMの全機能が無料に、最適化コンパイラやG1ガベージコレクションを含む。本番環境でも利用可能
              • C++ コンパイル時「出力」 ~C++にできないことはない~ - Qiita

                これは、 C++ でコンパイル時に出力まで済ませようとした話です。 コンパイラは GCC に限ります。 はじめに もうすぐクリスマスですね! クリスマスにすることといえば……、 そう、コンパイル時処理ですね!! コンパイル時処理 C++ のコンパイル時処理は非常に強力で、様々なことがコンパイル時にできてしまいます。 普通はコンパイル時に決まる定数の計算に使われますが、これを悪用利用してコンパイル時に処理がすべて終わるようなものも書くことができます。 例として、コンパイル時 FizzBuzz を書いてみます。 #include <array> #include <string_view> #include <algorithm> #include <concepts> #include <iostream> template <std::unsigned_integral T> conste

                  C++ コンパイル時「出力」 ~C++にできないことはない~ - Qiita
                • Deep Tabnine - Tabnine Blog

                  Update (August 19): We’ve released Tabnine Local, which lets you run Deep Tabnine on your own machine. TL;DR: Tabnine is an autocompleter that helps you write code faster. We’re adding a deep learning model which significantly improves suggestion quality. You can see videos below and you can sign up for it here. There has been a lot of hype about deep learning in the past few years. Neural network

                    Deep Tabnine - Tabnine Blog
                  • RustがC++に速度で勝った話 - Fixstars Tech Blog /proc/cpuinfo

                    実行毎に数十msはブレるので、元のC++実装に対しての時間で比較して見ると、最適化オプションと配列境界チェックの除去が効いているように見えます。 そして先述の通り、RustとC++で実行順を入れ替えたり何度か実行しても、最終的に必ず(わずかに)Rustの方が時間短かったので、(2019/09/20:45追記)「計測誤差ではないの?」という問い合わせを内外から多数受けたので、(先述の通り経験的に計測誤差でないことは明らかではあるんですが経験者でない人向けの)分かりやすい証拠としてC++とRustそれぞれ単体を100回ずつ計測した結果を置いておきます。分布から分かる通り、検定などするまでもなく有意にRustの方が時間が短いことが分かります。また、C++側は元のナイーブな実装のままなので、高速化の余地(例えばrestrict)は十分にあります。ここでは「手軽にやった時に」を想定しており、その条件

                      RustがC++に速度で勝った話 - Fixstars Tech Blog /proc/cpuinfo
                    • 『週末レイトレーシング』を読んだ - a.out

                      以前からレイトレーシングをやってみたいと思っていたので、正月の連休を使って『週末レイトレーシング』という本を読んだ。 C++ を使ってフルスクラッチでレイトレーサーを実装していくという内容で、タイトルの通り週末にやりきれる分量にまとめられている。 tatsu-zine.com レイトレーシングのついでに Go の練習もしたかったので、C++ のコードを参考に Go で実装した。 最後まで実装できる確証もないまま始めてしまったが、interface など必要な機能が一通り揃っていたおかげで問題なく実装できた。 ただ、C++ と違って演算子のオーバーロードができないため、ベクトル計算の部分は記述量が多くなってしまい少しつらかった。 以下はレイトレーサーが実装されていく過程。 画像 説明 まずは画像の出力。この本では PPM 形式の画像を扱う。 中身はプレーンテキストなのでプログラムで簡単に生成

                        『週末レイトレーシング』を読んだ - a.out
                      • 新しくプログラミング言語を作る際に数値型をどうするべきか

                        この記事は、新しくプログラミング言語を設計する際に数値型をどうするべきかについて、私の持論をまとめたものです。 数の体系 JavaScript(BigInt以前)やLua(〜5.2)などは唯一の数値型が浮動小数点数型で、整数も実数も同じ「number」型で表現します。ミニマルな言語を作るのならそういう設計もアリかもしれませんが、ネイティブコンパイルも視野に入る実用的な言語を作るなら整数と実数を一緒くたにする設計はやめた方が良いと思います。 特に、JavaScriptにコンパイルする言語を作るからと言って、数値型の設計まで真似る必要はありません。 整数を浮動小数点数で表現すると、思わぬ性能低下の要因になったりします。最近(2023年2月)、次のツイートが話題になりました: これは正のゼロと負のゼロが値として区別され、正のゼロは内部的に整数扱いされるのに対し負のゼロはそうではないことによるもの

                          新しくプログラミング言語を作る際に数値型をどうするべきか
                        • mints: 5.7kb の TypeScript コンパイラを作った

                          世の中の TypeScript コンパイラが大きすぎるので作りました。 ここで試せます。 jsx と jsx pragma のサポートもしたので、 preact も動いています。 実装方針 ビルドサイズ第一 とにかく軽量に mints自体が他のコードをビルドするときの速度ではない点に注意 現状、まともなエラーレポートが出ない。エラーメッセージをインライン化するとビルドサイズが増えるため。 空白行と型情報を落とすだけ ES5 への変換や commonjs への変換は実装しない enum と constructor と jsx のみ transform する特殊対応をしている 真面目な構文解析をしてない 例えば 1+1*2 のような binary expression は結合順を解析してない。型を落とすだけなら不要 prettier でフォーマットされたコードはコンパイルできるのが目標(空白行

                            mints: 5.7kb の TypeScript コンパイラを作った
                          • プログラミング言語「Rust」が「C」「C++」の後継になるこれだけの根拠

                            関連キーワード Amazon Web Services | Microsoft(マイクロソフト) | アプリケーション開発 | プログラミング クラウドベンダー大手のAmazon Web Services(以下、AWS)が、プログラミング言語「Rust」のスポンサーになった。Rustは2015年に初の安定版が公開されて以来、「C++」の有力な代替として台頭している。「高性能で安定したアプリケーションを開発できる」「プログラマーの生産性を高められる」と評判だ。Google、Microsoft、Mozilla、Yelp、Dropbox、Cloudflare、AWSといった企業がシステム開発言語としてRustを採用している。 併せて読みたいお薦め記事 新たなプログラミング言語習得の壁 プログラミング学習で誰もがきっとつまずく「2つの障害」とは? 「プログラミング学習」が楽にならない“納得の理由”

                              プログラミング言語「Rust」が「C」「C++」の後継になるこれだけの根拠
                            • 競プロに便利な C++17 新機能まとめ - Qiita

                              AtCoder の言語アップデート で、C++17 対応コンパイラが使えるようになりました。やったー! この記事では、競技プログラミングに役立つ C++17 の新しい標準ライブラリ・言語機能を 16 個紹介します。 サンプルコードは、AtCoder の GCC 9.2.1 システムで動作を確認しています。 C++17 標準ライブラリ機能 1. 値を範囲内に収める std::clamp(x, min, max) 値 x を、min 以上、max 以下に収めてくれる関数です。 これまで std::max(std::min(x, max), min) と書いてたのが 1 つの関数で済みます。 #include <bits/stdc++.h> int main() { // 値を 0 以上 100 以下に収める std::cout << std::clamp(50, 0, 100) << '\n'

                                競プロに便利な C++17 新機能まとめ - Qiita
                              • Zigで簡単クロスコンパイル 2022 - k0kubun's blog

                                僕は以下の3つのツールを複数プラットフォーム向けにクロスコンパイルしてバイナリ配布しており、以下のように全て異なる言語で開発している。 Go: sqldef Rust: xremap mruby: mitamae クロスコンパイルに苦労している話をするとZigを使ってみたらいいんじゃないかと言われることがあり、周りでもZigが何となく流行り始めた気がするので、これらのツールに実際自分で使ってみてどうだったかという事例を紹介したい。 Zigとは Zigはそもそもプログラミング言語なのだが、C/C++とのinteropがやりやすい言語なようで、おそらくそれに必要でLLVMベースのC/C++ツールチェインが同梱されていて、しかもそれをDrop-In Replacement for GCC/Clangとして売りにしている。 僕はZig言語そのものにはそれほど興味はないのだが、クロスコンパイラとして

                                  Zigで簡単クロスコンパイル 2022 - k0kubun's blog
                                • コンパイラ - 共立出版

                                  本書は、プログラミングやコンピュータに興味を持つ者が、コンパイラの原理と構造、さらにその開発方法を基礎から理解するためのテキストである。 コンパイラの理解は、コンピュータの原理やプログラムの実行のしくみを理解する基礎である。そこで本書では、チューリングらによって確立された計算可能性の理論と万能計算機の構築方法を基礎として、コンパイラを含むプログラミング言語処理系の構築原理とその構造を解説する。これらの理解を基に、コンパイラ実現のための主要な基盤技術を、その原理とその背後にある考え方を含め習得することを目標とする。この考え方を理解することができれば、従来難解と受け止められているLR構文解析や多相型の型推論などの技術も見通し良く習得できる。 これらのコンパイラの原理と構造の理解に加えて、先端的言語コンパイラの開発方法を習得するために、実際に実行可能なインタープリタと抽象機械へのコンパイラを開発

                                    コンパイラ - 共立出版
                                  • GitHub - google/autocxx: Tool for safe ergonomic Rust/C++ interop driven from existing C++ headers

                                    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

                                      GitHub - google/autocxx: Tool for safe ergonomic Rust/C++ interop driven from existing C++ headers
                                    • プログラミング言語Rustになぜ注目するのか - Qiita

                                      この記事は NTTコムウェア AdventCalendar 2023 5日目の記事です。 自己紹介&動機 高鶴と申します。NTTコムウェア コーポレート革新本部で、プログラム設計~コーディング~ユニットテストにかかわる技術の社内標準化をやっております。 プログラムの静的な解析で早期にバグを発見・修正することで、後工程でのバグ対処コスト削減(ウォーターフォール開発の場合)や、技術的負債の早期解消(アジャイル開発の場合)を目指す、というのが私のチームの仕事の大きな一部となっています。 静的な解析で早期にバグを発見するツールには、オープンソースでも商用でも様々なものがあります。しかし、ソフトウェアの品質をより抜本的に良くしていこうと思うと、「プログラミング言語を何とかする」というところを考えたくなってきます。 Rustであれば、そのような期待に応えてくれるのではないかと期待し、調査・検証を始めま

                                        プログラミング言語Rustになぜ注目するのか - Qiita
                                      • C++23発表:新しいC++標準の登場

                                        8月6日、C++23はC++20の次の標準として発表されました。 C++23はC++の進化の一環として重要な役割を果たし、C++の機能を改善することを目的としています。 C++23はC++98やC++03ほどの大きな変更はなく、C++17の伝統に則ったものです。 本日、C++コミュニティが待望の次期C++標準、「C++23」を発表した。C++は長い歴史を誇るプログラミング言語であり、C++23はその進化の中でも特に重要な節目となる。C++23はC++98やC++11、C++20ほどの大規模な変更は見られないが、C++17の伝統を継承している。 C++の歴史的進化 C++は1980年代末にBjarne Stroustrup氏とMargaret A. Ellis氏によって執筆された「Annotated C++ Reference Manual (ARM)」によって誕生した。この書籍は当時多数存

                                          C++23発表:新しいC++標準の登場
                                        • 米国家安全保障局、CやC++からメモリー安全性の高いJavaなどへの移行を推奨

                                          印刷する メールで送る テキスト HTML 電子書籍 PDF ダウンロード テキスト 電子書籍 PDF クリップした記事をMyページから読むことができます 米国家安全保障局(NSA)は米国時間11月10日、ソフトウェアのメモリー安全性強化に向けたガイダンスを公開した。同機関はその中で開発者らに対して、ハッカーらによるリモートコード実行(RCE)をはじめとするさまざまな攻撃からコードを保護するために、C#やGo、Java、Ruby、Swift、Rustといったメモリー安全性の高い言語に移行するよう推奨している。 これらの言語の中では、Javaが企業向けアプリや「Android」アプリの開発で最も幅広く使用されている一方、Swiftは「iOS」アプリの開発環境に取り込まれている点もあって人気プログラミング言語の上位に入っている。また、RustはシステムプログラミングにおいてCやC++の代替とし

                                            米国家安全保障局、CやC++からメモリー安全性の高いJavaなどへの移行を推奨
                                          • 文字列から浮動小数点数に変換する、なるべく速く - toge's diary

                                            TL;DR 文字列から浮動小数点数に変換するならfastfloat使いましょう。 私が試せる環境で比較する限り、とても速いです。 細かいことが気になります C++でちょっとしたプログラムを書くときにいつも気になるのが 「文字列データから指定データ型への変換処理をどうやって効率的に書くか」 です。私だけかもしれませんが。 特に悩んでしまうのが「文字列→浮動小数点」です。 std::scanf, std::stringstreamを使うものは大抵すごく遅い std::strtodstd::stodはstd::stringへの変換が入るので避けたい std::from_charsは(libstdc++が)浮動小数点型に対応していない boost::sprit::qiが何故か速いのだけれどこのためにboost::sprit使うのは重い と色々制約が多いのです。どうにかならないものか。 fast_f

                                              文字列から浮動小数点数に変換する、なるべく速く - toge's diary
                                            • 自作プログラミング言語と WebAssembly コンパイラ

                                              Photo by Lukas Tennie from unsplashはじめにこのエントリでは、僕が趣味で作っている PicoML という自作プログラミング言語の話を書こうと思う。 作ってから半年くらい経っているのだけれど、如何せん自作言語という無用の長物であり、登壇などでコイツの話をすることもないため、ある種の供養みたいなものだと思ってもらって構わない。 PicoML の概要まずは実装した言語の紹介から。ざっくり以下の特徴を備えた言語である。 ML ベースの文法による関数型言語単純 let 多相型推論による型チェックCLI として、Node.js 上での即時評価器(REPL)と WebAssembly をターゲットにしたコンパイラの双方を提供REPL やコンパイラの実装は TypeScript で行っている。自分の勉強が主目的であったため、REPL やコンパイラの CLI を動作させるの

                                                自作プログラミング言語と WebAssembly コンパイラ
                                              • Performance comparison: counting words in Python, Go, C++, C, AWK, Forth, and Rust

                                                Performance comparison: counting words in Python, Go, C++, C, AWK, Forth, and Rust March 2021 Summary: I describe a simple interview problem (counting frequencies of unique words), solve it in various languages, and compare performance across them. For each language, I’ve included a simple, idiomatic solution as well as a more optimized approach via profiling. Go to: Constraints | Python Go C++ C

                                                • C++コンパイラはあなたよりも良いコードを書く - Qiita

                                                  最適化 皆さんご存じの通りC++という言語は速度しか取り柄がありません。複雑怪奇な構文、異常量のコンパイルエラー、何が起きるかわからない未定義動作たち、、、それでもなお私たちがC++を使い続けるのは、そう、極めて速いからです。ちょっと前に流行ったD言語や最近流行りのRustが速いという噂ですが、結局ほとんどの場面で速度においてC++に勝ててはいません。個人的な偏見ですがC++のように速度のみを重視し、安全性を捨てない限りRustに未来はないでしょう。まあ、人から聞いた噂によるとRustの標準ライブラリの中身はunsafeなコードが敷き詰められているらしく、なかなか速いようですが。いずれRustが廃れてUnsafe Rustの方が人気が出たりするかもしれませんね。とりあえず、最も速度面で優れている言語はC++といっても過言ではないでしょう。 そして、その圧倒的な速度を支えるのが何といってもC

                                                    C++コンパイラはあなたよりも良いコードを書く - Qiita
                                                  • 2023年に特にお世話になったC++ライブラリ8選 - Qiita

                                                    たぶん2023年一番お世話になったライブラリです。 2022年まではsimdjsonをよく使っていたのですが、新規プロジェクトはGlazeばかり使っています。 開発が活発だし、ISSUEへの対応が速いのもありがたいです。 良い点 SIMDを利用していないのにsimdjsonやyyjsonと遜色ない速度で動作する 構造体やクラスだけでなくSTLコンテナもJSONとの直接読み書きができる 中間データに独自バイナリ形式を利用してさらに高速化できる いまいちな点 長い文字列が多いJSONデータの読み込みではSIMDを使っているライブラリに対して不利になる 最後のフィールドのカンマやコメントの読み込みに対応していない ストリーム的な処理はない(と思う) 代替ライブラリ 似たようなアプローチでSIMDを使ってさらに速いJsonifierというライブラリがあります。 純粋な速度を求める場合にはこちらを使

                                                      2023年に特にお世話になったC++ライブラリ8選 - Qiita
                                                    • SEC BOOKS:ESCR C++ Ver. 2.0:【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C++言語版] Ver. 2.0:IPA 独立行政法人 情報処理推進機構

                                                      HOME社会基盤センター報告書・書籍・ツール・教材書籍SEC BOOKS:ESCR C++ Ver. 2.0:【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C++言語版] Ver. 2.0 SEC BOOKS:ESCR C++ Ver. 2.0:【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C++言語版] Ver. 2.0

                                                      • ついに実現!実用的なC++20コンパイル時出力 - Qiita

                                                        はじめに 早いもので、今年ももう大晦日です。 大晦日といえば、やることは1つです。 そう、コンパイル時処理ですね!! コンパイル時出力 C++ のコンパイル時処理は非常に強力で、様々なことがコンパイル時にできます。 入力に依存しない計算なら、大抵コンパイル時にしてしまうことができます。 しかし、その結果の出力については実行時に行う必要があり、本当にコンパイル時に処理できているのか分かりにくくなってしまうこともあります。 そこで、なんかこういろいろ頑張ってゴリ押すことで、制限はありますがコンパイル時に出力することができます。 先日公開した記事では、そんなコンパイル時出力について書いています。 コンパイル時出力の改良 この記事の目的は、コンパイル時出力の改良です。 現在のコンパイル時出力は次のような問題点があり、使いやすくはありません。 出力の前後に余計な出力(はみ出たエラーメッセージ)がある

                                                          ついに実現!実用的なC++20コンパイル時出力 - Qiita
                                                        • TypeScript Compiler APIを使って型を中心に実装を自動生成する - ドワンゴ教育サービス開発者ブログ

                                                          この記事は、ドワンゴアドベントカレンダー2020の10日目の記事です。 qiita.com はじめに ベルリシア(@berlysia) という名前で活動しています。Webが好きです。ドワンゴでは、N予備校をはじめとする教育事業のWebフロントエンド開発をしています。 この記事では、Webフロントエンドチームの実際の開発で用いた、TypeScript Compiler APIを使っての型を中心とした実装の自動生成事例を紹介します。考察パートが中心で、コードはほぼ出てきません。 状況説明 管理画面の開発です。検索と結果一覧とCRUD操作が中心で、多くの画面が定型的な実装です。画面数が多いため、いかにこうした定型的な画面を効率よく開発して複雑なところに注力するかが、この開発を成功させるカギとなります。また、人員的にもある程度の並列性を確保している状態です。 APIはOpenAPIで仕様が提供され

                                                            TypeScript Compiler APIを使って型を中心に実装を自動生成する - ドワンゴ教育サービス開発者ブログ
                                                          • 自作コンパイラ基盤の話 - Qiita

                                                            これは、言語実装 Advent Calendar 2020 19日目の記事です。 最近は、コンパイラやインタプリタなどの言語処理系や、それに類するものを作る人が増えてきています。(私の周りだけかもしれませんが。) しかし、もう一歩進んで、コンパイラ基盤を作ってみたという話はあまり聞きません。 コンパイラ基盤は、それの対象とするアーキテクチャについてや、それ自体の使い勝手を考えるのが非常に面白いものです。また、コンパイラ基盤を作る中で、コンパイラや計算機自体についてより深く学ぶことが出来ます。 この記事では、私が開発中のコンパイラ基盤を例として、コンパイラ基盤について語っていきます。 そもそもコンパイラ基盤とは コンパイラ基盤と言えば、近年色々な所で目にするのがLLVMです。 LLVMを使うことで、コンパイラの複雑で面倒な部分を避けつつ、コンパイラを構成することができるようになりました。 下

                                                              自作コンパイラ基盤の話 - Qiita
                                                            • PPLサマースクール2021 「JavaScript処理系とChromeブラウザの実装技術」 - 日本ソフトウェア科学会 プログラミング論研究会 (JSSST-SIGPPL) (Special Interest Group on Programming and Programming Languages)

                                                              ニュース † Web ページを公開しました (6/29) 無事終了しました。講演資料へのリンクを追記しました (9/1) ↑ 概要 † JavaScript は世界でもっとも利用されている重要なプログラミング言語の一つであり、ウェブブラウザで利用可能なほぼ唯一のプログラミング言語という特徴から、ウェブアプリケーション開発で広く利用されています。 この重要性から、JavaScript処理系の性能改善に関する研究開発が活発に行われてきました。JavaScriptの性能改善は、動的な言語ながらの困難さも知られています。今年のサマースクールでは、鵜川さん(東京大学)にJavaScriptの実装技術について、その困難さをどう克服するか、基本的なところからご紹介いただきます。 JavaScriptを動作させるソフトウェアとして、Google が開発を主導するV8処理系、およびそれを利用するGoogle

                                                              • Goコンパイラのお勉強(2)~高階関数のためのインライン展開とエスケープ解析~ - Techtouch Developers Blog

                                                                はじめに インライン展開 インライン展開とは 高階関数のパフォーマンスが落ちる例 インライン展開の制約 エスケープ解析 エスケープ解析とは 高階関数のパフォーマンスが落ちる例 さいごに 参考文献 はじめに 先々月にも Go コンパイラの最適化に関するブログ記事を書いたのですが、多くのブックマークを頂けて感謝です! SRE の izzii です。 github.com 上のドキュメントを参考にしつつ Go コンパイラの最適化に関する記事を連載していきます。本記事は 2 本目です。 [第 1 回] Goコンパイラのお勉強(1)~ゼロ幅の型によるメモリ利用の最適化と未定義動作~ [本記事] Goコンパイラのお勉強(2)~高階関数のためのインライン展開とエスケープ解析~ [第 3 回] Goコンパイラのお勉強(3)~配列の効率的な操作に関する最適化~ 文字数の関係でタイトルでは高階関数という言葉を

                                                                  Goコンパイラのお勉強(2)~高階関数のためのインライン展開とエスケープ解析~ - Techtouch Developers Blog
                                                                • TypeScriptコンパイラの読み方

                                                                  TypeScriptコンパイラリーディングをする上で、目当てのコードに辿りつくまでの手間を短縮するためのメモ書きです。コードリーディングの一般論や、TypeScriptコンパイラから読み取れる個別事象については極力省略しています。 TypeScriptの主要な処理系 多くのJavaScriptパーサーが拡張としてTypeScriptを読めるようになっています。また抽象構文木のフォーマットに事実上の標準があり、各パーサーはそれに従っています。AST Explorerでこれらのパーサーの出力を調べることができます。特に重要なのが以下の2つの処理系です。 TypeScript TypeScriptの型推論・リント・トランスパイル・モジュールバンドリング等ができる。 Babel TypeScriptのトランスパイルができる。 TypeScriptコンパイラの構成 libに標準ライブラリ (型定義フ

                                                                    TypeScriptコンパイラの読み方
                                                                  • Big Sky :: C++ で flask ライクなウェブサーバ「clask」書いた。

                                                                    今まで C++ でちょっとしたウェブアプリを作る際は crow という micro-framework を使ってきました。 GitHub - ipkn/crow: Crow is very fast and easy to use C++ micro web framework (inspired by Python Flask) How to Build If you just want to use crow, copy amalgamate/crow_all.h and include it. Requirements C... https://github.com/ipkn/crow ヘッダオンリーで使えてとても便利だったのですが、boost に依存している点があまり好きじゃなかったのと、最近 crow の開発が止まり最新の boost でビルド出来なくなってしまったので、自分で作

                                                                      Big Sky :: C++ で flask ライクなウェブサーバ「clask」書いた。
                                                                    • Sorbet Compiler: An experimental, ahead-of-time compiler for Ruby · Sorbet

                                                                      For the past year, the Sorbet team has been working on an experimental, ahead-of-time compiler for Ruby, powered by Sorbet and LLVM. Today we’re sharing the source code for it. It lives alongside the existing code for Sorbet on GitHub, mostly in the compiler/ folder: → https://github.com/sorbet/sorbet/tree/master/compiler/ We want to be clear up front: the code is nowhere near ready for external u

                                                                        Sorbet Compiler: An experimental, ahead-of-time compiler for Ruby · Sorbet
                                                                      • 【寄稿】独自言語のコンパイラをLLVM backendを用いて作る「ミニキャン言語を作ってみよう!」講義録 - Flatt Security Blog

                                                                        はじめに 弊社Flatt Securityでは学生の学びを支援したいという想いから今回少額ではありますが高橋さんの留学を支援させていただき、そのご縁で弊社のYONEUCHI, Takashi (@lmt_swallow) | Twitterもスタッフを務めるセキュリティミニキャンプにおける素晴らしい講義の内容をテックブログに書いていただけることになりました。以下本文になります。 @00_ です。今年の夏のUC Berkeleyへの留学費用をFlatt Securityさんに支援して頂いた経緯で、セキュリティミニキャンプの講義内容についてテックブログで書くことになりました。 2019/09/28-2019/09/29 のセキュリティミニキャンプ山梨で「ミニキャン言語を作ってみよう!」の講座を行いました。この講座では、「ミニキャン言語(MC言語)」という独自言語のコンパイラを、自分がコミッタで

                                                                          【寄稿】独自言語のコンパイラをLLVM backendを用いて作る「ミニキャン言語を作ってみよう!」講義録 - Flatt Security Blog
                                                                        • Facebook、プログラムコードを別のプログラミング言語に翻訳する「TransCoder AI」を開発 - BRIDGE(ブリッジ)テクノロジー&スタートアップ情報

                                                                          FacebookはC++、Java、Pythonなどの高水準言語で書かれたプログラムコードを別のプログラミング言語に変換するニューラルトランスコンパイラを開発したという。このシステムは教師なし学習を採用しており、同社は従来よりもかなり効率が改善したとしている。 既存のプログラムコードを別の言語に移行するには、両方の言語について専門的な知識が必要な上、コストがかかってしまいがちだ。たとえばオーストラリアのコモンウェルス銀行はプラットフォームをCOBOLからJavaに移行するために5年の歳月と約7億5,000万米ドルを費やした。 Facebookは教師なし学習というアプローチ法に取り組み、C++、Java、Python間でソースコードを変換することができる「TransCoder」を開発した。トレーニングには280万件以上のオープンソースリポジトリからなるGitHubコーパスを使用した。Tran

                                                                            Facebook、プログラムコードを別のプログラミング言語に翻訳する「TransCoder AI」を開発 - BRIDGE(ブリッジ)テクノロジー&スタートアップ情報
                                                                          • Gradle/Kotlinで開発する私的ベストプラクティス2022 - Kengo's blog

                                                                            こちらのエントリーが素敵だなと思ったので、最近書いてるKotlinプロジェクトのベストプラクティスをまとめてみます。一部はJavaプロジェクトにおいても利用できるはずです。 zenn.dev 基本方針 参加障壁を下げる。OSSプロジェクトでもプロプライエタリ・ソフトウェアプロジェクトでも、新しい開発者が参加するコストを下げることには大きな意義がある。 環境差異を吸収する。javaにPATHが通ってさえいればOSに関係なくビルドが通るようにする。 プロジェクト固有ルールを作らない。Conventional CommitsやKeep a changelogなど、ひろく世に使われているルールを採用する。 Gradleを設定する Spotlessを使う コードのフォーマットはformatterに任せて人間は細かいことを考えない、というのが不特定多数が参加するソフトウェアプロジェクトのあるべき姿だと

                                                                              Gradle/Kotlinで開発する私的ベストプラクティス2022 - Kengo's blog
                                                                            • Rustの標準ライブラリは小さいのか? - Qiita

                                                                              はじめに 「Rustの標準ライブラリは小さい」と言われます。実際、正規表現や乱数など多くの言語で標準ライブラリに入っているようなものが、Rustの標準ライブラリにはありません。こうなっている理由は「標準ライブラリに入っていなくても依存関係を簡単に追加できる」「後方互換性を保ちながら大きな標準ライブラリを維持するのは難しい」といったことが挙げられます。もちろん標準ライブラリが小さいと不便なこともあり「サードパーティライブラリの選択が難しい」というのはよく言われるところです。 ところでRustの標準ライブラリは実際に小さいでしょうか?小さいというと、どうしても低機能・できることが少ないというイメージになりますが、個人的な印象としては「Rustの標準ライブラリはカバー範囲は狭いが高密度」というものです。 あまりこういう観点で書かれたものは見たことがないので、この記事ではRustの標準ライブラリの

                                                                                Rustの標準ライブラリは小さいのか? - Qiita
                                                                              • GitHub - google/orbit: C/C++ Performance Profiler

                                                                                Orbit, the Open Runtime Binary Instrumentation Tool is a standalone native application profiler for Windows and Linux. It supports native applications written in languages such as C, C++, Rust, or Go. Its main purpose is to help developers identify the performance bottlenecks of a complex application. Orbit can be also used to visualize the execution flow of such applications. The key differentiat

                                                                                  GitHub - google/orbit: C/C++ Performance Profiler
                                                                                • アメリカに留学に来て1年が経った - pco2699’s blog

                                                                                  アメリカに来て1年が経ったので、1年で思い出深かったことなどをざっと振り返ろうかと思う。 2023春 2023夏 これから アメリカに来た過去の経緯などは以下を参照。 blog.pco2699.net blog.pco2699.net 2023春 2023春は今振り返っても「コンパイラデザイン」という授業が地獄だった、という記憶しかない。 www.cs.cmu.edu コンパイラデザインはCMUの中でOSと双璧をなす、課題がエグい授業として有名なのだが、噂通りであった。 www.quora.com The work is spread fairly evenly throughout the semester; each assignment is similarly sized, and they all have the same amount of time, roughly. It

                                                                                    アメリカに留学に来て1年が経った - pco2699’s blog