Lua с цели числа w; сте абсолютен хит форум - heise online

Всъщност много харесвам Lua като език, но той е съществувал досега
По-специално 2 неща, които ме възпираха да го правя интензивно
да използвам:

цели

* Тези I/O функции, при които грешките са тромави за заявки с assert ()
вместо просто да хвърля изключение, какъвто и да е езикът
да подкрепя така или иначе.

* Индексите на масиви, базирани на "1".

Последният проблем е чисто личен отвращение, но не би бил
сериозна причина да не използвам езика (затова написах
по-горе само * 2 * причини.)

Първият проблем може да бъде решен сравнително лесно с помощта на
I/O функциите са опаковани в класове обвивки, които са ръководството
Премахване на проверката за грешки.

Но малко може да се направи срещу аритметиката с плаваща запетая, което не ми харесва
да направя.

Можете да промените типа по подразбиране от double на uint64_t
преименувайте, що се отнася до самия език - всичко, което трябва да направите, е да въведете
#define change.

В резултат обаче вече нямате Lua: В спецификацията на езика
и във всички възможни системни библиотеки, както и C-API са на
се използват всички възможни цифри с числа с плаваща запетая.

Ако промените типа номер глобално на цяло число, ще трябва
Също така пренапишете повечето функции на стандартната библиотека
или понякога дори променят API.

Тогава биха могли да бъдат повечето от съществуващите разширения за Lua
също не го използвайте, но ще трябва да го пренапишете или поне
кръпка значително.

Преди всичко такъв модифициран тълкувател вече няма да бъде в
Възможност за изпълнение на нормални Lua скриптове: Де факто ще имате различен
Създайте език.

Всички тези съображения досега ми пречеха да го направя
Използвайки Lua, въпреки че ми хареса много по-добре от Perl,
Python, Tcl или Ruby.

Бих искал Lua да работи точно като Python
Проблеми с числата: Всякакви точни цели числа или числа с плаваща запетая, ако
има брой десетични знаци. Допълнителен десетичен тип данни
би било черешката на тортата, но можете да го погледнете и директно в
Внедрете Lua като клас.

Единственото нещо, което наистина има значение е, че вграденият основен тип данни не е такъв
принудително остава тип с плаваща запетая.

Плаваща запетая също е напълно ОК - плаваща запетая е задължителна
но идиотизъм:

* Числата с плаваща запетая могат да бъдат изчислени ефективно само с FPU.
Но особено на малки, особено енергоспестяващи компютри, често има такива
няма FPU. След това те трябва да имитират плаваща запетая в софтуера какво
е много повече работа, отнема повече време и консумира повече електричество. Но
дори да има FPU, той ще консумира повече енергия от същия
Чип, който има само цели числа и функции на FPU
биха пропуснали: FP аритметиката просто неизбежно изисква повече
Портите да се прилагат като целочислена аритметика, както са ясни
е по-сложен. Следователно, дори и да не е по-бавен, струва
във всеки случай повече електричество. Но моите скриптове трябва да работят навсякъде
мога; Не ги искам за системи без FPU на други езици
трябва да дублирате само защото Lua там заради
Аритметиката с плаваща запетая е твърде бавна.

* Само инженери и учени се нуждаят от числа с плаваща запетая.
Повечето програмисти, които не попадат в тези категории,
всъщност едва ли някога искат числа с плаваща запетая, те всъщност ги искат
Десетична аритметика, защото те се изчисляват с парични суми. Защото това е
Аритметика с плаваща запетая, но обща поради проблемите със закръгляването
неподходящ.

* Хората, които обичат точните изчисления, * мразят * числата с плаваща запетая. Така
при изчисления с плаваща запетая се случва например A + B -
B не е равно на A! Много хора вярват, че FP аритметиката е само на
особено сложни операции неточно - но всъщност може
дори и с просто събиране и изваждане на задачи за закръгляване
идвам.

Но числата с плаваща запетая все още имат приложение: Ако с измерени стойности
се извършва работа, която по своята същност вече е обект на грешки в измерването
документирани и по този начин неточни, тяхната точност обикновено е пълна
достатъчно. Оттук значимостта за инженерите и
Природен учен.

Те обаче обикновено трябва да обработват или обработват големи количества данни.
изпълнението е важно и в такива случаи вие само вземате
няма Lua под ръка, а по-скоро езици като C или FORTRAN
ръка, които са * наистина * бързи с плаваща запетая.

И така, как да го обърнете: числата с плаваща запетая като
Вземането на стандартен тип данни не се извършва на нито един език на преводач
наистина смисъл.

На BASIC може да се обясни исторически, а на BASIC компютри е имало
често просто няма C или FORTRAN като алтернатива - следователно трябваше
BASIC може да прави всичко и по този начин също така да овладява плаваща запетая и често
не бихте могли да си го позволите повече от липсата на място в ROM
внедряване на числов тип данни. Но и това беше
все още времената, когато пълен BASIC преводач в 8 KiB (не
MB!) ROM трябваше да се побере. Дори и най-жалките оферти
Вградените системи обикновено са много повече днес.

Но Lua би бил чудесен скриптов език, особено за
Типичните "случаи на използване на скриптове", които не са свързани с плаваща запетая, са идеални
ще предложи - и има плаваща точка като основен тип
Блок на крака и никаква благословия.

Като допълнителен тип не е проблем - а основният тип
съвременният скриптов език трябва да бъде цяло число. (* С *
Проверка за препълване!) Или можете да го направите като в Python
„Вариантни“ типове, които могат да направят и двете.

Ще взема новата Lua бързо, но от
Формулировка на статията Страхувам се, че основният тип остава подобен
преди Floating Point и Integer само половинчато есе
което е дори по-бавно от плаваща запетая, защото постоянно вътрешно
всичко се преобразува в плаваща запетая.

Надявам се обаче страховете ми да се сбъднат
не себе си.