Lua cu numere întregi w; sunteți un forum de succes absolut - heise online

De fapt, îmi place foarte mult Lua ca limbă, dar a existat până acum
2 lucruri în special care m-au împiedicat să o fac intens
a folosi:

numere

* Acele funcții I/O în care erorile sunt greoaie pentru interogarea cu assert ()
în loc să arunci doar o excepție indiferent de limbă
da acceptat oricum.

* Indexul matricii bazat pe „1”.

Ultima problemă este o aversiune pur personală, dar nu ar fi
motiv serios pentru a nu folosi limba (de aceea am scris
mai sus numai * 2 * motive.)

Fosta problemă ar putea fi rezolvată relativ ușor folosind
Funcțiile I/O sunt împachetate în clase de împachetare, care sunt manuale
Eliminați verificarea erorilor.

Dar este puțin ce se poate face împotriva aritmeticii în virgulă mobilă, ceea ce nu-mi place
a face.

Puteți schimba tipul implicit de la dublu la uint64_t
redenumiți în ceea ce privește limba în sine - tot ce trebuie să faceți este să introduceți un
#definirea schimbării.

Cu toate acestea, ca urmare, nu mai aveți un Lua: în specificația limbii
și în toate bibliotecile de sistem posibile, precum și C-API sunt la
sunt utilizate toate numerele posibile cu virgulă mobilă.

Dacă schimbați tipul de număr global la întreg, ar trebui să faceți acest lucru
De asemenea, rescrieți majoritatea funcțiilor bibliotecii standard
sau uneori chiar își schimbă API-ul.

Majoritatea extensiilor existente pentru Lua ar putea fi atunci
de asemenea, nu îl utilizați, dar ar trebui să îl rescrieți sau cel puțin
plasture semnificativ.

Mai presus de toate, un astfel de interpret modificat nu ar mai fi posibil
Capabil să execute scripturi Lua normale: De facto ați avea unul diferit
Creați limba.

Toate aceste considerații m-au împiedicat până acum să fac acest lucru
Folosind Lua, deși mi-a plăcut mult mai bine decât Perl,
Python, Tcl sau Ruby.

Mi-aș dori ca Lua să funcționeze la fel ca Python
Preocupări privind numerele: Orice numere întregi exacte sau numere cu virgulă mobilă dacă
are un număr de zecimale. Un tip de date zecimal suplimentar
ar fi cireașa de pe tort, dar o puteți privi și direct în
Implementați Lua ca o clasă.

Singurul lucru care contează cu adevărat este că tipul de date încorporat nu este
rămâne forțat un tip cu virgulă mobilă.

Punctul flotant este, de asemenea, perfect OK - punctul mobil este obligatoriu
dar o idiotie:

* Numerele în virgulă mobilă pot fi calculate eficient numai cu un FPU.
Dar mai ales pe computerele mici, în special cu economie de energie, există adesea
fără FPU. Acestea trebuie apoi să emuleze virgulă mobilă în software ce
este mult mai multă muncă, durează mai mult și consumă mai multă energie electrică. Dar
chiar dacă există un FPU, acesta va consuma mai multă energie decât același
Cip care are doar unități întregi și funcțiile FPU
ar fi omis: aritmetica FP necesită pur și simplu inevitabil mai mult
Porți pentru a implementa aritmetica întreagă pe cât de clare sunt
este mai complex. Prin urmare, chiar dacă nu este mai lent, costă
în orice caz mai multă energie electrică. Dar scripturile mele ar trebui să ruleze peste tot
poate sa; Nu le vreau pentru sisteme fără FPU în alte limbi
trebuie să copiați doar pentru că Lua acolo din cauza
Aritmetica în virgulă mobilă este prea lentă.

* Doar inginerii și oamenii de știință au nevoie de numere în virgulă mobilă.
Majoritatea programatorilor care nu se încadrează în aceste categorii,
în realitate nu își doresc niciodată numere în virgulă mobilă, de fapt le vor
Aritmetica zecimală deoarece calculează cu sume de bani. Căci asta este
Aritmetică în virgulă mobilă, dar totală din cauza problemelor de rotunjire
nu sunt adecvate.

* Oamenii cărora le plac calculele exacte, * urăsc * numerele în virgulă mobilă. Asa de
în calculele în virgulă mobilă se întâmplă, de exemplu, ca A + B -
B nu este egal cu A! Mulți oameni cred că aritmetica FP este doar la
operațiuni deosebit de complexe inexact - dar de fapt poate
chiar și cu simpla adunare și scădere a problemelor de rotunjire
vino.

Dar numerele cu virgulă mobilă au încă o utilizare: dacă cu valori măsurate
se lucrează, care este deja inerent supus erorilor de măsurare
documentate și astfel imprecise, acuratețea lor este de obicei completă
suficient. De aici relevanța pentru ingineri și
Om de știință în natură.

Cu toate acestea, trebuie să proceseze sau să proceseze cantități mari de date.
performanța este importantă și, în astfel de cazuri, luați numai
nu Lua la îndemână, ci mai degrabă limbi precum C sau FORTRAN
mână care este * cu adevărat * rapidă cu virgulă mobilă.

Deci, cum să o întoarceți: numerele cu virgulă mobilă ca
Luarea tipului de date standard nu este valabilă în nici un limbaj de interpret
chiar simt.

În BASIC se putea explica istoric și pe computerele BASIC exista
de multe ori pur și simplu nu C sau FORTRAN ca alternativă - prin urmare trebuia
BASIC poate face totul, și, de asemenea, stăpânește virgula mobilă și adesea
nu ți-ai putea permite mai mult decât din cauza lipsei de spațiu în ROM
implementați un tip de date numerice. Dar și asta a fost
încă vremurile în care un interpret BASIC complet în 8 KiB (nu
MB!) ROM trebuia să se potrivească. Chiar și cea mai jalnică ofertă
Sistemele încorporate sunt de obicei mult mai multe astăzi.

Dar Lua ar fi un mare limbaj de script, mai ales pentru
Ideal sunt „cazurile de utilizare a scriptului” care nu sunt relevante pentru virgulă mobilă
ar oferi - și există un punct plutitor ca tip de bază
Blocare pe picior și fără binecuvântare.

Ca tip suplimentar nu este o problemă - ci tipul de bază
un limbaj de script modern ar trebui să fie întreg. (*Cu*
Verificare depășire!) Sau o puteți face ca în Python
Tipuri „variante” care pot face ambele.

Voi obține noul Lua rapid, dar din
Formularea articolului Mă tem că tipul de bază rămâne ca.
înainte de Floating Point și Integer doar un eseu pe jumătate
care este chiar mai lent decât virgula mobilă, deoarece este constant intern
totul este convertit în virgulă mobilă.

Sper, însă, ca temerile mele să se împlinească
nu tu însuți.