Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Using an array as a slice causes a compiler error

オープン
#465 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
38/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
rust
領域
compilers

調査の方向性

まず、issue にある最小限の Rust 例をコンパイルし、&data を &[u32] パラメーターに渡す do_work 呼び出しに注目します。コンパイラーによる配列からスライスへの変換の処理を追跡し、compute shader のエントリーポイントを使って例が正常にコンパイルされることを確認します。

索引モデルが issue の本文から書いたものです。

説明

bug

I'm surprised I haven't hit this earlier, but it's not possible to pass an array as a slice. Is this a known limitation? Is there an easy workaround?

Expected Behaviour

I would expect to be able to pass an array like [u32; 3] as a parameter to a function that takes a slice.

Example & Steps To Reproduce

Here is a minimal reproducible example:

#![no_std]
#![allow(unexpected_cfgs)]

fn do_work(data: &[u32], slab: &mut [u32]) {
    slab[0] = data[0];
    slab[1] = data[1];
    slab[2] = data[2];
}

#[spirv(compute(threads(16)))]
pub fn compute_shader(
    #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] slab: &mut [u32],
    #[spirv(global_invocation_id)] global_id: glam::UVec3,
) {
    let data = [global_id.x, global_id.y, global_id.z];
    do_work(&data, slab);
}

System Info

  • Rustc version: 1.90
  • spirv-std: from the latest main, b3eda4df9814b6176d3c0844eb67f70a22ebb378 as of this writing
  • SPIR-V version:
    ❯ spirv-val --version
    SPIRV-Tools v2025.3 unknown hash, 2025-06-23T19:59:33+00:00
    Targets:
      SPIR-V 1.0
      SPIR-V 1.1
      SPIR-V 1.2
      SPIR-V 1.3
      SPIR-V 1.4
      SPIR-V 1.5
      SPIR-V 1.6
      SPIR-V 1.2 (under OpenCL 2.2 Full Profile semantics)
      SPIR-V 1.0 (under Vulkan 1.0 semantics)
      SPIR-V 1.3 (under Vulkan 1.1 semantics)
      SPIR-V 1.4 (under Vulkan 1.1 semantics)
      SPIR-V 1.5 (under Vulkan 1.2 semantics)
      SPIR-V 1.6 (under Vulkan 1.3 semantics) SPIR-V 1.6 (under Vulkan 1.4 semantics)
    
主要言語
Rust
スター
3.4k
フォーク
126
PR マージ指標
30日以内にマージされた PR はありません

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Rust-GPU/rust-gpu のほかの issue

Rust-GPU/rust-gpu の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。