Create: Computing AgesDoc Brass
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

Ordinateuros.tier()Instructions par tickPar seconde à 256 tr/minMémoire (cellules)Stress (us par tr/min)
Calculateur à tubes1204002 04816
Ordinateur à transistors2801 6008 1928
Mini-ordinateur33006 00032 7684
Micro-ordinateur41 20024 000131 0722
Microcontrôleur44008 00016 3841
Ordinateur moderne55 000100 0001 048 5761
OrdinateurÉcranTexte (colonnes × lignes)Dessin gfx (pixels)StockageRéseau
Calculateur à tubestéléscripteur papier40 × 14aucun : pas de gfxPaquet de cartes perforées, 4 Koaucun
Ordinateur à transistorsphosphore vert51 × 19306 × 171Bobine de bande magnétique, 16 Koaucun
Mini-ordinateurphosphore ambre51 × 19306 × 171Disquette, 64 KoCâble de données
Micro-ordinateur16 couleurs51 × 19306 × 171Disquette, 64 KoCâble de données, Modem radio, Routeur Wi-Fi
Microcontrôleur16 couleurs40 × 12240 × 108mémoire soudée, 16 KoCâble de données, Modem radio, Routeur Wi-Fi
Ordinateur moderne16 couleurs64 × 24384 × 216SSD, 1 MoCâ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

LimiteValeurSource
Pleine vitesseà 256 tr/min, dans un sens ou dans l'autre ; plus vite n'apporte rien de plusComputerTier.java
Sous 256 tr/minproportionnelle : moitié à 128 tr/min, un huitième à 32 tr/min ; les fractions d'instruction s'additionnent d'un tick à l'autreMachine.java
Sans rotation, ou en surchargel'ordinateur est figé : aucune instruction, minuteurs et sleep en pauseComputerBlockEntity.java
Coût d'une instruction1 ; un appel de bibliothèque coûte 1 plus son surcoût (tableau ci-dessous)Interpreter.java
Budget restant quand le programme attendperdu pour ce tickMachine.java
Attentes déjà satisfaitesle programme reprend dans le même tick, 16 fois par tick au plusMachine.java
Surcoûts au-delà du budgetune dette, remboursée aux ticks suivantsInterpreter.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'emporteComputerBlockEntity.java
Démarragesun tous les 10 ticks au plus (une demi-seconde) ; un redémarrage plus rapproché attendComputerBlockEntity.java
Ordinateurs par tick du serveur512 (config maxComputersTickedPerTick, de 16 à 100 000) ; au-delà, les autres tournent un tick sur deuxCAConfig.java

Surcoût des appels de bibliothèque

Les divisions sont arrondies vers le bas : afficher 40 caractères coûte 1 + 2 instructions.

AppelInstructions en plus
print, write, term.write1 par tranche de 16 caractères
fs.read, fs.write, fs.append1 par tranche de 16 caractères
fs.copy1 par tranche de 16 octets copiés
import1 par tranche de 16 caractères du fichier
string.find, string.split1 par tranche de 16 caractères du texte
string.rep1 par tranche de 8 répétitions
table.insert à une position1 par tranche de 8 éléments de la liste
table.remove1 par tranche de 8 éléments après la position
table.concat1 par tranche de 16 caractères du résultat
table.contains1 par tranche de 8 éléments
table.sort sans fonctionenviron n × log2(n) pour n éléments
table.sort avec une fonctionchaque comparaison est un appel de votre fonction
gfx.pixel, gfx.line, gfx.rect, gfx.circle, gfx.triangle, gfx.clear, gfx.fill, gfx.scroll1 par tranche de 64 pixels touchés
gfx.textcaractères × échelle × échelle
gfx.image1 par ligne, plus 1 par tranche de 64 pixels
os.memory1 + 1 par tranche de 16 cellules utilisées (elle mesure la mémoire)
net.send32, plus le parcours du réseau et la copie des données
net.broadcast64 + 8 par ordinateur joignable, plus le parcours et la copie
net.computers, net.networks64, plus le parcours du réseau
peripheral.list, peripheral.find16 + 4 par bloc qui touche le réseau du Câble de données
peripheral.wrap8
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.speed8
list, count, push d'un inventaire1 par emplacement de l'inventaire
stress, capacity d'un bloc cinétique1 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.

QuoiCellulesSource
Une table4Interpreter.java
Chaque entrée d'une table (clé et valeur)2, plus les cellules d'un texte ou d'une table qu'elle contientInterpreter.java
Un texte1 + 1 par tranche de 8 caractères (un texte de 100 caractères : 13 cellules)Values.java
Un nombre, un booléen, nilrien de plus que la case qui le contientInterpreter.java
Une variable globale2 + les cellules de son nom, plus sa valeurInterpreter.java
Une valeur de fonction4Interpreter.java
Les variables locales d'un fichier (au niveau du fichier)1 chacuneInterpreter.java
Le code d'un fichier1 par tranche de 4 mots de bytecode + 1 par constante + 4 par fonctionProto.java
Un appel en cours8, plus 1 par valeur sur la pileInterpreter.java
Un évènement en attente dans la file6 + 2 par champ + les cellules de ses textes et tablesEvent.java
Les bibliothèques (math, term...)gratuitesInterpreter.java
LimiteValeurSource
Mesurer la mémoireos.memory() la mesure sur-le-champ, pour 1 instruction par tranche de 16 cellulesOsLib.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 vraimentInterpreter.java
Mémoire de réceptionun 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 moderneMachine.java

Langage

LimiteValeurErreurSource
Appels imbriqués200stack overflowInterpreter.java
Valeurs sur la pile65 536stack overflowInterpreter.java
Longueur d'un texte65 536 caractèresstring too longInterpreter.java, StringLib.java, TableLib.java
Blocs et parenthèses imbriqués dans le source200too many nested levelsParser.java
Nombresvirgule flottante sur 64 bits ; affichés avec 14 chiffres significatifs ; les entiers sous 10^15 s'affichent sans décimalesValues.java
Arguments entiersjusqu'à 2 147 483 647number has no integer representationValues.java
string.formatlargeur de 2 chiffres au plus, précision de 99 au plusinvalid conversionStringLib.java
string.charcodes de 0 à 65 535value out of rangeStringLib.java
tonumber(texte, base)base de 2 à 36base out of rangeBaseLib.java
Tables envoyées par net32 niveaux d'imbricationtable is too deep (or cyclic) to convertValues.java

Évènements et temps

LimiteValeurSource
Tick1/20 de seconde : os.time() les compte, os.clock() vaut os.time() / 20OsLib.java
File d'évènements256 évènements ; pleine, elle perd le plus ancienMachine.java
Minuteurs en attente en même temps256 (too many timers)Machine.java
sleep et minuteursarrondis au tick supérieur, 1 tick au moinsBaseLib.java, OsLib.java
net.receive(délai)arrondi au tick supérieur, 1 tick au moinsNetApi.java
os.day_time()de 0 à 23 999 (0 au lever du soleil, 6000 à midi)OsLib.java
Évènements dragun toutes les 50 ms au plusTerminalScreen.java
paste4 096 caractèresTerminalScreen.java, ComputerBlockEntity.java

Écran et clavier

LimiteValeurSource
Un caractère6 × 9 pixels du dessin gfxTerminal.java
Couleurs16 (voir Couleurs)Terminal.java
Taquets de tabulation de print et writetoutes les 4 colonnesTerminal.java
Taille de pixel, épaisseur de ligne, échelle du texte et des images gfxde 1 à 64GfxLib.java
gfx.fill1 048 576 pixels au plusGfxLib.java
Police de gfx.text3 × 5 pixels, sans accents (é devient e)Graphics.java
Mur de moniteursjusqu'à 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 pleinMonitorGroups.java
Une ligne de read() ou de l'invite1 024 caractèresLineInput.java
Historique de l'invite50 lignesLineInput.java
Distance pour utiliser un terminal16 blocsComputerBlockEntity.java
Mises à jour de l'écran envoyées aux joueurstous les 2 ticks au plus (config terminalSyncInterval, de 1 à 20)CAConfig.java

