Files
sanbuphy f44c842fe7 feat(docs): update computer fundamentals content and demos
- Refactor frontend framework demo descriptions for clarity
- Remove interactive features from triad and field map demos
- Add new computer organization and DSL documentation links
- Split type systems and compilers into separate pages
- Enhance power-on-to-web article with relay race analogy
- Add new interactive demos for type systems and compilation
- Improve visual presentation of boot process and hardware flow
- Introduce new Vibe Coding flow demo component
2026-02-25 01:38:27 +08:00

187 lines
8.4 KiB
Vue
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="cisc-risc-demo">
<h4> 两种设计哲学CISC vs RISC</h4>
<p class="desc">点击对比维度看两种指令集架构的核心差异</p>
<div class="arch-toggle">
<button
:class="['toggle-btn', { active: view === 'cisc' }]"
@click="view = 'cisc'"
>
CISC (x86)
</button>
<button
:class="['toggle-btn', { active: view === 'both' }]"
@click="view = 'both'"
>
对比
</button>
<button
:class="['toggle-btn', { active: view === 'risc' }]"
@click="view = 'risc'"
>
RISC (ARM)
</button>
</div>
<div v-if="view === 'both'" class="comparison-grid">
<div v-for="dim in dimensions" :key="dim.label" class="dim-row">
<div class="dim-cisc">{{ dim.cisc }}</div>
<div class="dim-label">{{ dim.label }}</div>
<div class="dim-risc">{{ dim.risc }}</div>
</div>
</div>
<div v-else class="arch-detail">
<div class="detail-card">
<div class="card-header" :class="view">
<span class="card-title">{{ archData[view].name }}</span>
<span class="card-full">{{ archData[view].full }}</span>
</div>
<div class="card-philosophy">
<span class="phi-label">设计哲学</span>
<span>{{ archData[view].philosophy }}</span>
</div>
<div class="card-analogy">
<span class="ana-label">类比</span>
<span>{{ archData[view].analogy }}</span>
</div>
<div class="card-example">
<div class="example-title">{{ archData[view].exampleTitle }}</div>
<pre class="example-code">{{ archData[view].example }}</pre>
<div class="example-note">{{ archData[view].exampleNote }}</div>
</div>
<div class="card-products">
<span class="prod-label">代表产品</span>
<span v-for="p in archData[view].products" :key="p" class="prod-tag">{{ p }}</span>
</div>
</div>
</div>
<div class="real-world">
<div class="rw-title">🌍 现实中的选择</div>
<div class="rw-items">
<div class="rw-item">
<span class="rw-device">💻 你的电脑</span>
<span class="rw-arch">x86 (CISC)</span>
<span class="rw-why">兼容几十年的软件生态</span>
</div>
<div class="rw-item">
<span class="rw-device">📱 你的手机</span>
<span class="rw-arch">ARM (RISC)</span>
<span class="rw-why">低功耗电池续航更久</span>
</div>
<div class="rw-item">
<span class="rw-device">🍎 Apple Silicon</span>
<span class="rw-arch">ARM (RISC)</span>
<span class="rw-why">高性能低功耗颠覆了笔记本市场</span>
</div>
<div class="rw-item">
<span class="rw-device">🔬 RISC-V 开发板</span>
<span class="rw-arch">RISC-V (RISC)</span>
<span class="rw-why">开源免费IoT 和教育领域崛起</span>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
const view = ref('both')
const dimensions = [
{ label: '指令数量', cisc: '上千条复杂指令', risc: '几十到几百条精简指令' },
{ label: '单条指令', cisc: '一条能做很多事', risc: '一条只做一件事' },
{ label: '指令长度', cisc: '变长(1-15字节)', risc: '定长(通常4字节)' },
{ label: '执行速度', cisc: '复杂指令多周期', risc: '大多数单周期完成' },
{ label: '功耗', cisc: '较高', risc: '较低' },
{ label: '流水线', cisc: '难优化(指令长度不一)', risc: '易优化(指令整齐)' },
{ label: '编译器负担', cisc: '轻(硬件做更多)', risc: '重(软件做更多优化)' }
]
const archData = {
cisc: {
name: 'CISC',
full: 'Complex Instruction Set Computer',
philosophy: '让硬件尽可能强大,一条指令完成复杂操作,减轻编译器负担',
analogy: '像一把瑞士军刀——功能多,但每个功能不一定最好用',
exampleTitle: '用一条指令完成「内存加法」',
example: 'ADD [0x1000], R1\n; 一条指令完成:读内存 → 加法 → 写回内存\n; CPU 内部拆成多个微操作执行',
exampleNote: 'CISC 允许指令直接操作内存,一条指令背后可能是 5-6 个微操作',
products: ['Intel Core', 'AMD Ryzen', 'x86 服务器']
},
risc: {
name: 'RISC',
full: 'Reduced Instruction Set Computer',
philosophy: '让每条指令尽可能简单快速,复杂操作由多条简单指令组合完成',
analogy: '像一套专业工具——每个工具只做一件事,但做得又快又好',
exampleTitle: '用三条指令完成同样的「内存加法」',
example: 'LOAD R2, [0x1000] ; 第1步:从内存读数据到寄存器\nADD R2, R2, R1 ; 第2步:寄存器之间做加法\nSTORE R2, [0x1000] ; 第3步:把结果写回内存',
exampleNote: 'RISC 要求数据先加载到寄存器,运算只在寄存器间进行,结果再存回内存',
products: ['Apple M 系列', '高通骁龙', 'AWS Graviton', 'RISC-V']
}
}
</script>
<style scoped>
.cisc-risc-demo {
padding: 20px; border: 1px solid var(--vp-c-divider);
border-radius: 12px; margin: 16px 0; background: var(--vp-c-bg-soft);
}
h4 { margin: 0 0 4px; }
.desc { color: var(--vp-c-text-2); font-size: 14px; margin: 0 0 16px; }
.arch-toggle { display: flex; gap: 4px; margin-bottom: 16px; background: var(--vp-c-bg); border-radius: 8px; padding: 4px; }
.toggle-btn {
flex: 1; padding: 8px; border: none; border-radius: 6px;
background: transparent; cursor: pointer; font-size: 13px; font-weight: 600; transition: all 0.2s;
}
.toggle-btn.active { background: var(--vp-c-brand-1); color: #fff; }
.comparison-grid { display: flex; flex-direction: column; gap: 6px; margin-bottom: 16px; }
.dim-row { display: grid; grid-template-columns: 1fr auto 1fr; gap: 8px; align-items: center; }
.dim-cisc, .dim-risc {
padding: 8px 12px; border-radius: 6px; font-size: 12px;
background: var(--vp-c-bg); border: 1px solid var(--vp-c-divider);
}
.dim-cisc { text-align: right; }
.dim-label {
padding: 4px 10px; background: var(--vp-c-brand-1); color: #fff;
border-radius: 12px; font-size: 11px; font-weight: 600; white-space: nowrap;
}
.arch-detail { margin-bottom: 16px; }
.detail-card { border: 1px solid var(--vp-c-divider); border-radius: 8px; background: var(--vp-c-bg); overflow: hidden; }
.card-header { padding: 10px 14px; display: flex; align-items: center; gap: 10px; }
.card-header.cisc { background: #dbeafe; }
.card-header.risc { background: #dcfce7; }
.card-title { font-size: 16px; font-weight: 700; }
.card-full { font-size: 12px; color: var(--vp-c-text-3); }
.card-philosophy, .card-analogy { padding: 8px 14px; font-size: 13px; border-bottom: 1px solid var(--vp-c-divider); }
.phi-label, .ana-label { font-weight: 600; font-size: 12px; color: var(--vp-c-text-3); margin-right: 6px; }
.card-example { padding: 12px 14px; border-bottom: 1px solid var(--vp-c-divider); }
.example-title { font-size: 12px; font-weight: 600; margin-bottom: 6px; }
.example-code { padding: 8px 10px; margin: 0; font-size: 12px; line-height: 1.5; background: var(--vp-c-bg-soft); border-radius: 4px; white-space: pre-wrap; }
.example-note { font-size: 11px; color: var(--vp-c-text-3); margin-top: 6px; }
.card-products { padding: 10px 14px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.prod-label { font-size: 12px; color: var(--vp-c-text-3); font-weight: 600; }
.prod-tag { font-size: 11px; padding: 2px 8px; background: var(--vp-c-brand-soft); color: var(--vp-c-brand-1); border-radius: 4px; }
.real-world { padding: 12px 14px; background: var(--vp-c-brand-soft); border-radius: 8px; }
.rw-title { font-weight: 600; font-size: 13px; margin-bottom: 8px; }
.rw-items { display: flex; flex-direction: column; gap: 6px; }
.rw-item { display: flex; align-items: center; gap: 8px; font-size: 12px; padding: 6px 8px; background: var(--vp-c-bg); border-radius: 6px; }
.rw-device { font-weight: 600; min-width: 110px; }
.rw-arch { padding: 2px 8px; background: var(--vp-c-brand-soft); border-radius: 4px; font-weight: 500; white-space: nowrap; }
.rw-why { color: var(--vp-c-text-2); }
@media (max-width: 640px) {
.dim-row { grid-template-columns: 1fr; gap: 4px; }
.dim-cisc { text-align: left; }
.dim-label { justify-self: start; }
.rw-item { flex-wrap: wrap; }
}
</style>