OOC 2024 の発表資料です。後のフィードバックを参考に、より妥当な文言に改訂してあります。 ※本コンテンツには、一部特定の宗教思想の迫害に言及する表現がございますが、そのような行いを肯定する意図の内容ではございません。

Note: Sections 2.0 and 3.0 of this article were added in response to comments on Hacker News and Reddit. Sinceits inception on 2000-05-29,SQLite has been implemented in generic C. C was and continues to be the best language for implementing a software library likeSQLite. There are no plans to recodeSQLite in any otherprogramming language at this time. The reasons why C is the best language to
セガサターンのマルチコントローラー(マルコン)をUSB化するための拡張ユニットを作りました。 マルコンの標準ユニットと付け替えることで、マルコンがUSBゲームパッド化するっていうイカしたやつです。 セガが「拡張ユニット発売予定」と言ってから20年以上の時を経て、やっと現実のものとなりました。 マルコンの説明書に拡張ユニット発売するって書いてた 出典: https://segaretro.org/images/9/9e/MultiControllerSaturnJPManual.pdf なんで作ったか 昔遊んだけど今は遊ばなくなったゲーム機って持ってますか? 押し入れの奥にしまったままだったり、棚に置いたままホコリがかぶってたりしてもったいないなって感じることないですか? 使えるのに使う機会がなくてかわいそうというか、ちょっとした罪悪感を感じるというか、そういう気分になることありますよね。

この辺の話。 静的型付言語は型システムを入れる事で変数への代入や関数適用を禁止する事だと思っているので、any を介して定義とは異なる物を渡せてしまう動作を許してしまっているのに静的と表現するのがモヤモヤする、という意味です。—mattn (@mattn_jp) August 10,2022 例 pic.twitter.com/k4K8R6OZqT—mattn (@mattn_jp) August 10,2022 動的/静的な型付けと強い/弱い型付けはそれぞれ違う概念な気が。 https://t.co/OhpkXV6U1s— odz (@odz) August 11,2022 (中略) 静的型付の定義は型システムにより型付きの関数引数や変数へ異なる型の値が適用される際にはエラーになる(または警告される)というのが僕の認識なのです。—mattn (@mattn_jp) Augus
かなり雑に書いてるので、雑に読んでください。Bun がZig で開発されていることを知り、そこからZig を調べてみています。 調べていくと自分が求めていた言語っぽいというのがあり、社外では学生に QUIC や TLS 1.3 をZig で OSS を開発してもらうお仕事を出したり、社内では実際に採用に向けて調査を進めています。 そもそもの目的自分の会社では Erlang VM を利用した製品をメインに利用しています。ただ Erlang VM 遅いんです。少なくとも暗号処理であればRust の方が 2 倍ほど速いです。Erlang VM 自体 JIT を採用したり、いろいろ頑張ってくれているのですが劇的な高速化というのは今すぐには難しいのが現実です。 そこで NIFs (Native Implemented Functions) を使って頑張るという戦略があります。早い話が Er
#include <stdio.h> int main(int argc, char* argv[]) { int i; for (i = 1; i <= 100; i++) { if (i % 15 == 0) puts("FizzBuzz"); else if (i % 15 == 0) puts("FizzBuzz"); else if (i % 3 == 0) puts("Fizz"); else if (i % 5 == 0) puts("Buzz"); else printf("%d\n", i); } return 0; } fn main() { let mut x = 1; while x <= 100 { if x % 15 == 0 { println!("FizzBuzz"); } else if x % 3 == 0 { println!("Fizz"); } e

Will Hare replace C? OrRust? OrZig? Or anything else? May 2,2022 by Drew DeVault Nope. If the short answer leaves you wanting, keep reading. I must admit that this sentence from the Hare announcement may have caused some confusion: Hare is mostsimilar to C, and almost all programs written in C can also be written in Hare. This is especially true in the context of the rising and competing compl

LinuxカーネルがCで記述されているというのは誰もが知るところだ。ただ、そのCがかなり昔のC、すなわち1989年の規格である「C89」だという事実については知らない人もいるかもしれない。C89は「ANSI X3.159-1989」、あるいは「ANSI C」としても知られている。Linus Torvalds氏は、そろそろC89に別れを告げる時だと判断し、Linuxカーネルの公式な開発言語を2011年規格の「C11」に移行しようとしている。 これは見かけほど大きな変更ではない。C89は現在でもほぼ普遍的にサポートされている。どのようなCコンパイラーでも以前の規格との後方互換性を備えているため、C89で記述されたプログラムのコンパイルや実行は問題にならない。つまり、C11準拠のコンパイラーでも、C89で記述されたレガシーなコードによって問題が引き起こされることはないはずだ。 Torvalds氏

初出:技術評論社刊「ソフトウェアデザイン 2021年9月号」 先日、技術評論社よりRustのメモリ管理機能についての特集に寄稿させて頂きました。 この記事は自分が寄稿させていただいた記事をブログ用に一部推敲・加筆を加えたものです。 なお、ソフトウェアデザインでの特集ではより実践的な例でのメモリ管理についての解説もあるので、興味のある方は本誌のほうも手にとっていただければと思います。 プログラム言語におけるメモリ管理の課題プログラミングにおける課題の一つとしてどうやってメモリ領域(ヒープ領域)を管理するかというものがあります。 C言語ではmalloc/free関数などを用いて手動でメモリを管理しています。 これらの関数はメモリアドレスを示すポインタを介してメモリ管理を行います。 malloc関数は必要なメモリ領域を確保してその先頭番地のポインタを返し、プログラム内ではその番地のメモリを読み書
2021年4月6日(米国時間)、Googleは公式ブログでAndroidオープンソースプロジェクト(AOSP)がモバイルデバイス向けオープンソースOS「Android」の開発において、オープンソースのシステムプログラミング言語「Rust」の導入を進めていることを明らかにした。Googleは2021年2月に設立された独立非営利団体「Rust Foundation」にも加盟している。Androidはこれまで、「C」や「C++」といったシステムプログラミング言語を用いて開発されてきた。Android開発にRustを導入した目的は、メモリ安全性のバグを予防することにある。 AOSPはこれまでもメモリ安全性のバグの検出や修正、軽減に注力してきたが、さらに予防を強化しようとしている。メモリ安全性を特徴とした言語の採用が、最も費用対効果の高い予防方法だとの認識から、Rustの導入に至った。 Andro

Linuxはプログラミング言語Cの申し子のような存在だ。しかし時は流れ、状況は変わった。RustをLinuxのシステム記述言語として採用しようという動きが少しずつ支持を集めてきている。例を挙げると、Linuxカーネル開発者のための年次カンファレンス「Linux Plumbers Conference(LPC)2020」において、開発者らはLinuxのインラインコード部分でのRustの採用を真剣に議論していた。その議論は現在どうなっているのだろうか?筆者はLinuxの父と目されるLinus Torvalds氏と、Linuxの安定版カーネルのメンテナーであるGreg Kroah-Hartman氏から考えを聞いた。 これはRustに魅了された一部の開発者らによって推し進められている机上の空論ではない。LinuxでRustを積極的に利用しようとするアプローチは、既に世の中で見かけるようになっている


PHPとPythonとRubyの連想配列のデータ構造がそれぞれ4〜5年ほど前に見直され、ベンチマークテストによっては倍以上速くなったということがありました。具体的には以下のバージョンで実装の大変更がありました。PHP 7.0.0 HashTable高速化 (2015/11)Python 3.6.0 dictobject高速化 (2016/12)Ruby 2.4.0 st_table高速化 (2016/12) これらのデータ構造はユーザーの利用する連想配列だけでなく言語のコアでも利用されているので、言語全体の性能改善に貢献しています1。 スクリプト言語3つが同時期に同じデータ構造の改善に取り組んだだけでも面白い現象ですが、さらに面白いことに各実装の方針は非常に似ています。独立に改善に取り組んだのに同じ結論に至ったとすれば興味深い偶然と言えるでしょう2。本稿では3言語の連想配列の従来実

