Rust には整数の primitive 型が多数あるが、どの型でもよしなに計算してくれる関数を書きたくなる。四則演算子を表す trait はあるのだが、細かく分かれているので指定するのが大変である。 use std::fmt::Display; use std::ops::{AddAssign, Mul, MulAssign}; fn execute<T>(mut x: T, y: T) where T: Display + Copy + MulAssign + Mul<Output = T> + AddAssign, { println!("x={}, y={}", x, y); x *= y; println!("x * y = {}", x); x += y * y; println!("x * y + y ^ 2 = {}", x); } fn main() { execute(
// 割る2をする関数の引数が偶数であることを型によって強制する例(実用性はない) data O // 数字の0を表すデータ型 data S(A) forall { A } // +1を表すデータ型 // 型エイリアス type Nat = O | S[Nat] // 非効率すぎる他倍長整数 type Even = O | S[Odd] type Odd = S[Even] // 偶数を引数にとって2で割った結果を言語組込みの整数として返す関数 div2 : Even -> I64 = // 網羅性チェックつきのパターンマッチ | O => 0 | S(S(n)) => 1 + n.div2 TL;DR ユニオン型は直和型の上位互換である(追記あり)。関数型言語を作るときは直和型の代わりにユニオン型を採用するのもあり。 はじめに Cottonというプログラミング言語を2021年の夏頃から作
Cycloneとは CycloneはRustのリージョン推論の原型のひとつになった実験的なプログラミング言語です。 現在はメンテナンスされていませんが、歴史的な意義があることからCycloneのビルド環境を整備してみました。 (完結するかは未定) ソースの取得 CycloneのWebサイトは生きているので、ソースはCycloneのDownloadページから取得できます。しかしここに不穏な文言があります。 If you use gcc 4, you must get the latest version of Cyclone from SVN (see below). 最新安定版よりも新しい版があること、またgccのバージョンに依存して壊れることが読み取れます。そしてSubversionと書いてあることから嫌な予感がした人もいると思いますが、このリポジトリは既に動いていません。 というわけで
関連キーワード Google | プログラミング 広く使われているプログラミング言語「C++」。その後継としてGoogleが開発しているオープンソースプログラミング言語が「Carbon」だ。本連載は、ソースコード品質管理ベンダーSonarSourceで開発者を支援する立場にあるフィル・ナッシュ氏が、Carbonについて英Computer Weeklyに寄稿したものだ。 Rustと「Go」の根本的な違い 世間の見方とは異なり、CarbonはC++に取って代わるものではない。同社はむしろ、後継のプログラミング言語としてCarbonを設計している。同じように聞こえると感じる読者もいるだろう。重要な違いは、GoogleがCarbonとC++を 一緒に使うことを想定している 点だ。 併せて読みたいお薦め記事 Carbonとは何か Googleのプログラミング言語「Carbon」がC++の後継になれな
ここ1、2年の間で話題になることが多かったWebAssemblyのコンポーネントモデルについて、その背景やWasmとの関係、コンポーネントの作り方などについて紹介していきます。 本記事は、TechFeed Experts Night#9 〜 Rust/WebAssemblyの「いま」を探る のセッション書き起こし記事になります。 イベントページのタイムテーブルから、その他のセッションに関する記事もお読み頂けますので、一度アクセスしてみてください。 本セッションの登壇者 セッション動画 よろしくお願いします。今ご紹介いただきましたchikoski@です。 Rustにはコミュニティ的な関わり方が多くて、Rust.Tokyoというカンファレンスの運営をやっています。WebAssemblyは出たときからずっと仕様を追っていて、コロナの始まる前はWebイベントもやっていたのですが、最近はできていませ
On most systems, you can implement concurrency using either threads or processes, where the main difference between the two is that threads share memory and processes don’t. Modern web browsers support concurrency through the Web Workers API. Although Web Workers are by default closer to a multi-process model, when used with WebAssembly you can opt-in to a more thread-like experience. Just like in
parolというLL(k)パーサを生成するcrateがあるのですが、とにかくすごいので紹介します。 parolを知って、Rustでパーサをつくることに関して新しい時代が始まったなと思いました。 パーサコンビネータ Rustでパーサといえばnomやchumskyといったパーサコンビネータが主流の印象です。 これはjsonのように既に文法が定義されている場合やプログラミング言語のプロトタイピングに向いていると思います。 nomのREADMEにも後者について以下のように言及されています。 While programming language parsers are usually written manually for more flexibility and performance, nom can be (and has been successfully) used as a proto
Create ridiculously fast Lexers. Logos has two goals: To make it easy to create a Lexer, so you can focus on more complex problems. To make the generated Lexer faster than anything you'd write by hand. To achieve those, Logos: Combines all token definitions into a single deterministic state machine. Optimizes branches into lookup tables or jump tables. Prevents backtracking inside token definition
TauriはRustで書かれた軽量なGUIフレームワークで、Windows、macOS、Linux向けのデスクトップアプリを開発できます。2022年6月に最初の安定版であるバージョン1.0がリリースされました。 Tauriでは、メインプロセスはRustで記述しますが、UI(User Interface)にはWeb技術を利用します。ReactやVue.jsのようなJavaScriptフレームワークがそのまま使えるので、インタラクティブで見栄えの良いUIを簡単に構築できます。同種のフレームワークにElectronがありますが、後発であるTauriにはインストーラのサイズを小さくできるなどの強みがあります。 Tauriのロゴは、おうし座の二重星であるシータタウリ(θ Tauri)をモチーフ[1]にしており、Webとネイティブアプリの相互作用を意味しています。 図1 Tauriロゴ 本稿では、Ta
Vercel's mission is to provide the speed and reliability innovators need to create at the moment of inspiration. Last year, we focused on speeding up the way Next.js bundles your apps. Each time we moved from a JavaScript-based tool to a Rust-based one, we saw enormous improvements. We migrated away from Babel, which resulted in 17x faster transpilation. We replaced Terser, which resulted in 6x fa
Day 52 のテーマ Day 50 そして Day 51 と Wasm Workers Server の最もシンプルな基本動作をするアプリケーションについて眺めてみました。 とは言え、基本動作の中でもまだふれていない機能が Wasm Workers Server にはあります。標準機能として、キー/バリューのインメモリストアを提供しています。 今日は、その キー/バリューストアについて見てみたいと思います。 キー/バリューストア キー/バリューストアとは、文字通りキーとそのキーに対する値からなるデータ構造を保管するためのストレージです。ハッシュテーブルとしてよく知られているデータ構造ですよね。Redis, Memcached や MongoDB などが有名ですね。 さて、Wasm Workers Serverで提供しているキー/バリューストアは、Wasm Wokers Server がま
というわけで、昨日は Rust でのハンドラモジュールを作成してみました。 Wasm Workers Server の動作 ハンドラは次のように動作します: 👉 リクエストの受付けとレスポンスの返却 👉 WASI Standard Input / Output を介したデータの送受信 STDIN と STDOUT を使用したデータ送受信を行うインターフェースにすることにより、この Wasm Workers Server 以外の WASI ランタイム環境でも動作する互換性のあるハンドラを作成することができます。 サーバーは次のように動作します: 1️⃣ 指定したフォルダにある .wasm モジュールの識別 2️⃣ 各モジュールへの HTTP ルートの関連付け 3️⃣ (必要に応じて) Key / Value インメモリストア の作成 4️⃣ Wasmtime ランタイムの初期化 5️⃣
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く