Référence
Limites
Tous les nombres des ordinateurs : vitesse, mémoire et ses coûts, écrans, stockage, réseau, évènements et limites du langage.
Toutes les limites des ordinateurs et du langage, au même endroit. La dernière colonne donne le fichier du mod où le nombre est fixé, pour les curieux. Le propriétaire du serveur peut en changer quelques-unes dans world/serverconfig/computingages-server.toml : elles sont marquées « config ».
#Les six ordinateurs
| Ordinateur | os.tier() | Instructions par tick | Par seconde à 256 tr/min | Mémoire (cellules) | Stress (us par tr/min) |
|---|
| Calculateur à tubes | 1 | 20 | 400 | 2 048 | 16 |
| Ordinateur à transistors | 2 | 80 | 1 600 | 8 192 | 8 |
| Mini-ordinateur | 3 | 300 | 6 000 | 32 768 | 4 |
| Micro-ordinateur | 4 | 1 200 | 24 000 | 131 072 | 2 |
| Microcontrôleur | 4 | 400 | 8 000 | 16 384 | 1 |
| Ordinateur moderne | 5 | 5 000 | 100 000 | 1 048 576 | 1 |
| Ordinateur | Écran | Texte (colonnes × lignes) | Dessin gfx (pixels) | Stockage | Réseau |
|---|
| Calculateur à tubes | téléscripteur papier | 40 × 14 | aucun : pas de gfx | Paquet de cartes perforées, 4 Ko | aucun |
| Ordinateur à transistors | phosphore vert | 51 × 19 | 306 × 171 | Bobine de bande magnétique, 16 Ko | aucun |
| Mini-ordinateur | phosphore ambre | 51 × 19 | 306 × 171 | Disquette, 64 Ko | Câble de données |
| Micro-ordinateur | 16 couleurs | 51 × 19 | 306 × 171 | Disquette, 64 Ko | Câble de données, Modem radio, Routeur Wi-Fi |
| Microcontrôleur | 16 couleurs | 40 × 12 | 240 × 108 | mémoire soudée, 16 Ko | Câble de données, Modem radio, Routeur Wi-Fi |
| Ordinateur moderne | 16 couleurs | 64 × 24 | 384 × 216 | SSD, 1 Mo | Câble de données, Modem radio, Routeur Wi-Fi |
Bibliothèques selon l'ordinateur : gfx partout sauf sur le Calculateur à tubes, net à partir du Mini-ordinateur, vehicle sur le Micro-ordinateur, le Microcontrôleur et l'Ordinateur moderne. Les valeurs de stress sont celles de la config par défaut (une clé par ordinateur). Source : ComputerTier.java, CAConfig.java, ComputerApis.java.
#Vitesse
| Limite | Valeur | Source |
|---|
| Pleine vitesse | à 256 tr/min, dans un sens ou dans l'autre ; plus vite n'apporte rien de plus | ComputerTier.java |
| Sous 256 tr/min | proportionnelle : moitié à 128 tr/min, un huitième à 32 tr/min ; les fractions d'instruction s'additionnent d'un tick à l'autre | Machine.java |
| Sans rotation, ou en surcharge | l'ordinateur est figé : aucune instruction, minuteurs et sleep en pause | ComputerBlockEntity.java |
| Coût d'une instruction | 1 ; un appel de bibliothèque coûte 1 plus son surcoût (tableau ci-dessous) | Interpreter.java |
| Budget restant quand le programme attend | perdu pour ce tick | Machine.java |
| Attentes déjà satisfaites | le programme reprend dans le même tick, 16 fois par tick au plus | Machine.java |
| Surcoûts au-delà du budget | une dette, remboursée aux ticks suivants | Interpreter.java |
Changements du monde (redstone, Liaisons de redstone, set_speed) | appliqués une fois, à la fin du tick de l'ordinateur ; la dernière valeur demandée l'emporte | ComputerBlockEntity.java |
| Démarrages | un tous les 10 ticks au plus (une demi-seconde) ; un redémarrage plus rapproché attend | ComputerBlockEntity.java |
| Ordinateurs par tick du serveur | 512 (config maxComputersTickedPerTick, de 16 à 100 000) ; au-delà, les autres tournent un tick sur deux | CAConfig.java |
Les divisions sont arrondies vers le bas : afficher 40 caractères coûte 1 + 2 instructions.
| Appel | Instructions en plus |
|---|
print, write, term.write | 1 par tranche de 16 caractères |
fs.read, fs.write, fs.append | 1 par tranche de 16 caractères |
fs.copy | 1 par tranche de 16 octets copiés |
import | 1 par tranche de 16 caractères du fichier |
string.find, string.split | 1 par tranche de 16 caractères du texte |
string.rep | 1 par tranche de 8 répétitions |
table.insert à une position | 1 par tranche de 8 éléments de la liste |
table.remove | 1 par tranche de 8 éléments après la position |
table.concat | 1 par tranche de 16 caractères du résultat |
table.contains | 1 par tranche de 8 éléments |
table.sort sans fonction | environ n × log2(n) pour n éléments |
table.sort avec une fonction | chaque comparaison est un appel de votre fonction |
gfx.pixel, gfx.line, gfx.rect, gfx.circle, gfx.triangle, gfx.clear, gfx.fill, gfx.scroll | 1 par tranche de 64 pixels touchés |
gfx.text | caractères × échelle × échelle |
gfx.image | 1 par ligne, plus 1 par tranche de 64 pixels |
os.memory | 1 + 1 par tranche de 16 cellules utilisées (elle mesure la mémoire) |
net.send | 32, plus le parcours du réseau et la copie des données |
net.broadcast | 64 + 8 par ordinateur joignable, plus le parcours et la copie |
net.computers, net.networks | 64, plus le parcours du réseau |
peripheral.list, peripheral.find | 16 + 4 par bloc qui touche le réseau du Câble de données |
peripheral.wrap | 8 |
Un nom de réseau (type@x,y,z) | 1 par tranche de 4 blocs qui touchent le réseau |
vehicle.position, vehicle.velocity, vehicle.speed | 8 |
list, count, push d'un inventaire | 1 par emplacement de l'inventaire |
stress, capacity d'un bloc cinétique | 1 par bloc du réseau cinétique |
Le parcours du réseau coûte 1 par bloc qui touche le réseau du Câble de données de l'ordinateur, plus, sur le Micro-ordinateur, le Microcontrôleur et l'Ordinateur moderne, 1 par ordinateur chargé dans le monde. La copie d'un message coûte 1 par valeur plus 1 par tranche de 16 caractères. Sources : les bibliothèques (BaseLib.java, FsLib.java, StringLib.java, TableLib.java, GfxLib.java, NetApi.java, PeripheralApi.java, VehicleApi.java, DeviceAdapters.java).
#Mémoire
La mémoire d'un ordinateur se compte en cellules. Seules les données que le programme peut encore atteindre comptent : une table vers laquelle plus aucune variable ne pointe est à nouveau libre.
| Quoi | Cellules | Source |
|---|
| Une table | 4 | Interpreter.java |
| Chaque entrée d'une table (clé et valeur) | 2, plus les cellules d'un texte ou d'une table qu'elle contient | Interpreter.java |
| Un texte | 1 + 1 par tranche de 8 caractères (un texte de 100 caractères : 13 cellules) | Values.java |
Un nombre, un booléen, nil | rien de plus que la case qui le contient | Interpreter.java |
| Une variable globale | 2 + les cellules de son nom, plus sa valeur | Interpreter.java |
| Une valeur de fonction | 4 | Interpreter.java |
| Les variables locales d'un fichier (au niveau du fichier) | 1 chacune | Interpreter.java |
| Le code d'un fichier | 1 par tranche de 4 mots de bytecode + 1 par constante + 4 par fonction | Proto.java |
| Un appel en cours | 8, plus 1 par valeur sur la pile | Interpreter.java |
| Un évènement en attente dans la file | 6 + 2 par champ + les cellules de ses textes et tables | Event.java |
Les bibliothèques (math, term...) | gratuites | Interpreter.java |
| Limite | Valeur | Source |
|---|
| Mesurer la mémoire | os.memory() la mesure sur-le-champ, pour 1 instruction par tranche de 16 cellules | OsLib.java |
| Quand le compte dépasse la capacité | la mémoire est mesurée à nouveau ; out of memory seulement si les données vivantes la dépassent vraiment | Interpreter.java |
| Mémoire de réception | un message est refusé s'il ferait occuper aux évènements en attente plus d'un quart de la mémoire : 8 192 cellules sur un Mini-ordinateur, 32 768 sur un Micro-ordinateur, 4 096 sur un Microcontrôleur, 262 144 sur un Ordinateur moderne | Machine.java |
#Langage
| Limite | Valeur | Erreur | Source |
|---|
| Appels imbriqués | 200 | stack overflow | Interpreter.java |
| Valeurs sur la pile | 65 536 | stack overflow | Interpreter.java |
| Longueur d'un texte | 65 536 caractères | string too long | Interpreter.java, StringLib.java, TableLib.java |
| Blocs et parenthèses imbriqués dans le source | 200 | too many nested levels | Parser.java |
| Nombres | virgule flottante sur 64 bits ; affichés avec 14 chiffres significatifs ; les entiers sous 10^15 s'affichent sans décimales | | Values.java |
| Arguments entiers | jusqu'à 2 147 483 647 | number has no integer representation | Values.java |
string.format | largeur de 2 chiffres au plus, précision de 99 au plus | invalid conversion | StringLib.java |
string.char | codes de 0 à 65 535 | value out of range | StringLib.java |
tonumber(texte, base) | base de 2 à 36 | base out of range | BaseLib.java |
Tables envoyées par net | 32 niveaux d'imbrication | table is too deep (or cyclic) to convert | Values.java |
#Évènements et temps
| Limite | Valeur | Source |
|---|
| Tick | 1/20 de seconde : os.time() les compte, os.clock() vaut os.time() / 20 | OsLib.java |
| File d'évènements | 256 évènements ; pleine, elle perd le plus ancien | Machine.java |
| Minuteurs en attente en même temps | 256 (too many timers) | Machine.java |
sleep et minuteurs | arrondis au tick supérieur, 1 tick au moins | BaseLib.java, OsLib.java |
net.receive(délai) | arrondi au tick supérieur, 1 tick au moins | NetApi.java |
os.day_time() | de 0 à 23 999 (0 au lever du soleil, 6000 à midi) | OsLib.java |
Évènements drag | un toutes les 50 ms au plus | TerminalScreen.java |
paste | 4 096 caractères | TerminalScreen.java, ComputerBlockEntity.java |
#Écran et clavier
| Limite | Valeur | Source |
|---|
| Un caractère | 6 × 9 pixels du dessin gfx | Terminal.java |
| Couleurs | 16 (voir Couleurs) | Terminal.java |
Taquets de tabulation de print et write | toutes les 4 colonnes | Terminal.java |
Taille de pixel, épaisseur de ligne, échelle du texte et des images gfx | de 1 à 64 | GfxLib.java |
gfx.fill | 1 048 576 pixels au plus | GfxLib.java |
Police de gfx.text | 3 × 5 pixels, sans accents (é devient e) | Graphics.java |
| Mur de moniteurs | jusqu'à 8 blocs de large et 6 de haut : des moniteurs de la même sorte, tournés du même côté, formant un rectangle plein | MonitorGroups.java |
Une ligne de read() ou de l'invite | 1 024 caractères | LineInput.java |
| Historique de l'invite | 50 lignes | LineInput.java |
| Distance pour utiliser un terminal | 16 blocs | ComputerBlockEntity.java |
| Mises à jour de l'écran envoyées aux joueurs | tous les 2 ticks au plus (config terminalSyncInterval, de 1 à 20) | CAConfig.java |
#Stockage
| Support | Capacité | Lu par | Source |
|---|
| Paquet de cartes perforées | 4 Ko (4 096 octets) | tous les ordinateurs à lecteur (tous sauf le Microcontrôleur) | CAItems.java |
| Bobine de bande magnétique | 16 Ko (16 384 octets) | Ordinateur à transistors, Mini-ordinateur, Micro-ordinateur, Ordinateur moderne | CAItems.java |
| Disquette | 64 Ko (65 536 octets) | Mini-ordinateur, Micro-ordinateur, Ordinateur moderne | CAItems.java |
| SSD | 1 Mo (1 048 576 octets) | Ordinateur moderne | CAItems.java |
| Mémoire soudée du Microcontrôleur | 16 Ko (16 384 octets) | le Microcontrôleur seul (il n'a pas de lecteur) | ComputerTier.java |
| Limite | Valeur | Source |
|---|
| Un nom de fichier ou de dossier | de 1 à 32 caractères : lettres sans accents, chiffres, _, ., - ; ni . ni .. | FileSystem.java |
| Un chemin entier | 128 caractères, barres obliques comprises | FileSystem.java |
| Fichiers et dossiers sur un support | 1 024 | FileSystem.java |
| Taille d'un fichier | son texte en octets UTF-8 : 1 octet par lettre simple, 2 pour é | MemoryFileSystem.java |
| Taille d'un dossier | rien (seuls les fichiers qu'il contient comptent) | MemoryFileSystem.java |
| Un fichier dans l'éditeur | jusqu'à l'espace libre du support plus sa propre taille, 1 048 576 caractères au plus | ComputerBlockEntity.java |
| Annulations dans l'éditeur | 200 étapes | CodeBuffer.java |
#Réseau
| Limite | Valeur | Source |
|---|
| Un message | 2 048 valeurs (clés comprises) et 32 768 caractères de texte en tout, 32 niveaux de tables | NetApi.java, Values.java |
| Mémoire de réception | un quart de la mémoire du destinataire (voir Mémoire) | Machine.java |
| Modem radio | 128 blocs | RadioBlock.java |
| Routeur Wi-Fi | 256 blocs ; tous les routeurs de même SSID forment un seul réseau | RadioBlock.java |
| Multiplicateur de portée | 1 (config wirelessRangeMultiplier, de 0,1 à 16), appliqué aux deux portées | CAConfig.java |
| Entre deux antennes | la plus courte de leurs deux portées | NetworkManager.java |
| SSID | 32 caractères, les noms plus longs sont coupés | WifiRouterBlockEntity.java |
| Réseau du Câble de données | 2 048 câbles explorés depuis un ordinateur | WiredNetworks.java |
distance des messages et de net.computers | arrondie au dixième de bloc | NetworkManager.java |
| Qui reçoit | les ordinateurs allumés, dans des chunks chargés qui tournent ; un ordinateur revenu à l'invite du shell (sans programme en cours) perd le message, alors que net.send a renvoyé true | NetworkManager.java, Machine.java |
#Blocs et monde
| Limite | Valeur | Source |
|---|
| Puissance redstone | de 0 à 15 ; rs.set et link.set ramènent les autres valeurs dans cet intervalle | ComputerBlockEntity.java, LinkApi.java |
| Fréquences de Liaison de redstone | 32 par ordinateur, link et périphériques Liaison de redstone confondus (too many link frequencies) | LinkApi.java |
| Portée d'une Liaison de redstone | le linkRange de Create : 256 blocs par défaut (config serveur de Create) | Create |
| Lignes de la Liaison d'affichage | 16 lignes de 128 caractères ; les lignes plus longues sont coupées, les lignes en trop ignorées | DisplayApi.java |
| Nom d'un ordinateur | 32 caractères (os.label refuse plus long, la commande label coupe) | OsLib.java, Shell.java |
| Mesures des capteurs de Create Simulated | arrondies à 0,001 | SimulatedSensors.java |
vehicle.position, vehicle.velocity, vehicle.speed | arrondis à 0,01 | VehicleApi.java |
push d'un inventaire | 64 objets quand aucune quantité n'est donnée | DeviceAdapters.java |