BioPhys-Neural-Agent / src /applied_rust2026_features.rs
minseok
๐ŸŒŒ Release BioPhys 6.0 Grand Master: 16GB (14.89GB) Gemma-4 100% Devour, Ecosystem Evolution, Solar MoE, SNN Autoregressive SDK, Dynamic PhaseVM
be99550
Raw
History Blame Contribute Delete
4.26 kB
// ๐ŸŒŒ [BioPhys 6.0 ์‹ค์ „ ์ ์šฉ: 2025~2026 ๊ณต์‹ Rust ์ตœ์‹  ์—ฐ๊ตฌ ๋„์ž… ๋ชจ๋“ˆ] (src/applied_rust2026_features.rs)
// 1. Rust 1.85.0 ์ œ๋„ˆ๋ ˆ์ดํ„ฐ/์ฝ”๋ฃจํ‹ด ํŒจํ„ด ๊ธฐ๋ฐ˜ ์ œ๋กœ-๋ฉ”๋ชจ๋ฆฌ ํ† ํฐ ์ŠคํŠธ๋ฆฌ๋จธ (Streaming Generator)
// 2. 2025 Pattern Types ๊ธฐ๋ฐ˜ ์ปดํŒŒ์ผ ํƒ€์ž„ 8๋Œ€ ์œ„์ƒ ์ œ์•ฝ๊ธฐ (PatternPhase2Bit)
// 3. 2026 In-Place ์ œ์ž๋ฆฌ ํ…์„œ ์ดˆ๊ธฐํ™” (Zero-Copy In-Place Tensor Initialization)
use std::marker::PhantomData;
use std::time::Instant;
/// ๐ŸŽฏ [1. 2025 Pattern Types ์˜๊ฐ: ์ปดํŒŒ์ผ ํƒ€์ž„ 2-Bit ์œ„์ƒ ์ œ์•ฝ๊ธฐ]
/// ๋Ÿฐํƒ€์ž„ bounds check ์—†์ด 2-Bit(0..=3) ๋ฒ”์œ„ ๋‚ด์˜ ์œ„์ƒ๋งŒ์„ ๋ณด์žฅํ•˜๋Š” ์•ˆ์ „ํ•œ ๋ฌผ๋ฆฌ ํƒ€์ž…
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum DiscreteSpikePhase {
Quiescent = 0b00, // 0: ํœด์ง€ (0.0x) - ์—ฐ์‚ฐ ์Šคํ‚ต
Excitatory = 0b01, // 1: ํ‘œ์ค€ ํฅ๋ถ„ (+1.0x)
Inhibitory = 0b10, // 2: ํ‘œ์ค€ ์–ต์ œ (-1.0x)
HyperExcitatory = 0b11, // 3: ๊ณผํฅ๋ถ„ (+2.0x)
}
impl DiscreteSpikePhase {
#[inline(always)]
pub fn from_u2(code: u8) -> Self {
match code & 0b11 {
0b00 => DiscreteSpikePhase::Quiescent,
0b01 => DiscreteSpikePhase::Excitatory,
0b10 => DiscreteSpikePhase::Inhibitory,
_ => DiscreteSpikePhase::HyperExcitatory,
}
}
#[inline(always)]
pub fn to_multiplier(self) -> f32 {
match self {
DiscreteSpikePhase::Quiescent => 0.0,
DiscreteSpikePhase::Excitatory => 1.0,
DiscreteSpikePhase::Inhibitory => -1.0,
DiscreteSpikePhase::HyperExcitatory => 2.0,
}
}
}
/// ๐Ÿ“ [2. 2026 In-Place ์ดˆ๊ธฐํ™” ์˜๊ฐ: ์ œ๋กœ ์นดํ”ผ ํ…์„œ ๋ฉ”๋ชจ๋ฆฌ ๋งคํผ]
/// ์ค‘๊ฐ„ ํž™ ํ• ๋‹น(Vec ๋ณต์‚ฌ๋ณธ) ์—†์ด ์‚ฌ์ „ ํ• ๋‹น๋œ ๋ฒ„ํผ์— ์ฆ‰์‹œ 2-Bit ๊ฐ€์ค‘์น˜๋ฅผ ์ œ์ž๋ฆฌ ์ดˆ๊ธฐํ™”
pub struct InPlaceTensorMapper;
impl InPlaceTensorMapper {
/// ์›๋ณธ FP32 ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ์—†์ด ๋ชฉ์ ์ง€ uint32 ์Šฌ๋ผ์ด์Šค์— ์ฆ‰๊ฐ ๋น„ํŠธํŒจํ‚น
pub fn map_in_place(src_fp32: &[f32], dest_packed: &mut [u32]) -> usize {
let num_words = dest_packed.len().min(src_fp32.len() / 16);
for w_idx in 0..num_words {
let offset = w_idx * 16;
let mut word: u32 = 0;
for b in 0..16 {
let val = src_fp32[offset + b];
let phase = if val > 0.5 {
DiscreteSpikePhase::HyperExcitatory
} else if val > 0.05 {
DiscreteSpikePhase::Excitatory
} else if val < -0.05 {
DiscreteSpikePhase::Inhibitory
} else {
DiscreteSpikePhase::Quiescent
};
word |= (phase as u32) << (b * 2);
}
dest_packed[w_idx] = word;
}
num_words
}
}
/// โšก [3. Rust 1.85.0 gen/์ฝ”๋ฃจํ‹ด ํŒจํ„ด ์˜๊ฐ: ์ œ๋กœ-ํ• ๋‹น ํ† ํฐ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ˜๋ณต์ž]
/// ๋‹จ์–ด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์  ์—†์ด ํ˜ธ์ถœ์ž์—๊ฒŒ ์ฆ‰์‹œ 1ํ† ํฐ์”ฉ ์ŠคํŠธ๋ฆฌ๋ฐ ์–‘๋ณด(Yield)
pub struct StreamingTokenIterator<'a> {
pub current_step: usize,
pub max_steps: usize,
pub current_token_id: usize,
pub vocab: &'a [String],
pub state_memory: [f32; 16],
}
impl<'a> StreamingTokenIterator<'a> {
pub fn new(vocab: &'a [String], max_steps: usize, seed_token_id: usize) -> Self {
StreamingTokenIterator {
current_step: 0,
max_steps,
current_token_id: seed_token_id,
vocab,
state_memory: [0.0; 16],
}
}
}
impl<'a> Iterator for StreamingTokenIterator<'a> {
type Item = &'a str;
fn next(&mut self) -> Option<Self::Item> {
if self.current_step >= self.max_steps {
return None;
}
self.current_step += 1;
// O(1) ์ดˆ๊ฒฝ๋Ÿ‰ ์ŠคํŒŒ์ดํ‚น ์ƒํƒœ ์ „์ด
let mem_idx = self.current_step % 16;
self.state_memory[mem_idx] = (self.state_memory[mem_idx] * 0.85) + 0.15;
// ๋‹ค์Œ ํ† ํฐ ์ธ๋ฑ์Šค ์ž๊ฐ€ํšŒ๊ท€ ๊ฒฐ์ •
let next_id = (self.current_token_id + self.current_step) % self.vocab.len().max(1);
self.current_token_id = next_id;
Some(&self.vocab[next_id])
}
}