Copper – オブジェクト指向とジェネリクスを実装した軽量型プログラミング言語

2026/10/31 4:09

Copper – オブジェクト指向とジェネリクスを実装した軽量型プログラミング言語

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

Copper は、学習者のためにシンプルさと親しみやすさを最優先し、限られた技術的バックグラウンドを持つ学習者にも対応することを目的として設計された、C のミニマリストで直接的な後継言語です。その核心となる哲学は、複雑性を排斥することにより、単純な構造に依存し、標準ライブラリにアクセスするには「std」という単一のインポートステートメント(BSD オープンソースライセンスの下で配布)のみを必要とします。この明示的なアプローチは、「Point」クラスが x および y 属性を持ち、それぞれ Int タイプであることを示す例コードによって実装されています。「init(x: Int, y: Int)」および「translate(dx: Int, dy: Int)」といったメソッドも同様に含まれています。「main」関数の典型的な例では、ポイントの初期化、それらの移動(翻訳)、座標の表示を示しています。C の構造的な親しみやすさを維持しつつ、参入障壁を低くすることで、軽量なソリューションを求める個人や組織に対して、核心となるプログラミング概念への教育的架け橋として機能し、本質的なロジックが不透明な抽象化に隠されるのではなく、透明であるようにすることを確保します。

本文

Copper言語の紹介:シンプルさのための設計哲学

言語の特徴

Copper は、C の代わりに採用しているプログラミング言語です。主な特徴は以下の通りです:

  • 最小限主義の徹底
    • 言語自体を極めてシンプルに設計しています。
    • 頭脳容量が限られた人間でも完全に理解できるように作られています。
  • 簡潔で明示的な文法
    • ほぼすべての要素が明示的です。
    • 構文の大部分が一般的な記法を採用しています。

サンプルコード

「Hello, World!」よりも実用的なシンプルなサンプルコードです:

class Point
    attr x: Int
    attr y: Int

    def init(x: Int, y: Int)
        self.x = x
        self.y = y
    end

    def translate(dx: Int, dy: Int)
        self.x += dx
        self.y += dy
    end
end

func main: Int
    var pt: Point!
    pt.init(3, 5)
    pt.translate(1, 0)
    println("x = \a, y = \a", pt.x, pt.y)
    return 0
end

import "std"

ライセンス情報

Copper は BSD ライセンスの下で提供されています。

同じ日のほかのニュース

一覧に戻る →

2026/11/02 0:58

Show HN: HackerBooks – ハッカートビューのように、HN で言及された本のためのサービス

## Japanese Translation: このテキストは、マウス使用よりも効率を優先したアプリケーション内でのキーボードナビゲーションの習得に必要な手順を提供しています。核心的なメッセージは、特定のキーが本間の移動や異なるコンテンツビューへの瞬時のアクセスを可能にする直接コマンドとして機能することです。例えば、`/` を入力するとフォーカス検索バーが有効化され、`j` または `k` を押すことで家(Home)行から手を離さずにリスト内で縦方向に移動できます。`Enter` を押すとフォーカスされた本が開かれ、`Esc` はウィンドウを閉じたり前の画面に戻ったりします。また、`g` の組み合わせ(例:`g h`, `g t`, `g m`)は、ホーム、全時間最高位、最も推奨されるなどの特定セクションへの直接ジャンプを可能にします。さらに、`?` はヘルプコマンドを表示します。これらのショートカットにより、マウスへの依存が軽減され、カテゴリへの高速アクセスやデジタルライブラリの滑らかな管理が実現されます。結果として、このシステムはユーザーに対しインターフェースに対する即時の制御力を付与し、基本的なナビゲーションタスクを迅速なアクションに変換することで、全体の生産性と使いやすさを向上させます。なお、このガイドは現在の機能への参照ツールとしての役割に限定されています。

2026/10/30 13:17

Nibnib:解凍速度が極めて高速な画像圧縮

## Japanese Translation: nibnib イメージ形式は、RP2350 マイクロコントローラ上で高速かつ決定論的なデコードを目的とした専用圧縮方式である。入力バイト 1 つあたり 2 ピクセルの並列デコードを行い、約 6 クロックサイクルで 1 ピクセル当りのデコードを完了し、4bpp の圧縮比を実現する。絶対値カラーを保持する標準的なパレット形式とは異なり、nibnib はパレットにカラーデルタを格納し、Floyd-Steinberg エラー拡散法を用いて人間の視覚感度特性をモデル化することで滑らかな領域での画質向上を図る。デコード処理は完全に決定論的であり、直前までにデコードされた最終ピクセルを 2 倍とし、ストリームからバイトを読み込みパレットでアップルックして加算し、入力バイト 1 つあたり 2 ピクセルの 16bpp(RGB 565)を生成する。一方、エンコーディングは非対称であり大幅に低速である。可能となるパレットとコードワードの組み合わせに対して探索を行い、立方体を小さなデルタ値および加重付きガウスランダムエントリで構成した初期化から始め、高品質な複製へデコード可能なエンコーディングを選択する。その貪欲的な左から右への探索手法のため、現時点ではシャープなエッジの右側に残留アーティファクトが生じるが、将来のバージョンでは右から左またはブーストロホン方式によるエンコーディングによりこの影響を低減することが可能である。イメージのレイアウトは、2 バイトで幅と高さを格納するヘッダー、256 エントリの 32 ビットパレット、そして各行が 2 ピクセルに続き ((width − 2)/2) バイトのパレットインデックスを持つ構成となっている。追加的なメタデータフィールドは存在せず、この形式はアーカイブストレージではなくリアルタイムレンダラーとの緊密な統合を意図している。元々 RP2350 での DVI 出力実験として開発された nibnib は、Apache License 2.0 または MIT ライセンスのいずれかを選択して vic-2350 リポジトリで入手可能である。

2026/10/28 18:46

AFL++ を活用したより効果的なファスティングテストのためのヒント

## Japanese Translation: 6 年間の約 1,000 プロジェクトのテストに基づき、著者は AFL++ が Linux 上の C/C++ fuzzing プラットフォームとして決定版であると主張し、ファジー化されていないソフトウェアにはほぼ間違いなくバグが含まれていることを確認しています。速度を損なうことなく脆弱性の検出を最大化するためには、公式文書で強調されている特定のハイパフォーマンス構成を採用すべきです。主要な最適化策には、クラッシュ間でプログラムの状態を維持するパシストンモードの利用(通常は 10 倍ほど高速化)、`afl-gcc-fast` とともに `-fsanitize=address,undefined` および他のフラグでサニタイザーを設定することが含まれます。具体的なチューニングも不可欠であり、デフォルトの 4KiB リミットを超えて `max_malloc_fill_size` を増やすことで use-after-free エラーを検出し、`detect_stack_use_after_return` を有効化し、GCC の libstdc++ で `-D_GLIBCXX_DEBUG` を用いてコンテナオーバーフローを検出します。さらに、単一の翻訳単位(instrumented target と uninstrumented library)でビルドすることで静的関数の設定を簡略化でき、テスト設計ではグローバル状態の干渉を最小限に抑え、ASan による読み取りミスを防ぐために直接バッファ渡しを避け、ファイル入力は `memfd_create` を使用する必要があります。これらのターゲット指向な調整により、デフォルト設定で見逃されがちな重要なメモリ安全性の問題を発見でき、大規模な fuzzing キャンペーンの徹底的さを大幅に向上させます。

Copper – オブジェクト指向とジェネリクスを実装した軽量型プログラミング言語 | そっか~ニュース