Lua s celými číslami w; ste absolútnym hitom fóra - heise online
V skutočnosti sa mi Lua ako jazyk veľmi páči, ale doteraz existoval
Najmä 2 veci, ktoré mi bránili v tom, aby som to robil intenzívne
použit:

* Tieto I/O funkcie, pri ktorých sú chyby pri dotazovaní pomocou assert () ťažkopádne.
namiesto toho, aby ste hodili výnimku, bez ohľadu na jazyk
áno, aj tak podporované.
* Indexy poľa založené na „1“.
Posledným problémom je čisto osobná averzia, ale to by nebolo
vážny dôvod nepoužívať jazyk (preto som napísal
vyššie iba * 2 * dôvody.)
Prvý problém bolo možné vyriešiť pomerne ľahko pomocou
I/O funkcie sú balené v obálkových triedach, z ktorých jedna je príručka
Odstrániť kontrolu chýb.
Ale proti aritmetike s pohyblivou rádovou čiarkou sa dá urobiť len málo, čo sa mi nepáči
robiť.
Predvolený typ môžete zmeniť z dvojnásobného na uint64_t
premenovať, pokiaľ ide o samotný jazyk - stačí zadať a
# definovať zmenu.
Výsledkom však je, že už nemáte Lua: V jazykovej špecifikácii
a vo všetkých možných systémových knižniciach, ako aj v C-API sa nachádzajú na
používajú sa všetky možné číslice s pohyblivou rádovou čiarkou.
Ak zmeníte typ čísla globálne na celé číslo, museli by ste
Prepíšte tiež väčšinu funkcií štandardnej knižnice
alebo niekedy dokonca zmeniť svoje API.
Väčšina existujúcich rozšírení pre Lua by potom mohla byť
tiež ho nepoužívať, ale musel by ho aspoň prepísať
náplasť výrazne.
Takýto upravený tlmočník by už predovšetkým nebol v
Schopný vykonávať bežné skripty Lua: De facto by ste mali iný
Vytvorte jazyk.
Všetky tieto úvahy mi doteraz v tom bránili
Pomocou Lua, aj keď sa mi to páčilo oveľa lepšie ako Perl,
Python, Tcl alebo Ruby.
Prial by som si, aby Lua fungovala rovnako ako Python
Čísla sa týkajú: Akékoľvek presné celé čísla alebo čísla s pohyblivou rádovou čiarkou, ak
má niekoľko desatinných miest. Dodatočný typ desatinných údajov
by bola čerešnička na torte, ale môžete sa na ňu pozrieť aj priamo v
Implementujte Lua ako triedu.
Jediná vec, na ktorej skutočne záleží, je to, že zabudovaný základný údajový typ nie je
násilne zostáva typ s pohyblivou rádovou čiarkou.
Pohyblivá čiarka je tiež úplne v poriadku - pohyblivá čiarka je povinná
ale idiot:
* Čísla s pohyblivou rádovou čiarkou sa dajú efektívne vypočítať iba pomocou FPU.
Ale hlavne na malých, zvlášť energeticky úsporných počítačoch, často existuje
žiadny FPU. Tie potom musia emulovať pohyblivú rádovú čiarku v softvéri čo
je oveľa viac práce, trvá dlhšie a spotrebuje viac elektriny. ale
aj keď existuje FPU, bude spotrebovávať viac energie ako to isté
Čip, ktorý má iba celočíselné jednotky a funkcie FPU
by bolo vynechané: FP aritmetika jednoducho nevyhnutne vyžaduje viac
Brány implementovať ako celé číslo aritmetické, ako sú jasné
je zložitejšia. Preto, aj keď to nie je pomalšie, stojí to
v každom prípade viac elektriny. Ale moje skripty by mali bežať všade
môcť; Nechcem ich pre systémy bez FPU v iných jazykoch
je potrebné duplikovať len preto, že tam je Lua kvôli
Aritmetika s pohyblivou rádovou čiarkou je príliš pomalá.
* Čísla s pohyblivou rádovou čiarkou potrebujú iba inžinieri a vedci.
Väčšina programátorov, ktorí nespadajú do týchto kategórií,
v skutočnosti len ťažko chcú čísla s pohyblivou rádovou čiarkou, v skutočnosti ich chcú
Desatinná aritmetika, pretože sa počíta s čiastkami peňazí. Pretože to je
Pohyblivá čiarka aritmetická, ale celková kvôli problémom so zaokrúhľovaním
nevhodný.
* Ľudia, ktorí milujú presné výpočty, * nenávidia * čísla s pohyblivou rádovou čiarkou. Takže
pri výpočtoch s pohyblivou rádovou čiarkou sa stane napríklad to, že A + B -
B sa nerovná A! Mnoho ľudí verí, že FP aritmetika je iba na
zložité operácie nepresné - ale v skutočnosti to môže
aj s jednoduchým sčítaním a odčítaním problémov so zaokrúhľovaním
poď.
Čísla s pohyblivou rádovou čiarkou však stále majú svoje použitie: Ak s nameranými hodnotami
prebiehajú práce, ktoré už vo svojej podstate podliehajú chybám merania
dokumentované a teda nepresné, ich presnosť je zvyčajne úplná
dostatočné. Preto je relevantný pre inžinierov a
Prírodovedec.
Spravidla však musia spracovať alebo spracovať veľké množstvo údajov.
výkon je dôležitý a v takýchto prípadoch beriete iba
žiadny Lua po ruke, ale skôr jazyky ako C alebo FORTRAN
ruky, ktoré sú * skutočne * rýchle s pohyblivou rádovou čiarkou.
Ako to teda otočiť: Čísla s pohyblivou rádovou čiarkou ako
Prijatie štandardného dátového typu nefunguje v žiadnom jazyku tlmočníka
naozaj zmysel.
V jazyku BASIC sa to dalo vysvetliť historicky a na počítačoch BASIC to bolo
často jednoducho žiadne C alebo FORTRAN ako alternatíva - preto museli
BASIC dokáže všetko, a teda aj zvládnuť pohyblivú rádovú čiarku, a často
nemohli ste si to dovoliť viac ako pre nedostatok miesta v ROM
implementovať číselný dátový typ. Ale aj to bolo
stále časy, keď bol kompletný tlmočník BASIC v 8 KiB (nie
MB!) ROM sa muselo zmestiť. Aj tie najpatetickejšie ponuky
Vstavané systémy sú dnes zvyčajne oveľa viac.
Ale Lua by bol vynikajúci skriptovací jazyk, zvlášť pre
Ideálne sú typické „prípady použitia skriptu“, ktoré nesúvisia s pohyblivou rádovou čiarkou
by ponúkol - a ako základný typ existuje pohyblivá čiarka
Blok na nohe a žiadne požehnanie.
Ako doplnkový typ to nie je problém - ale základný typ
moderný skriptový jazyk by mal byť celé číslo. (* S *
Overflow check!) Alebo to môžete urobiť ako v Pythone
„Variantné“ typy, ktoré dokážu oboje.
Novú Luu získam rýchlo, ale z
Formulácia článku Obávam sa, že základný typ zostáva taký
pred plávajúcou desatinnou čiarkou a celým číslom iba polovičná esej
čo je ešte pomalšie ako s plávajúcou desatinnou čiarkou, pretože neustále vnútorné
všetko sa prevedie na plávajúcu desatinnú čiarku.
Dúfam však, že sa moje obavy naplnia
nie seba.