On Fri, May 29, 2020 at 6:08 AM David Laight <David.Laight@aculab.com> wrote: > > A wide monitor is for looking at lots of files. Notnecessarily. Excessivelinebreaks are BAD. They cause real and every-day problems. They cause problems for things like "grep" both in the patterns and in the output, since grep (and a lot of other very basic unix utilities) is fundamentallyline-based. So the fact
Pythonアプリを高速化できるCythonについてざっくりと浅めにまとめた。 Cythonとは CythonはPythonのスーパーセットなプログラミング言語、またはそのコンパイラ。 Cythonで書かれたコードは最適化されたC(またはC++)のコードにコンパイルできる。 最新版(2020年5月時点で0.29.6)のマニュアルはこれ。 Cythonによる高速化Pythonは動的型付けのインタプリタ型言語で、変数アクセスや関数呼び出しのたびに処理系が型を解決する必要があって遅い。 演算子の処理やプロパティアクセスがメソッド呼び出しになったりするのもオーバーヘッドになっている。 特にforループが非常に遅く、数値計算をforで回すようなコードはJavaの10倍、Cの数百倍くらい遅い。 Cythonで事前にコンパイルすることで、最適化されたりインタプリタ型という特性による遅さが改善されるので
C言語で配列の要素数を数えるイディオムってのがあって、 sizeof(array) / sizeof(array)なんだけど、配列名が長くなって、たとえば sizeof(var.that_has_an_array.as_a.member) / sizeof(var.that_has_an_array.as_a.member[0])とかになるとカオス。 なので、ベンダーによっては、 #define _countof(array) (sizeof(array) / sizeof(array[0]))みたいなマクロを提供していたりするんだけど、こうやって、何も考えずに使えるようにしていくと、配列ではなくポインタを引数に渡しちゃって、サイズ計算ミスって変な動作する懸念が増してくる。 なので、Twitterで C言語で、ある値がポインタなのか配列なのかを知る方法ってあるのかなぁ(gcc/clang拡
このブログを書いてる経緯rust.tokyo 楽しみ!絶対行く!といってたのに申込みを忘れたところ、じゃあスタッフとしてブログを書けという話になったので、ブロガー枠?らしく感想を書きます。とはいえ書けるのは見たやつだけです。 https://rust.tokyo/sessions# 前提 自分は低レベルプログラミングは詳しくないです。年に3日ぐらい思い出したようにRust 勉強することがある。wasm 周りのエコシステムはずっと追ってる。 会場の雰囲気 組み込み勢とブロックチェーン勢が多そうな気配を感じた。 Visualization of mechanical CAD drawings usingWebAssembly and WebGL Aki / CADDi (発表資料見つからず) 概要 Computeraided design (CAD) models used in m
安全でないもの - void * (C) いろいろあるんだろうけど、Cから始めよう。void*にはなんでもキャストできるし、元の型に戻すこともできる。まあany。問題は変なことをやった場合。(Cはよくわからないから誰かが例を書いてくれ。) キャストによって変な型が得られた場合の挙動は未定義なんだと思う。(知らないから、誰か仕様を調べてくれ。)未定義というのは、コンパイラとか計算機は何をしても良いという意味で、 プロセスの実行を止める 最適化によってコードが消える プロセスのメモリを破壊しながら動き続ける 鼻から悪魔が出る などのパターンがありうる。実際には大体SEGVで落ちると思うんだけど、それは仕様には含まれていない。 ここで「安全である」というのは「プログラムの実行中に未定義の状態にならない」という意味である。つまり、Cは安全ではない。 キャストの検査で安全になったもの - dynam
「C」や「C++」に代わるシステムプログラミング言語として「Rust」が注目を集めている。メモリ安全性が高く、メモリ破壊バグといった脆弱(ぜいじゃく)性を作り込みにくいからだ(関連記事)。 ただし、システムプログラミング言語では、高い処理性能が必須条件であり、これがCやC++が使われ続けている理由となっている。Rustはどの程度「速い」のだろうか。ドイツのミュンヘン工科大学で博士課程の学生であるポール・エメリク氏は2019年9月9日、Rustで作成したデバイスドライバの性能評価をGitHubで発表した。 同氏のグループはさまざまな言語で同じ機能を備えたデバイスドライバを記述し、性能を比較している。 何が性能低下を引き起こしているのか 性能評価用に作成したのは、Intelのイーサネットコントローラー向けのLinux用デバイスドライバだ(ixgbeタイプ)。 エメリク氏は解説の冒頭で研究に取

Intel の主席エンジニアの Josh Triplett の Open SourceTechnology Summit 2019 での講演 Intel andRust: the Future of SystemsProgramming を取り上げ、Rust こそがシステムプログラミングの未来であり、C 言語はもはやかつてのアセンブリ言語である。つまり、未だに OS などのシステムプログラミングの大部分で使われる C 言語はRust に置き換えられるのではないかと見る記事である。 「Cを愛して…」という文章をワタシが訳したのももはや10年以上前、C が他言語に置き換えられる未来が遂に来るのかと遠い目になってしまう。もっともワタシ自身、4年近く C 言語でコーディングしてないんだよね……。 でも、本当にそうなるのだろうか? 手近なシステムプログラミングの現場であるLinux カーネ

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く