Idea to software, fastReplit is an AI-driven software creation platform where everyone can build, share, and ship software fast. Empowering the next billion software creatorsWe’re on a mission to create the world’s most ubiquitous software creation platform. Replit is the foundational technology where anyone can launch the next world-changing idea.
はじめに 通常のプログラムは実行時(ランタイム)に1 + 1など様々な計算を行う。一方でコンパイラーを持つ言語では、コンパイラーの型検査やジェネリクスなどの機構を利用して、コンパイル時にも計算を行うことができる。このようなプログラミングを、コンパイル時に検査・推論される“型”[1]に注目して型レベルプログラミングと呼ばれる。 ランタイムの計算の中にはたとえばwhile(1);のような簡単な計算で無限ループといった停止しない状況に陥いることがある。コンパイル時にできる計算でこのように無限ループに陥いってコンパイルが停止しなくなってしまったら、プログラムを実行することなく自明なエラー(型があってないとか、Rustであればfreeするタイミングが自明でないなど)を検出しようというモチベーションが崩壊してしまう。したがってコンパイル時にできる計算とはランタイムに比べて非常に限定された計算しか許可さ
The common theme in many time-travel movies is to go back in time to find out what went wrong and fix it. Developers also have that desire to go back in time and find why the code broke and fix it. But, often, that crucial step where everything went wrong happened long ago, and the information is no longer available. The rr project lets programmers examine the entire life of a C or C++ program run
.NET SDKに含まれているdotnetコマンドを使うとインストールされている.NETランタイムやSDKの情報を表示できるようになる ときどき必要に駆られて、小さなプログラムを作ることがある。Windowsだと大抵はWindows PowerShellで片が付くことが多いのだが、そうでないこともある(あとPowerShellには素直じゃないところがあって……)。 その場合、筆者はC#を使うのだが、標準的な開発環境のVisual Studioは大きく、起動にも時間がかかる。基本的には本格的なアプリケーションを開発するためのものなので、実験的な短いプログラムを作るのには余計な手間と時間が多すぎる。イメージ的には、庭に小さな穴を掘るのにショベルカーを使うような感じである。 そこで便利なのが.NET SDKに含まれているdotnetコマンドだ。コマンドラインだけで利用でき、GUIは一切なし。コマ
このように、(1)(2)と「vector<int>」を2回も書かなければなりません。特に(2)では、右辺の型は分かっているんだから、左辺はそれに合わせてよ! という文句が出そうです。 初期化漏れを防止する このように、同じ意味の型を何回も書くのはかったるいな! というときに型推論は役立つわけですが、もっと切実な理由があります。それは、変数の初期化漏れの防止です。JavaでもRustでもそうなんですが、変数は宣言しっぱなしでOKです。宣言しっぱなしというのは、明確な初期化が行われていないという意味です。こうなると、その変数を参照しようとするといろいろとまずいことが起きてきます。 基本データ型とかなら、どんな値か分からない ポインタ型とかなら、どこを指しているか分からない(ダングリングポインタ) なので、実行時にプログラムが不可解な動作をしたり、いきなり落ちたりするわけです。しかし、コンパイラ
これは qiita.com の12/16の記事です。やばいもう16日が終わってしまう! はじめに 太古の昔、あるC++プログラマ*1がtemplateの再帰と特殊化を使ってコンパイル時に計算ができることを「発見」*2*3したその日から、C++とコンパイル時計算は分かちがたく結びついています。 言語機能を本来意図されていなかった方法で活用する曲芸的な技巧だったコンパイル時計算は、その強力さを買われコミュニティを席巻し、C++11での constexpr の導入によりある意味で公式に認められたものとなりました。 導入当初は return 文一つだけしか持てなかった constexpr 関数は、それでも三項演算子による条件分岐や再帰によってコンパイル時計算を大いに盛り上げました。 そしてC++14で条件分岐、ループ、変数の書き換えが、C++17ではラムダが、C++20では仮想関数と動的メモリ確保
Learn how to bring multithreaded applications written in other languages to WebAssembly. WebAssembly threads support is one of the most important performance additions to WebAssembly. It allows you to either run parts of your code in parallel on separate cores, or the same code over independent parts of the input data, scaling it to as many cores as the user has and significantly reducing the over
Rustの特長の1つである安全性。そのための大きな役割を担うのが、コンパイラです。このRustコンパイラにコントリビュートしている日本人エンジニアがいるということで、TechFeed公認エキスパートにご就任頂くと同時に、まずは記念のインタビューとしてお話を伺いました。 Rustにコントリビュートすることになったきっかけ ――今日はお時間をとっていただいてありがとうございます。最初に自己紹介をお願いします。 はい、前田喬之です。TaKO8KiというHNで活動していて「タコヤキ」と読みます。インターンを含めて、株式会社マネーフォワードに3年半勤務しています。 Rustは大学3、4年生の頃から使い始めて、しばらくしてコントリビュートするようになり、去年の8月に正式にcompiler-contributorsチームのメンバーになりました。大学では市民工学を専攻していたので特にバックグラウンドは無か
「Llama.cpp」で「Llama 2」を試したので、まとめました。 ・macOS 13.4.1 ・Windows 11 前回 1. Llama.cpp「Llama.cpp」はC言語で記述されたLLMのランタイムです。「Llama.cpp」の主な目標は、MacBookで4bit量子化を使用してLLAMAモデルを実行することです。 特徴は、次のとおりです。 ・依存関係のないプレーンなC/C++実装 ・Appleシリコンファースト (ARM NEON、Accelerate、Metalを介して最適化) ・x86アーキテクチャのAVX、AVX2、AVX512のサポート ・Mixed F16/F32精度 ・4bit、5bit、8bit量子化サポート ・BLASでOpenBLAS/Apple BLAS/ARM Performance Lib/ATLAS/BLIS/Intel MKL/NVHPC/AC
#include<stdio.h> #include<stdlib.h> struct PointerLimit{ struct PointerLimit* next; int value; } typedef PointerLimit; PointerLimit* getTail(PointerLimit* base){ while(base->next != NULL){ base = base->next; } return base; } PointerLimit* add(PointerLimit* base, int value){ PointerLimit* new = (PointerLimit*)malloc(sizeof(PointerLimit)); new->value = value; new->next = NULL; PointerLimit* tail =
こんにちは。yoshiです。夏のTechrachoフェア2022ということで、夏とは何の関係もない記事を書いていこうと思います。 業務ではC++をやっていながら前回、前々回にTechrachoで書いた記事に引き続きRustをやっていく訳ですが、定期的に炎上しがち(?)なオブジェクト指向の話です。みなさん、オブジェクト指向は好きですか? オブジェクト指向って何だろう? A. なんもわからん なんて言ってしまったら話が終わってしまうのですが。 歴史的な話をするとオブジェクトという用語はSimulaが初出で、オブジェクト指向はアラン・ケイがSmalltalkで導入したもの、という話になりますが、一方でビャーネ・ストロヴストルップがC++に導入した「カプセル化・継承・ポリモーフィズム」の組み合わせのことを指すことが多く、SmalltalkのそれとC++のそれにも違いがあるので定義が定まらない概念で
インテルのoneAPIのニュースとかは見ている方も多いかと思いますが、この流れで一番大きなインパクトは今まで高嶺の花だったIntel compilerが2021年になってから実質的に無料になってしまったということです。こうでもしないとNVIDIA1には対抗できないってことなんでしょうけど、このディープラーニングの思わぬ副産物に対して従来型HPCユーザーも恩恵にあずからずにいるわけにはいかないでしょう。 とりあえずCentOS8へのyum (dnf)を使ったインストールはとても簡単だったので、手順を紹介することにします。とりあえず本家のガイドはこちらから。やるのはyumのリポジトリを作ってinstallコマンドを打つだけです(root権限で行います)。 yumでBase kitを入れる /etc/yum.repos.d/oneAPI.repoを以下の内容で作ります [oneAPI] name
この記事では,自分が最適化コンパイラの研究をする上で読んできた論文をまとめていこうと思う. まとめることで,自分のためにもなるだろうし,読んだ人のためにもなれたら嬉しい. 以下,随時更新. 部分冗長除去法(Partial Redundancy Elimination, PRE) 部分無用コード除去 (Partial Dead Code Elimination, PDE) スカラ置換(Scalar Replacement) レジスタ促進(Register Promotion) 質問伝播(Question Propagation) 演算子強度低減(Strength Reduction) ループ最適化(Loop Optimization) 手続き間最適化(Inter-procedural Optimization) 解析系 参考書籍 部分冗長除去法(Partial Redundancy Elim
つい昨日(日本時間では今日)、TechEmpowerが行っているWebアプリケーションのベンチマーク結果が更新されました。 なんと、Round 18ではRustのフレームワーク「actix-web」が2位以下に大差をつけて圧勝していたにも関わらず、Round 19ではさらにそれを上回るライブラリが出現しました。 その名もdrogon! 名前からして素晴らしいフレームワークの予感がしますが、Rustのactix-webとはどのような点で異なり、またどのようにしてこの速度を達成したのか気になったので調べてみました。 フルスタックのライブラリ drogonはフルスタックのWebアプリケーションフレームワークとして実装されています。つまり、(actix-webとは違い)データベースとのやり取りを行うAPIやJSON, ORM, HMRなどさまざまな機能が盛り込まれています。 一方actix-web
規格として C11 (n1570) を参照する。 注意: 途中に入れた図が崩れるようなら、半角・全角比が 1:2 になるようなフォントを使って閲覧してください。 現象 wandbox で実行 ソース: ( &printf)(" &printf = %p\n", &printf); printf (" printf = %p\n", printf); ( *printf)(" *printf = %p\n", *printf); ( **printf)(" **printf = %p\n", **printf); (***printf)("***printf = %p\n", ***printf); この現象を解説する。 関数呼び出し まず、関数呼び出しについての規定を見る。 The expression that denotes the called function shall have
A few months ago, I set myself the challenge of writing a C compiler in 500 lines of Python1, after writing my SDF donut post. How hard could it be? The answer was, pretty hard, even when dropping quite a few features. But it was also pretty interesting, and the result is surprisingly functional and not too hard to understand! There's too much code for me to comprehensively cover in a single blog
Ruby開発チームは、新たなJITコンパイラであるYJITを実験的に搭載したRuby 3.1プレビュー1を公開しました。 Ruby言語は以前から実行速度の向上を重要な改善項目として挙げており、Ruby 2.6では「MJIT」と呼ばれるJITコンパイラを搭載、昨年リリースされたRuby 3.0では目標としていたRuby 2の3倍の性能を達成しています。 参考:Ruby 3.0正式版リリース。「Ruby 2の3倍速」到達、型の記述、スレッドセーフな並列処理など新機能 一方でMJITはその機構上、Railsの大規模アプリケーションなどでの性能向上に十分な効果が発揮できていないとの評価もありました。 今回Ruby 3.1プレビューでマージされたのは、ECサイト構築サービスで知られるShopifyが開発を進めてきた「YJIT」と呼ばれるJITコンパイラです。 YJITは現在のところ20%から40%程
追記: Twitterなどでご指摘等いただいているのをコメントしてますので、ぜひそちらもご覧ください! これはなに 絶賛Rust勉強中の僕が、「なんでRustはメモリ安全って言われているの?」と聞かれたので、実際にメモリ安全ではない(?)C言語のコードを並べてみて考える記事です。 C言語の場合 メモリリーク 以下のコードはメモリリークを起こす可能性があります。 #include <stdio.h> #include <stdlib.h> #define STR_BUF_SIZE 100000000 char *str_new() { return calloc(STR_BUF_SIZE, sizeof(char)); } int main() { for (int i = 0; i < 100000000; i++) { char *str = str_new(); snprintf(st
はじめに mruby/c という軽量な Ruby 処理系をスーパーファミコンに移植し、標準出力に文字列を出力する簡単な Ruby コードをエミュレータ上で動かしたので、その移植作業を記事にまとめました。 この記事で動かしたコードは次のリポジトリにあります。 この移植作業を行うという発想は、2年前の RubyKaigi 2022 で行われた mruby/c を Mega Drive 上で動かすという Yuji Yokoo さんによる発表(https://rubykaigi.org/2022/presentations/yujiyokoo.html)がベースとなっています。 元々スーパーファミコン上で動くコードを趣味で書いたことはあったのですが、最近スーパーファミコンで使われている 65C816 という CPU 向けの(まともに動く) C コンパイラが存在することを知ったので、今回移植作業に取
C++ Advent Calendar 2023, 9 日目の記事です。 学校で C++ を教える場合、受講者に最初から Visual Studio Code や、Visual Studio, Xcode などの統合開発環境をインストールしてもらうのは難しいことがあります。 とくにプログラミングが初めての学生、パソコンに不慣れな学生が多い場合は、なるべく環境構築に時間をかけず、スムーズに C++ プログラミングの学習に入れるよう、講義の序盤ではオンラインコンパイラの使用が選択肢として有効です。 本記事では、筆者が実際に大学の C++ 講義で使った 3 つのオンラインコンパイラを、講義での活用の観点から紹介します。 Simple C++ Editor Simple C++ Editor は、Wandbox をバックエンドとしたオンライン C++ コンパイラです。初心者がよく起こすエラーや警告
Microsoft's C++ Standard Library This is the official repository for Microsoft's implementation of the C++ Standard Library (also known as the STL), which ships as part of the MSVC toolset and the Visual Studio IDE. Our Changelog tracks which updates to this repository appear in each VS release. Our Status Chart displays our overall progress over time. Join our Discord server. What This Repo Is Us
by Official SpaceX Photos アメリカ航空宇宙局(NASA)とイーロン・マスク氏が設立した民間宇宙開発企業・SpaceXが2020年5月31日に、再利用可能なロケット「Falcon 9」を使った有人宇宙船の打ち上げに、成功しました。そんなFalcon 9のソフトウェア面について、IT系ニュースメディアのZDNetが解説しています。 From Earth to orbit with Linux and SpaceX | ZDNet https://www.zdnet.com/article/from-earth-to-orbit-with-linux-and-spacex/ ロケットや宇宙船などでは、PCやサーバーなどで使われるような最新鋭のCPUはほとんど使われていません。ロケットの開発には基本的に数年あるいは数十年という長い期間が必要となるため、開発した時は比較的新
LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog 初めまして。LINEの夏季インターンシップにセキュリティエンジニアとして参加した小池悠生です。1ヶ月間、アプリケーションセキュリティチームにて、LINEが提供するプロダクトのリスクアセスメントや、オープンソースプロジェクト(https://github.com/line/)のバグハントなどに取り組んでいました。 インターンが始まる前、インターン中の業務として与えられるのは主にリスクアセスメントのみだと思っていたのですが、蓋を開けてみれば自分のしたい事をほとんど自由にさせていただける非常に柔軟なインターンでした。その成果の1つとして、私がLINEクライアント内で見つけた脆弱性についてお話ししたいと思います。 以下、少し技術的な話
コンパイラとは?構造や自作方法、おすすめのコンバイラの選び方を解説!インタプリタやアセンブラとの違いとは? スキル言語 Twitter facebook LINE はじめに プログラミングに携わるとコンパイルするという言葉をよく見かけます。 コンパイルという言葉に馴染みがなければ壁にぶつかるかもしれません。 今回は、コンパイラはどういうものなのか、コンパイラは何ができるのかなどについての紹介です。 コンパイラとは プログラミング言語に携わるとコンパイルやインタプリタ、アセンブラは、外せない用語です。 どの単語もざっくりいえばソースコードの実行方法になります。 コンパイラとは、人間と機械の間に立ってお互いの言葉を通訳する役割です。 コンパイラは、ソースコードを読み込んでコンピューターが理解できるように機械語へ翻訳します。 機械語をソースコードに変換する場合は、コンパイラではなく、逆コンパイラ
Stable: v1.5.4 / Roadmap | F.A.Q. High-performance inference of OpenAI's Whisper automatic speech recognition (ASR) model: Plain C/C++ implementation without dependencies Apple Silicon first-class citizen - optimized via ARM NEON, Accelerate framework, Metal and Core ML AVX intrinsics support for x86 architectures VSX intrinsics support for POWER architectures Mixed F16 / F32 precision 4-bit and 5
ブログが長らく休止状態になっていたのですが,現在,nlccという完全独自のCコンパイラを開発しています. https://kozos.jp/nlcc/ nlの意味のひとつは「No Learn, No Listen」で,「何も見ず,聞かず,参考にせずに作る」です.まあ特別そうした確固たるポリシーがあるとかではないですが,そういうやりかたで作ってみたら面白い…というか独自性あるものになるかもと思って,そういうやりかたで作っています. なのでおそらく,実装や用語や考え方が独自になっている部分が多いと思います. 前段階として,nlshという独自シェル(見ためはtcsh互換)と,nllibcという独自の標準Cライブラリを開発していて,それらと合わせた形で「nlux」として配布しています. 一応,gcc(に含まれる,cc1相当)の代替となることを目指して開発しています. nlccやnlshは,nlli
プログラミングを勉強し始めたけど、自分は向いてないんじゃ・・・どうすればプログラミングができるようになるか教えてほしい システムエンジニアがこの悩みにお答えします。 この記事を書いている僕は、独学でプログラミングを覚えて今ではWEB制作会社でシステムエンジニア兼マーケターをしています。プログラミングの適性やどうすればプログラミングができるようになるかを説明します! 僕もプログラミングの独学を始めた時に感じたのですが、プログラミングは難しいと感じるのが普通で、わからないから自分に向いてないと諦めないでください。 プログラミングに限らず、どんな分野も勉強してすぐに理解できることは少ないと思います。 わからないから向いていないと諦めずに、継続して勉強することでプログラミングは誰でもできるようになります。 僕も一般的にプログラミングに向いていないと言われるものに当てはまりましたが、今では普通にプロ
C++は、C言語をもとに機能を拡張した汎用プログラミング言語です。「シープラプラ」または「シープラ」と呼ばれ、手続き型プログラミングの他にオブジェクト指向プログラミングやジェネリックプログラミング、データ抽象化などの複数のプログラミングパラダイムを持っています。 C++は1983年に誕生し、度重なる標準化によって標準規格が設定され、最新規格は実用ベースではC++17、2020年3月に技術的最終決定がされた次期バージョンはC++20となります。C言語と同様にマシン語に近い低水準言語としても扱える一方で、高度なアプリケーション開発に用いる高水準言語としても使用できるため、非常に汎用性が高い言語として設計されています。 他のC言語系同様に習得が難しいと言われているC++ですが、基本は非常にシンプルな構造をしているため、一つずつステップアップしていけば決して難しい言語ではありません。ここではC++
書籍が開発者としての資質を強化する。C++エキスパート・高橋晶が選ぶ、人生に影響を与えた5冊 2024年8月8日 高橋 晶 C++日本語リファレンスサイトcpprefjpを運営し、C++の最新情報を日本語で発信している。 株式会社Preferred Networksに所属し、スーパーコンピュータのソフトウェア開発に携わっている。 著書として、『C++テンプレートテクニック』(SBクリエイティブ)、『C++ポケットリファレンス』(技術評論社)、『プログラミングの魔導書』(ロングゲート)。 X: @cpp_akira GitHub: faithandbrave 1. 『スイッチ!「変われない」を変える方法』Chip Heath 著、 Dan Heath 著 千葉敏生 翻訳 2. 『習慣の力』Charles Duhigg 著、渡会 圭子 翻訳 3. 『これからの「正義」の話をしよう ── いまを
同ガイダンスは、近年のサイバーセキュリティ脅威の多くに利用されている、ソフトウェアのメモリ安全性の悪用を防ぐことを目的としており、組織におけるソフトウェアの開発にあたっては、可能な限りメモリ安全なプログラミング言語を使用するとともに、コンパイラのオプション、ツールのオプション、OS構成といったコードの安全性を高める対策を施すことで、保護を強化することを推奨している。 メモリ安全でないプログラミング言語としては、一般的に使用されているCやC++を挙げており、これらのプログラミング言語はメモリ管理において高い自由度と柔軟性を提供する一方で、メモリ参照が安全に行われているかどうかのチェックはプログラマに大きく依存していると指摘する。 ソフトウェア解析ツールを使用すれば、ソースコード中のメモリ管理における問題の多くを検出できるほか、OSによっては不正なメモリの利用を防ぐオプションも用意されているも
少し前に、今年のRust FoundationのFellowshipが募集されていたので応募してみたところ、運良く2023年のRust Foundation Fellowsの1人に選ばれました 🦀 2023年のRust Foundation Fellowsの1人に選ばれました!今後もrustcの開発を継続してやっていきます!🦀https://t.co/5sq7Au2AQL — TaKO8Ki (@TaKOBKi) August 11, 2023 Rust Foundation Fellowshipsとは? Rust Foundation Fellowshipsは、Rustコミュニティーに積極的に貢献している人が以下のようなサポートを受けられるプログラムです。 12ヶ月間、毎月$1,000の奨学金 関連性のある有益なRustに関連したイベントへの参加を支援するための上限$2,000の交通
米Microsoftは8月30日(現地時間)、2016年から提供している「Visual Studio for Mac」を終了すると発表した。最新版(17.6)のサポートは2024年8月末まで続ける。 Microsoftは「リソースの方向を転換」し、「Visual StudioとVS Code(Visual Studio Code)をクロスプラットフォーム開発向けに最適化することに重点を置く」としている。 VS Codeは、Windows、Linux、macOSに対応するクロスプラットフォームのエディタだ。Microsoftは今月初頭、Unity拡張機能のプレビュー版をリリースしている。 MicrosoftはVisual Studio for Macのユーザーに、VS Codeの利用を勧めている。あるいは、MacのVでWindowsを起動し、そこでのVisual Studio IDEというオ
Ruby 3.3リリース! 新機能解説 Ruby 3.3 YJITのメモリ管理とRJIT 〜すべてが新しくなった2つのJITを使いこなす 2023年12月25日、Ruby 3.3.0がリリースされ、様々な新機能が加えられました。本連載では実際に携わった皆さんにその新しいRubyをご紹介いただきます。 RubyはJust-In-Time(JIT)コンパイラという機能を備えており、これを有効化すると実行時に機械語を生成して様々な最適化が行なわれ、実行が高速になります。Ruby 3.3にはYJITとRJITという2つのJITコンパイラがあり、デフォルトでは無効になっていますが、それぞれ--yjitと--rjitで有効化できます。 この回では、Ruby 3.3でYJITの性能特性が変化した点や、YJITに新たに追加された便利な機能、またRJITはどのように使うものであるかについて解説します。 YJ
学習の仕方 計算機科学コースの学生には講義中に別途やり方を指示します.(実験3SWもやるので.) この講義資料の GitHub のページからリポジトリを clone しましょう. OCaml が使えるように環境を設定しましょう. 落ちてきたソースコード中の textbook/interpreter/ ディレクトリの中にインタプリタのソースコードが入っているので,duneコマンドでビルドしましょう. 教科書を読みながらもりもり演習問題を解きましょう. 教科書にバグを見つけたら issue で報告しましょう. 講義の履修者は講義用 Slack で質問してもよいですね. プログラミング言語強者になりましょう.そのためには... なにか自分で言語を作って処理系を作ってみましょう.作った処理系を自慢しましょう.世界中で自作の言語が使われるようになったらいいですね. もしくは,プログラミング言語理論や
バイナリはいつも1つ!! たった1つのバイナリ作る!見た目はコマンド!なかみはPython!その名は、パッケージマネージャー!コナン! 作業用BGM https://t.co/nj0p6lpm8o — こたうち@VTuberエンジニア (@kotauchisunsun) August 22, 2019 大体,言いたいことの9割ぐらいは言えたので満足です. 俺は高校生探偵のsudo sync which.幼なじみで同級生のrunと遊園地に遊びに行って・・・ 先日,Photogrammetry on Docker ~ サーバ屋さんもXRしたい ~という記事を書きました. これは,「フォトグラメトリができるDockerコンテナを作る」というのが主目的ではあったのですが,サブの課題として,「マルチステージビルドをする」「コンテナサイズの削減をする」といった目標がありました.何のため?ということを少
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く