並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 47件

新着順 人気順

std string char arrayの検索結果1 - 40 件 / 47件

  • とほほのRust入門 - とほほのWWW入門

    目次 Rustとは インストール Hello world Cargoプロジェクト キーワード コメント(//) 値 変数・定数(let, mut, const) 型 基本の型(bool, i16, char, str...) 型変換(as) 構造体(struct) 共用体(union) 列挙型(enum) タプル(tup) 配列(array) ベクタ(vec) ハッシュマップ(HashMap) 文字列(&str, String) 演算子(+ - ...) ヒープ領域(Box) スライス(&var[n..m]) 関数(fn) クロージャー(|...|{...}) マクロ(macro_rules!) 制御構文 条件分岐(if) 繰り返し(while) 繰り返し(for) ループ(loop) ループ制御(break, continue) マッチ(match) インプリメンテーション(impl)

    • 新しくプログラミング言語を作る際に文字列型をどうするべきか

      この記事は「言語実装 Advent Calendar 2025」の3日目の記事です。 この記事は、新しくプログラミング言語を設計する際に文字列型をどうするべきかについて、私の持論をまとめたものです。 以前「新しくプログラミング言語を作る際に数値型をどうするべきか」という記事を書きましたが、この記事はそれの文字列版です。 推敲が足りずに同じことを何箇所かで繰り返している場合がありますが、冗長性だと思ってご容赦ください……。 【2025年12月4日 更新】small string optimization、スライスとGCの話を追加、Rubyの文言の修正、可変性と値セマンティクスの記述の整理など。完全な変更履歴はGitHubを見てください。 【2025年12月7日 更新】ケーススタディーにJava、D、Schemeを追加。JavaScript文字列のコードポイント単位のアクセスの記述を追加。Sw

        新しくプログラミング言語を作る際に文字列型をどうするべきか
      • 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
        • 2023年のコンパイル時レイトレーシング - in neuro

          これは qiita.com の12/16の記事です。やばいもう16日が終わってしまう! はじめに 太古の昔、あるC++プログラマ*1がtemplateの再帰と特殊化を使ってコンパイル時に計算ができることを「発見」*2*3したその日から、C++とコンパイル時計算は分かちがたく結びついています。 言語機能を本来意図されていなかった方法で活用する曲芸的な技巧だったコンパイル時計算は、その強力さを買われコミュニティを席巻し、C++11での constexpr の導入によりある意味で公式に認められたものとなりました。 導入当初は return 文一つだけしか持てなかった constexpr 関数は、それでも三項演算子による条件分岐や再帰によってコンパイル時計算を大いに盛り上げました。 そしてC++14で条件分岐、ループ、変数の書き換えが、C++17ではラムダが、C++20では仮想関数と動的メモリ確保

            2023年のコンパイル時レイトレーシング - in neuro
          • Kubernetesクラスタの可観測性の隙間を埋めるeBPF - LIFULL Creators Blog

            KEELチームの相原です。 今回はeBPFを利用してKubernetesクラスタの可観測性の隙間を埋めている話です。 前回のエントリではLLMにうつつを抜かしていたので本業(?)の話をしようと思います。 www.lifull.blog LIFULLの可観測性の現在地 eBPFとは 可観測性の隙間 NAT Loopback eBPFを実行するには BPF CO-RE libbpf-rsを利用したNAT Loopbackの検知 1. (ユーザ空間) コマンドライン引数として受け取ったDNSをTTLごとに名前解決してIPアドレスを取得する 2. (ユーザ空間) IPアドレスに変化がある度にカーネル空間で動くBPFプログラムにそのIPアドレスのリストを渡す 3. (カーネル空間) Kprobesで tcp_v4_connect/tcp_v6_connect にフックを仕込む 4. (カーネル空間)

              Kubernetesクラスタの可観測性の隙間を埋めるeBPF - LIFULL Creators Blog
            • Extending SQLite with Rust to support Excel files as virtual tables

              This article explains how SQLite can be extended with Rust. In particular, it will outline SQLite’s mechanism called virtual tables and showcase how we can use it from Rust programming language. In the end, we will have a working extension that can be dynamically loaded and used from SQLite. This article does not claim to be an exhaustive guide about extending SQLite with Rust, but I hope the read

              • Changing std::sort at Google’s Scale and Beyond

                TL;DR; We are changing std::sort in LLVM’s libcxx. That’s a long story of what it took us to get there and all possible consequences, bugs you might encounter with examples from open source. We provide some benchmarks, perspective, why we did this in the first place and what it cost us with exciting ideas from Hyrum’s Law to reinforcement learning. All changes went into open source and thus I can

                  Changing std::sort at Google’s Scale and Beyond
                • Low-Level Software Security for Compiler Developers

                  1 Introduction Compilers, assemblers and similar tools generate all the binary code that processors execute. It is no surprise then that these tools play a major role in security analysis and hardening of relevant binary code. Often the only practical way to protect all binaries with a particular security hardening method is to have the compiler do it. And, with software security becoming more and

                  • krish's blog • Parsing JSON in 500 lines of Rust

                    Last semester at university, I took a course called "Syntax-Based Tools and Compilers". It focused on building a scanner, parser, compiler, and so on for a language called PL0. We used Python in the course, but I was really interested in learning Rust at the time. So, I decided to embark on a side project (yes, another one!). This time, I wanted to build a JSON parser in Rust. My goal was to test

                      krish's blog • Parsing JSON in 500 lines of Rust
                    • Rust 1.59を早めに深掘り - OPTiM TECH BLOG

                      こんにちは、R&Dチームの齋藤(@aznhe21)です。 初めてのオフィス引っ越し体験が目前でちょっとワクワクしています。 さて、本日2/25(金)にRust 1.59がリリースされました。 この記事ではRust 1.59での変更点を詳しく紹介します。 2/25は映画「未知との遭遇」が日本で公開された日 ピックアップ 定数ジェネリクスでデフォルト値を使えるようになった 分割代入ができるようになった インラインアセンブリが使えるようになった イテレータのzipがフリー関数になった Cargo.tomlでstripを指定できるようになった 安定化されたAPIのドキュメント std::thread::available_parallelism 制限 エラー サンプル Result::copied サンプル Result::cloned サンプル ops::ControlFlow::is_brea

                        Rust 1.59を早めに深掘り - OPTiM TECH BLOG
                      • [C++] std::arrayを初期化せずに初期化する - 地面を見下ろす少年の足蹴にされる私

                        初期化せずに初期化する。一見矛盾しているようにしか思えない行いはしかし、生配列の場合は次のように初期化しながら初期化しないことによって行うことができます int main() { int array_uninit[5]; // 各要素は未初期化 int array_zeroinit[5]{}; // 各要素は0で初期化 } この時std::arrayで同様に初期化しながら初期化しないことを行うにはどうすればいいのでしょうか?クラス型の場合、初期化をしない初期化(デフォルト初期化)の場合でもデフォルトコンストラクタが呼ばれてしまうため、なんとなくできないような気がしてしまいます。 先に結論を書いておくと、生配列と全く同様の書き方によって全く同様の初期化を行うことができます。 int main() { std::array<int, 5> array_uninit; // 各要素は未初期化 s

                          [C++] std::arrayを初期化せずに初期化する - 地面を見下ろす少年の足蹴にされる私
                        • Node.js — Node.js 24.0.0 (Current)

                          2025-05-06, Version 24.0.0 (Current), @RafaelGSS and @juanarbol We’re excited to announce the release of Node.js 24! This release brings several significant updates, including the upgrade of the V8 JavaScript engine to version 13.6 and npm to version 11. Starting with Node.js 24, support for MSVC has been removed, and ClangCL is now required to compile Node.js on Windows. The AsyncLocalStorage API

                            Node.js — Node.js 24.0.0 (Current)
                          • 即興演奏のためのオーディオビジュアルセットを作った

                            2024年の9月14日に岡千穂さん、野本直輝さんらからComputer Music Partyというイベントにお誘いいただき、かなり久し振りにソロでの即興演奏、オーディオビジュアルのライブをしました。出演者全員やってることがみんな違ってて、全員何をしているのか全然わからなくて素晴らしいイベントでした。。 Calum Gunn, moxus, Naoki Nomoto & Utah Kawasaki, Satoru Higa, okachiho - Tokyo Gig Guide 本記事はそのイベントの中で何をしていたか、どう作ったか、についての内容となります 実際の演奏中の様子はこちら モチベーション 大学生のころ、専攻ではコンピューターミュージックを学ぶかたわら放課後はジャズ研でドラムを演奏するといった学生生活を送っていました 卒業して早20年程度が経過した今、久しぶりにドラム触りたいけ

                              即興演奏のためのオーディオビジュアルセットを作った
                            • Text Editor Data Structures

                              Text editors can be an interesting challenge to program. The types of problems that text editors need to solve can range from trivial to mind-bogglingly difficult. Recently, I have been on something of a spiritual journey to rework some internal data structures in an editor I have been building, specifically the most fundamental data structure to any text editor: the text. Table of Contents Resour

                                Text Editor Data Structures
                              • Pitfalls of Safe Rust | corrode Rust Consulting

                                When people say Rust is a “safe language”, they often mean memory safety. And while memory safety is a great start, it’s far from all it takes to build robust applications. Memory safety is important but not sufficient for overall reliability. In this article, I want to show you a few common gotchas in safe Rust that the compiler doesn’t detect and how to avoid them. Why Rust Can’t Always Help Eve

                                  Pitfalls of Safe Rust | corrode Rust Consulting
                                • CUDA C/C++ Basics

                                  © NVIDIA Corporation 2011 CUDA C/C++ Basics Supercomputing 2011 Tutorial Cyril Zeller, NVIDIA Corporation © NVIDIA Corporation 2011 What is CUDA?  CUDA Architecture  Expose GPU computing for general purpose  Retain performance  CUDA C/C++  Based on industry-standard C/C++  Small set of extensions to enable heterogeneous programming  Straightforward APIs to manage devices, memory etc.  This

                                  • Rustacean のための F# 入門

                                    また、 F# の decimal 型は Rust には標準で存在しませんが、 5m という書き方をします。 数字の間に _ を入れて読みやすくすることができるのも同様です。 let num = 8_000_000; その他の型について ... F# の char は Rust の char に似ていますが、 前者が UTF-16 なのに対し、 Rust の char は UTF-32 で常に 4bytes です。これは、 Rust とは違い、 char の配列がほぼそのまま string として扱えることを示しています。 Rust の unit と F# の unit は両方とも () で表され、役割も同じです。 文字列型に関しては Rust には色々あるので、簡単な比較はできませんが、 string は immutable な char の配列で、 mutable に扱いたい場合は St

                                      Rustacean のための F# 入門
                                    • Rust 1.80を早めに深掘り - あずんひの日

                                      本日7/26(金)にリリースされたRust 1.80の変更点を詳しく紹介します。 もしこの記事が参考になれば記事末尾から活動を支援頂けると嬉しいです。 7月25日は蒸気機関車が初めて走った日 ピックアップ 遅延初期化されるグローバル変数を書けるようになった Optionの値を条件を満たしたときだけ取り出せるようになった スライスをパニックなしに分割できるようになった 配列を含むスライスを一次元化できるようになった パターンとして終端の含まれない範囲を使えるようになった useなしにsize_of等が使えるようになった 安定化されたAPIのドキュメント LazyCell サンプル LazyLock サンプル Duration::div_duration_f32 サンプル Duration::div_duration_f64 サンプル Option::take_if サンプル Seek::se

                                        Rust 1.80を早めに深掘り - あずんひの日
                                      • ソフトウェアエンジニアの技術面接で実際に出たC++質問集 - EurekaMoments

                                        独習C++ 新版 作者:高橋 航平翔泳社Amazon 目的 自分のように自律移動システムを開発するエンジニアの採用プロセスでは、 C++の知識がどれだけあるかを問われる技術面接が必ずあると思います。 今まで何度か実際に面接を受けたことがありますが、いざ聞かれて答えようと すると(しかも英語で)、自分がC++の事を全然理解出来ていないということを 思い知らされました。 今後また同じ質問をされたときはちゃんと答えられるように、これまでに 問われた質問の内容と、その模範解答をまとめておこうと思います。 目次 目的 目次 質問集 C++とPythonの違い クラス/構造体/共用体の違い ポインタ渡しと参照渡しの違い 値渡し (Pass by Value) ポインタ渡し (Pass by Pointer) 参照渡し (Pass by Reference) constの使い方 メモリの扱い方 real

                                          ソフトウェアエンジニアの技術面接で実際に出たC++質問集 - EurekaMoments
                                        • ROFL with a LOL: rewriting an NGINX module in Rust

                                          ROFL with a LOL: rewriting an NGINX module in Rust2023-02-24 At Cloudflare, engineers spend a great deal of time refactoring or rewriting existing functionality. When your company doubles the amount of traffic it handles every year, what was once an elegant solution to a problem can quickly become outdated as the engineering constraints change. Not only that, but when you're averaging 40 million r

                                            ROFL with a LOL: rewriting an NGINX module in Rust
                                          • Wordlexpr: Wordle Compilation in C++20 - VittorOmeo

                                            Not participating in the hype around Wordle seemed wrong, and what better way to do it than to create it cleanly at compile time in C++20? Introducing Wordlexpr! Let’s figure out how this magic works! Overview Wordlexpr is executed entirely at compile time – no executable is created, and the game itself is played through compiler errors. This requires three key tasks: Outputting random text to com

                                              Wordlexpr: Wordle Compilation in C++20 - VittorOmeo
                                            • Unicode is harder than you think · mcilloni's blog

                                              Reading the excellent article by JeanHeyd Meneide on how broken string encoding in C/C++ is made me realise that Unicode is a topic that is often overlooked by a large number of developers. In my experience, there’s a lot of confusion and wrong expectations on what Unicode is, and what best practices to follow when dealing with strings that may contain characters outside of the ASCII range. This a

                                              • [C++]WG21月次提案文書を眺める(2022年05月) - 地面を見下ろす少年の足蹴にされる私

                                                文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2022-05 全部で36本あります。 N4912 2022-11 Kona hybrid meeting information N4913 PL22.16/WG21 agenda: 25 July 2022, Virtual Meeting P0543R1 Saturation arithmetic P0792R9 function_ref: a non-owning reference to a Callable P0901R9 Size feedback in operator new P1021R6 Filling holes in Class Template Argument Deduction P1255R7 A view of 0 or 1 elements: views::maybe P

                                                  [C++]WG21月次提案文書を眺める(2022年05月) - 地面を見下ろす少年の足蹴にされる私
                                                • https://cheats.rs/rust_cheat_sheet.pdf

                                                  Rust Language Cheat Sheet 26. August 2021 Contains clickable links to The Book , Rust by Example , Std Docs , Nomicon , Reference . Data Structures Data types and memory locations defined via keywords. Example Explanation struct S {} Define a struct with named fields. struct S { x: T } Define struct with named field x of type T. struct S ​(T); Define "tupled" struct with numbered field .0 of type

                                                  • I made JSON.parse() 2x faster

                                                    Part of my job is to make JavaScript things go fast. Speed is a feature, and when working in an interpreted language, squeezing every last bit of performance can be the difference between a great product and unusable garbage. Anyway, how cool would it be to make JavaScript itself go faster? I’m not a C++ programmer, but that didn’t stop me before, so I thought I’d give it a try anyway! The objecti

                                                      I made JSON.parse() 2x faster
                                                    • Large Text Compression Benchmark

                                                       Large Text Compression Benchmark Matt Mahoney Last update: Mar. 25, 2026. history This competition ranks lossless data compression programs by the compressed size (including the size of the decompression program) of the first 109 bytes of the XML text dump of the English version of Wikipedia on Mar. 3, 2006. About the test data. The goal of this benchmark is not to find the best overall compress

                                                      • A byte string library for Rust - Andrew Gallant's Blog

                                                        bstr is a byte string library for Rust and its 1.0 version has just been released! It provides string oriented operations on arbitrary sequences of bytes, but is most useful when those bytes are UTF-8. In other words, it provides a string type that is UTF-8 by convention, where as Rust’s built-in string types are guaranteed to be UTF-8. This blog will briefly describe the API, do a deep dive on th

                                                        • 🍪 Parser combinator nom 入門 | Happy developing

                                                          nom nom nomこの記事ではparser combinator nom1について書きます。versionは v6.1を前提にしています。 nomは小さいparserを組み合わせて、目的とするデータ構造を入力から読み取るためのpackageです。 nushell のコードを読んでいてみかけたのが初めてでしたが他のpackageでも時々利用されているのをみるので、読めるようになるのが目標です。 そもそもparser combinatorといわれてもピンときていなかったので、自分と同じ様な方はLearning Parser Combinators With Rust がおすすめです。この記事を読んでparserを組み合わせるという意味がわかりました。 nomで組み合わせるparserは概ね以下のような関数signatureをしています。 fn parse_unicode<'a, E>(in

                                                          • Zig 言語リファレンス

                                                            index.md これは Zig ドキュメント 0.10.1 を DeepL Pro と ChatGPT を利用して翻訳したものです。 一部 master なモノもあります、ごちゃ混ぜです 自分用に翻訳しています zig_doc_0.10.1.md Zig 言語リファレンス はじめに Zig は、堅牢で最適かつ再利用可能なソフトウェアを維持するための汎用プログラミング言語およびツールチェインです。 ロバスト メモリ不足などのエッジケースでも正しく動作する。 最適化 プログラムが最適に動作・実行されるように記述する。 再利用可能 同じコードが、制約の異なる多くの環境で動作します。 保守性 コンパイラや他のプログラマに意図を正確に伝えることができる。コードを読むためのオーバーヘッドが少なく、要件や環境の変化に強い言語です。 新しいことを学ぶのに一番効率的な方法は例を見ることであることが多いので

                                                              Zig 言語リファレンス
                                                            • cuneicode, and the Future of Text in C

                                                              Following up from the last post, there is a lot more we need to cover. This was intended to be the post where we talk exclusively about benchmarks and numbers. But, I have unfortunately been perfectly taunted and status-locked, like a monster whose “aggro” was pulled by a tank. The reason, of course, is due to a few folks taking issue with my outright dismissal of the C and C++ APIs (and not showi

                                                                cuneicode, and the Future of Text in C
                                                              • Safe C++

                                                                1 Introduction 1.1 The call for memory safety Over the past two years, the United States Government has been issuing warnings about memory-unsafe programming languages with increasing urgency. Much of the country’s critical infrastructure relies on software written in C and C++, languages which are very memory unsafe, leaving these systems more vulnerable to exploits by adversaries. Nov. 10, 2022

                                                                • 列挙値(enum)から文字列への変換 in C++26

                                                                  本記事の内容は、まだ検討段階にあるC++言語仕様を前提としています(2025年12月現在)。2026年予定の国際標準発行までに、今後も仕様変更が行われる可能性があります。 列挙値から文字列への変換 C++プログラム中で「列挙値(enum型の値)から文字列へ変換」したい場合、退屈で保守性の低いコードを人力記述する必要がありました。大抵のプログラミング言語なら変換関数だけで済むのに面倒くさ...と思った、そこのあなたに向けた内容の記事です。 #include <iostream> #include <cassert> // 列挙型Colorを定義 enum class Color { Red = 1, Green = 2, Blue = 3 }; // Color列挙値から名前(文字列)へ変換 const char* color2name(Color val) { switch (val) {

                                                                    列挙値(enum)から文字列への変換 in C++26
                                                                  • Announcing Rust 1.93.0 | Rust Blog

                                                                    The Rust team is happy to announce a new version of Rust, 1.93.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.93.0 with: $ rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes

                                                                      Announcing Rust 1.93.0 | Rust Blog
                                                                    • Row Polymorphism in C++20 - CADDi Tech Blog

                                                                      Summary This post is my hobby and has nothing to do with work. I have wanted Extensible Records (a library in Haskell) for a long time. The time has finally come. The language features we need to implement it are there in C++20! Therefore, this post will show you how to emulate row polymorphism in C++20. The latest, complete code can be found in this repository. Row Polymorphism Row polymorphism i

                                                                        Row Polymorphism in C++20 - CADDi Tech Blog
                                                                      • Announcing Rust 1.94.0 | Rust Blog

                                                                        The Rust team is happy to announce a new version of Rust, 1.94.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.94.0 with: $ rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes

                                                                          Announcing Rust 1.94.0 | Rust Blog
                                                                        • [C++]enumを文字列に変換する汎用的な方法。 - 賢朽脳瘏

                                                                          2021年9月28日追記。どういうわけかアクセス数が増えているので、訪問者を混乱させないよういい加減だったサンプルを作り直した。 enumは単なる整数値に名前を付与する手段の一つだ。パラメータの意味がわかりやすくなる上、処理コストの大きな文字列を使わなくても良い便利な機能である。最近ではenum classの形で使われることが推奨されている。 enum DoW { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, }; DoW dow = Sunday; int i = (int)dow;//i == 0 ただ例えば標準出力などにその名前の方を出力したいと思っても、ちょっと手間がかかる。enumは本質的にはただの整数値なので、例えばprintfの%sに直接enumを渡すことは出来ない。ネット上に溢れかえっている方

                                                                            [C++]enumを文字列に変換する汎用的な方法。 - 賢朽脳瘏
                                                                          • 地面を見下ろす少年の足蹴にされる私

                                                                            文書の一覧 JTC1/SC22/WG21 - Papers mailing2025-12 全部で113本あります。 もくじ N5011 Brno 2026 N5029 WG21 2025-10 Kona Admin telecon minutes N5031 WG21 2025-11 Kona Minutes of Meeting N5032 Working Draft, Standard for Programming Language C++ N5033 Editors' Report - Programming Languages - C++ P1317R2 Remove return type deduction in std::apply P1789R2 Library Support for Expansion Statements P1789R3 Library Suppor

                                                                              地面を見下ろす少年の足蹴にされる私
                                                                            • Why Rust?

                                                                              I've been a programmer for 20+ years, and few things excite me as much as Rust. My background is mostly in C++, though I have also worked in Python and Lua, and dabbled in many more languages. I started writing Rust around 2014, and since 2018 I've been writing Rust full time. In my spare time I've developed a popular Rust GUI crate, egui. When I co-founded Rerun earlier this year, the choice of l

                                                                                Why Rust?
                                                                              • finally. #embed

                                                                                It happened. Nearly 5 years of paper writing, being snuck Committee Meeting notes on the DL until I could access them myself and absolve my co-conspirators of their sins, 5 different implementations/patches later, I can finally say it. #embed is in C23 Surprisingly, despite this journey starting with C++ and WG21, the C Committee is the one that managed to get there first despite having less time

                                                                                  finally. #embed
                                                                                • いろんな言語でOpenGL! - Qiita

                                                                                  はじめに OpenGLは様々な言語でバインディングが提供されています。また簡単なプログラムでもFizzBuzzやフィボナッチ数列などのアルゴリズム問題よりも多少複雑なものになるので、OpenGLを通じて各プログラミング言語のスタイルに慣れることができます。ということで、今回はC++、Python、Haskell、Rust、Go、Scheme、Common Lisp、番外編としてJavaScriptでTriangle Gradient(図1)を描画するプログラムをそれぞれの言語のスタイルに合わせて書き、それを紹介していきたいと思います。コンセプトとしてGLUTは使わずGLFW+OpenGLによるモダンなOpenGLプログラミングを目標としています。この記事をみてOpenGLに興味を持った方はぜひご自身の得意とする言語で別の記事を投稿してみてください。 今回出したプログラムはすべてここに乗って

                                                                                    いろんな言語でOpenGL! - Qiita