sodjan skrev:> ...och följer därmed med t.ex. eventuella ändringar av namn på
> kataloger på disk eller liknande.
Hur "följder de med" om de "evalueras redan när de sätts" ??
(Reservation för att jag kan ha glömt detaljerna kring syntax)
Om jag t.ex. först kör
assign Mittprogram: DH1:Mittprogram
så kommer Mittprogram: motsvara DH1:Mittprogram.
(Det normala och enda vettiga/dokumenterade är att peka på kataloger, men en slags "bugg-feature" gör att en assign i princip också kan peka på en enskild fil. Vad jag minns finns det typ ett enda program som använder detta...).
Om jag sedan gör
rename DH1:Mittprogram DH1:Mittgamlaprogram
så kommer Mittprogram: att motsvara DH1:Mittgamlaprogram
Därefter kan jag om jag vill skapa en ny DH1:Mittprogram-katalog och t.ex lägga in en ny version där, utan att det påverkar redan körande program.
Det finns dock flaggor man kan ge till assign som gör att evalueringen inte utförs när assign'en sätts, utan antingen en gång första gången den används eller varje gång den används (som VMS verkar göra).
Ditt exempel med logicals för Python är ungefär hur det fungerar på amigan, men som vanlig användare kan man inte sätta separata assigns per process, antagligen eftersom AmigaOS inte riktigt är ett fleranvändarsystem fullt ut. Det gör t.ex. att scriptet pcd som medföljer OS'et och vars syfte är att kunna byta till annan disk/katalog och "minnas" föregående katalog/disk behöver lägga med shellprocessens id i assignen.
Står jag t.ex. i DH1:Mittprogram och kör
pcd DH1:Mittgamlaprogram
och jag kör t.ex. shellprocess 7 så kommer scriptet pcd att sätta en assign som heter FROM7: som pekar på DH1:mittprogram. (Kör man pcd utan parameter så växlar man alltså till den disk/katalog som FROM*-assignen pekar på).
Assigns används ofta för sådant som att peka ut var en c-kompilator hittar include-filer o.s.v.
Det finns även nån "special-assigns" som egentligen inte är riktiga assigns eftersom man inte ser dem när man listar assigns, men de fungerar ungefär som en assign. PROGDIR: pekar normalt på katalogen där en körande binär ligger, och är givetvis specifikt per process. Allt möjligt blir spännande tillrört om man själv sätter en riktig assign för PROGDIR:
Något som kan röra till det är evalueringsordning, så kutym är att undvika att döpa diskar till namn som brukar användas på vanligt förekommande assigns o.s.v.
(Ja, en till specialare är att man både kan använda själva enhetsnamnet och volymnamnet som namn på en disk. För hårddiskar har det normalt ingen större användning, men för disketter och annan löstagbar media är det rätt bra. DF0: pekar alltid på första floppydriven, medan t.ex. Workbench: kan peka på den diskett som för ögonblicket sitter i DF0:. Om man tar ur den disketten och stoppar in i DF1: så kommer Workbench: fortfarande peka på den specifika disketten trots att den sitter i DF1:.
Disketternas namn, DF0: o.s.v., är hårdkodat men de flesta andra enheter går att sätta fritt, t.ex. är DH0: för en hårddisk bara praxis och något man sätter vid partitioneringen (medan namnet på volymen som ryms i partitionen sätts vid formatteringen). Det går att sätta "konstiga" namn, men det kan leda till underligheter. Jag minns en tråd nånstans där det framgick att typ 1-2 användare av en c-kompilator hade någon form av problem. Det visade sig att för att lyckas göra nån specialgrej så letade c-kompilatorn upp en process som heter "Workbench" vilket normalt är den process som sköter motsvarigheten till windows explorer.exe, alltså gui'et där man startar program, flyttar filer o.s.v.. En specialare för AmigaOS är dock att varje monterad disk får en process med samma namn som disken, normalt har man då t.ex. en process som heter DH0:. Någon användare hade döpt sin systempartition till just Workbench, och eftersom den partitionen givetvis "startas" före gui'et kommit upp, så hittade C-kompilatorn helt fel process och det uppstod knas.

Tumregeln i Amigavärlden har väl alltid varit att i så stor utsträckning som möjligt göra allt på dokumenterade sätt, men i enstaka fall så har det väl varit acceptabelt att göra något odokumenterat för att nå en klar fördel jämfört med vad det dokumenterade fixar).
sodjan skrev:Samma sak gäller för systemet i sig. När systemet bootar så sätt
en root för systemet utifrån den disk som det bootades från:
Kod: Markera allt
$ show logical sys$sysroot
"SYS$SYSROOT" = "DSA10:[SYS0.]" (LNM$SYSTEM_TABLE)
Det här är också rätt likt amigan. Vid boot så hårdkodas SYS: till den disk man bootas från, och ett antal assigns sätts också till olika delar inom SYS:, mer specifkt C: sätts till SYS:C (commands, shellkommandona & co), S: sätts till SYS:S (scripts, shellscript och framförallt S:startup-sequence som är shellscriptet som uppstarten börjar med), LIBS: sätts till SYS:Libs (motsvarar t.ex. windows DLL'er), DEVS: sätts till SYS:Devs (ungefär som DLL'er fast specifikt devicedrivers. För att röra till det så ligger normalt ens mountlist som textfil i DEVS:Mountlist, fast det är bara i vissa fall man över huvud taget behöver använda den filen).
I "modernare" versioner av AmigaOS (d.v.s. 2.0 eller nyare) så går det mig veterligen bra att med standard-assignkommandot peka om SYS: och alla assigns som pekar in via SYS:, men i gamla 1.3 och äldre så behövdes det special-tredjepartprogram för att till 100% "släppa taget" om disken man bootat från. Det är inget man normalt behöver, men om man var lycklig nog att ha hårddisk då det begav sig, men samtidigt olycklig nog att inte ha en autobootande hårddiskkontroller, så var man tvungen att boota från diskett och ladda bl.a. hårddiskkontrollerns driver från diskett, och för att datorn inte skulle tjata om att vilja ha den disketten i tid och otid så fick man ta till ett tredjeparttrick utöver att bara assign'a om alla SYS:-relaterade grejer till hårddisken.
En annan grej som verkar vara likt logicals i VMS är att en Assign (från och med AmigaOS 2.0) kan peka på flera ställen.
Jag ser för övrigt ytterligare en likhet mellan VMS och AmigaOS, att flaggorna är RWED istället för bara *ix-världens RWE. Jag tycker det är föredömligt att ha separata flaggor för skrivrättighet och raderingsrättighet. På så sätt kan man skydda sig mot att av misstag radera filer utan att behöva hindra applikationerna från att skriva till dem.
"They resemble Unix environment variables, except they are expanded by the filesystem, instead of the command shell or application program."
Aha, då är jag inte fullt så besviken
Amigan har för övrigt *också* ENV-variabler, men de användes i princip inte före AmigaOS 2.0 (om de ens fanns...).
En specialare är att env-variablerna finns inte bara som processlokala och globala utan även som variabler som överlever omboot. Varje global variabel och variabel som överlever omboot är egentligen en fil som rent tekniskt kan innehålla precis vad som helst. Därför använder många "minst 2.0-krävande" program omboot-överlevande env-variabler för att spara inställningar, ofta som binärfiler.

Det här var väl inte en jättebra tanke ihop med den faktiska implementationen eftersom de ombootöverlevande env-variablerna kopieras till flyktiga variabler vid boot. När man installerat femtioelva program som alla har någon/några env-variabler så blir det lätt massor som ska kopieras vid boot. Det ledde till att det skrevs tredjepartprogram som gör kopieringen från ombootöverlevande lagring till flyktig lagring on demand...
Från och med AmigaOS 2.0 (tror jag det var?) så ingår dessutom AREXX (Amiga-varianten av Rexx) som mer avancerat scriptspråk, i det kan man ha sina interna variabler o.s.v., så behovet av env-variabler är rätt lågt.
En sånhär tråd påminner mig för övrigt om att framgångarna för *ix inte beror på att det är särskilt bra, utan att det är bland de minst dåliga OS'en som "vem som helst" kan köra på sin dator, och delvis för att det bitit sig fast som en slags de-facto-standard. De olika kommandoskalen i *ix, ihop med såna grundläggande saker som val av kommandonas namn o.s.v., är i mitt tycke rätt ruttna. Att de ändå är "minst dåliga" kan väl mest skyllas på att kommandotolken och medföljande kommandoradbinärer i Windowsvärlden är ännu sämre.