Stockage

SupportCapacitéLu parSource
Paquet de cartes perforées4 Ko (4 096 octets)tous les ordinateurs à lecteur (tous sauf le Microcontrôleur)CAItems.java
Bobine de bande magnétique16 Ko (16 384 octets)Ordinateur à transistors, Mini-ordinateur, Micro-ordinateur, Ordinateur moderneCAItems.java
Disquette64 Ko (65 536 octets)Mini-ordinateur, Micro-ordinateur, Ordinateur moderneCAItems.java
SSD1 Mo (1 048 576 octets)Ordinateur moderneCAItems.java
Mémoire soudée du Microcontrôleur16 Ko (16 384 octets)le Microcontrôleur seul (il n'a pas de lecteur)ComputerTier.java
LimiteValeurSource
Un nom de fichier ou de dossierde 1 à 32 caractères : lettres sans accents, chiffres, _, ., - ; ni . ni ..FileSystem.java
Un chemin entier128 caractères, barres obliques comprisesFileSystem.java
Fichiers et dossiers sur un support1 024FileSystem.java
Taille d'un fichierson texte en octets UTF-8 : 1 octet par lettre simple, 2 pour éMemoryFileSystem.java
Taille d'un dossierrien (seuls les fichiers qu'il contient comptent)MemoryFileSystem.java
Un fichier dans l'éditeurjusqu'à l'espace libre du support plus sa propre taille, 1 048 576 caractères au plusComputerBlockEntity.java
Annulations dans l'éditeur200 étapesCodeBuffer.java

Réseau

LimiteValeurSource
Un message2 048 valeurs (clés comprises) et 32 768 caractères de texte en tout, 32 niveaux de tablesNetApi.java, Values.java
Mémoire de réceptionun quart de la mémoire du destinataire (voir Mémoire)Machine.java
Modem radio128 blocsRadioBlock.java
Routeur Wi-Fi256 blocs ; tous les routeurs de même SSID forment un seul réseauRadioBlock.java
Multiplicateur de portée1 (config wirelessRangeMultiplier, de 0,1 à 16), appliqué aux deux portéesCAConfig.java
Entre deux antennesla plus courte de leurs deux portéesNetworkManager.java
SSID32 caractères, les noms plus longs sont coupésWifiRouterBlockEntity.java
Réseau du Câble de données2 048 câbles explorés depuis un ordinateurWiredNetworks.java
distance des messages et de net.computersarrondie au dixième de blocNetworkManager.java
Qui reçoitles 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é trueNetworkManager.java, Machine.java

Blocs et monde

LimiteValeurSource
Puissance redstonede 0 à 15 ; rs.set et link.set ramènent les autres valeurs dans cet intervalleComputerBlockEntity.java, LinkApi.java
Fréquences de Liaison de redstone32 par ordinateur, link et périphériques Liaison de redstone confondus (too many link frequencies)LinkApi.java
Portée d'une Liaison de redstonele linkRange de Create : 256 blocs par défaut (config serveur de Create)Create
Lignes de la Liaison d'affichage16 lignes de 128 caractères ; les lignes plus longues sont coupées, les lignes en trop ignoréesDisplayApi.java
Nom d'un ordinateur32 caractères (os.label refuse plus long, la commande label coupe)OsLib.java, Shell.java
Mesures des capteurs de Create Simulatedarrondies à 0,001SimulatedSensors.java
vehicle.position, vehicle.velocity, vehicle.speedarrondis à 0,01VehicleApi.java
push d'un inventaire64 objets quand aucune quantité n'est donnéeDeviceAdapters.java