Skip to content

ongeza: urefu(x) -- lengthof kwa safu za ulimwengu (#206) - #208

Merged
Kandemark merged 1 commit into
lugha-swa:mainfrom
anzania-btrfs:ongeza-urefu-lengthof
Sep 11, 2026
Merged

ongeza: urefu(x) -- lengthof kwa safu za ulimwengu (#206)#208
Kandemark merged 1 commit into
lugha-swa:mainfrom
anzania-btrfs:ongeza-urefu-lengthof

Conversation

@anzania-btrfs

Copy link
Copy Markdown
Contributor

Inashughulikia #206.

Kipengele kipya: urefu(x) — kokotoa idadi ya vipengele vya safu
ya ulimwengu (global) x wakati wa kukusanya, kama ukubwa().

Motisha halisi: #197 ilitokea kwa sababu ukubwa wa safu na namba ya
ukaguzi wa kufurika ni namba mbili zinazopaswa kuendana kwa mkono —
zilitengana mara moja. urefu() inaruhusu namba ya pili kutokana
moja kwa moja kutoka kwa tangazo, si kunakiliwa.

Muundo: data_ulimwengu_idadi_ya_kipengele[1024] mpya, ikijazwa
mahali pale pale idadi ya vipengele vya safu inapokokotolewa tayari
kwenye pre-scan ya vigezo vya ulimwengu. uzalishaji_wito inatambua
urefu(jina) na kutafuta jina hilo kwenye jedwali hilo — ikipatikana
na ikiwa ni safu, inatoa mov eax, N moja kwa moja (gharama ya
sifuri ya wakati wa kukimbia). Kigezo kisicho safu ya ulimwengu
kinatoa hitilafu WAZI ya kukusanya (si tabia ya kimya).

Wigo wa toleo hili la kwanza: safu za ULIMWENGU (global) pekee.
Vigezo vya ndani na paramu za kazi bado havitumiki (paramu
zinapungua kuwa kielekezi kwenye C-semantiki, hakuna urefu wa
kuhifadhi kwa vyovyote; vigezo vya ndani vinahitaji ugani wa
jedwali la var_* — nje ya wigo wa PR hii).

Sikubadilisha mkaguzi.swa mwenyewe kutumia urefu() kwenye
kazi_jina_pool licha ya kuwa mfano mzuri — hii ingevunja mnyororo
wa kujitegemea (mbegu.bin, mbegu iliyogandishwa, haitambui urefu()
na inakataa kukusanya stage1.swa). Maelezo kamili yamewekwa kwenye
maoni ya mkaguzi.swa.

Suti kamili 306/306 + fixpoint ya kujitegemea 17/17 zinapita.

Kipengele kipya cha lugha, si urekebishaji wa mdudu. Swa ina
ukubwa(TYPE) (sizeof) tayari, lakini hakuna njia ya kupata idadi ya
vipengele vya safu iliyotangazwa kutoka kwa safu yenyewe -- namba
hiyo lazima ihifadhiwe kwa mkono mahali pengine (mfano ukaguzi wa
kufurika), ikitengana na tangazo halisi la safu inapobadilishwa. Hii
ndiyo hasa iliyosababisha lugha-swa#197 (kazi_jina_pool[131072] na namba ya
ukaguzi wa kufurika zilitofautiana baada ya safu kubadilishwa
16384->131072 bila kubadilisha namba ya pili).

urefu(x) inakokotoa idadi ya vipengele wakati wa kukusanya (zero
gharama ya wakati wa kukimbia, kama ukubwa()), ikitegemea data
ambayo tayari ipo kwenye jedwali la vigezo vya ulimwengu
(data_ulimwengu_size/ni_safu) -- imeongezwa jedwali dogo jipya
(data_ulimwengu_idadi_ya_kipengele) linalojazwa mahali pale pale
idadi ya vipengele inapokokotolewa tayari.

Toleo hili la kwanza linashughulikia safu za ULIMWENGU (global)
pekee -- vigezo vya ndani na paramu za kazi bado hazitumiki, kosa
wazi la kukusanya linatolewa badala ya tabia ya kimya isiyo sahihi.
Sijafanya urekebishaji wa mkaguzi.swa wenyewe kutumia urefu()
kwenye kazi_jina_pool -- ingevunja mnyororo wa kujitegemea (mbegu.bin
haitambui urefu()); maelezo kamili yamewekwa kwenye maoni ya faili.

Suti kamili 304/304 + fixpoint ya kujitegemea 17/17 bado
zinapita.

@Kandemark Kandemark left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nimepitia diff — kipengele kipya kimefungwa vizuri kwa wigo salama (safu za ulimwengu pekee), kinakataa kwa sauti (hitilafu wazi + exit) badala ya tabia ya kimya isiyo sahihi kwa hoja zisizofaa. Maelezo ya kizuizi cha kujitegemea (mbegu.bin haiwezi kutambua urefu() mpya) ni sahihi na ya uaminifu. Suti 306/306 + fixpoint 17/17.

@Kandemark
Kandemark merged commit 6a116f5 into lugha-swa:main Sep 11, 2026
1 check passed
Kandemark added a commit that referenced this pull request Sep 11, 2026
ongeza: urefu(x) -- lengthof kwa safu za ulimwengu (#206)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants