Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Listenhandle

18 views
Skip to first unread message

Georg Gruber

unread,
Aug 13, 2023, 2:28:12 AM8/13/23
to
Werte Hüter des Hamsters,

mir ist bei der Weitergabe von Listhandles an nebenläufige Scripts
aufgefallen, dass diese eigentlich nur Indizes auf script-interne
Strukturen sind und daher im aufgerufenen Script keine Funktion haben,
mit Eventhandles funktioniert das aber.
Wäre es möglich, Listen ebenfalls "hamsterweit" anzulegen?

--
LG Georg

Thomas Barghahn

unread,
Aug 13, 2023, 4:54:26 AM8/13/23
to
*Georg Gruber* meinte:
>
> mir ist bei der Weitergabe von Listhandles an nebenläufige Scripts
> aufgefallen, dass diese eigentlich nur Indizes auf script-interne
> Strukturen sind und daher im aufgerufenen Script keine Funktion haben,
> mit Eventhandles funktioniert das aber.
> Wäre es möglich, Listen ebenfalls "hamsterweit" anzulegen?

Hast du mal ein konkretes Beispiel, welches anschaulich darstellt, mit
welchen Problemen du "zu kämpfen" hast?

Thomas 😷
--
== S E N D E Z E I T ======================
  DATUM : Sonntag, 13. August 2023
  UHRZEIT: 10:54:18 UHR (MESZ)
== Heute: Internationaler Linkshändertag ==

Alfred Peters

unread,
Aug 13, 2023, 9:45:38 AM8/13/23
to
Es schrieb einmal Georg Gruber:
> Werte Hüter des Hamsters,
>
> mir ist bei der Weitergabe von Listhandles an nebenläufige Scripts
> aufgefallen, dass diese eigentlich nur Indizes auf script-interne
> Strukturen sind und daher im aufgerufenen Script keine Funktion haben,

Doch durchaus. Sie machen genau das: Sie verhindern, dass man von zwei
Skripten auf die selbe Liste zugreifen kann.

> mit Eventhandles funktioniert das aber.

Das ist auch etwas anderes. Die Eventhandles sind ja grade für die IPC
gedacht/notwendig.

> Wäre es möglich, Listen ebenfalls "hamsterweit" anzulegen?

Machbar wäre das sicher. Nur hat es durchaus seinen Grund, warum man es
nicht gemacht hat. Es gibt sicher Probleme, wenn zwei Skripte
versehentlich oder auch absichtlich auf die gleichen Daten zugreifen.
Mann müsste also einigen Aufwand treiben, um das abzusichern. Das sehe
ich noch nicht.

Ich schließe mich Thomas Frage an: Wofür brauchst du das?

Alfred
--
🀟🀊🀐🀍🀍 23615.4
🀣🀟🀘🀘🀄
🀉🀉🀐🀘🀃🀊🀘
🀣🀃🀄

Georg Gruber

unread,
Aug 13, 2023, 5:29:19 PM8/13/23
to
Am 13.08.2023 um 15:45 schrieb Alfred Peters:
> Es schrieb einmal Georg Gruber:
>> Werte Hüter des Hamsters,
>>
>> mir ist bei der Weitergabe von Listhandles an nebenläufige Scripts
>> aufgefallen, dass diese eigentlich nur Indizes auf script-interne
>> Strukturen sind und daher im aufgerufenen Script keine Funktion haben,
>
> Doch durchaus. Sie machen genau das: Sie verhindern, dass man von zwei
> Skripten auf die selbe Liste zugreifen kann.
>
>> mit Eventhandles funktioniert das aber.
>
> Das ist auch etwas anderes. Die Eventhandles sind ja grade für die IPC
> gedacht/notwendig.
>
>> Wäre es möglich, Listen ebenfalls "hamsterweit" anzulegen?
>
> Machbar wäre das sicher. Nur hat es durchaus seinen Grund, warum man es
> nicht gemacht hat. Es gibt sicher Probleme, wenn zwei Skripte
> versehentlich oder auch absichtlich auf die gleichen Daten zugreifen.
> Mann müsste also einigen Aufwand treiben, um das abzusichern. Das sehe
> ich noch nicht.

Schon klar, das ist special interest.

> Ich schließe mich Thomas Frage an: Wofür brauchst du das?

Ich prototype mit den Hamsterscripten unterschiedliche parallele
Suchverfahren, das geht mit HSC relativ unaufwendig.
Ich schreib mir halt die Listmodule schnell selber, schließlich gibt es
MemAlloc und ich brauch im ersten Anlauf keine parallelen
Schreibzugriffe, somit muss das noch nicht besonders bulletproof sein.
Es ist ja nur der Performance-Unterschied interessant und nicht die
absolute Performance, wenn ich schlauer bin kommt das in ein privates
Projekt.

--
LG Georg

Löwen föhnen ist keine TikTok-Challenge.

Thomas Barghahn

unread,
Aug 15, 2023, 2:04:19 PM8/15/23
to
*Georg Gruber* meinte:
Wir bauen uns eine Liste mit dem Script "Liste_bauen.hsc" und übergeben
diese Liste an das Script "Liste_drucken.hsc". Diese Liste soll /nicht/
als File zwischengespeichert werden.

Zunächst das Script "Liste_bauen.hsc", welches eine Liste als Parameter
an ein zweites Script übergibt.

----- 8< -----
#!hs2
#!load hStrings.hsm

varset ( $MyList, ListAlloc() )
varset ( $i, 0 )

# eine Liste aufbauen, welche in einem anderen Script bearbeitet werden soll

ListAdd ( $MyList, "Wir wollen mit" )
ListAdd ( $MyList, "dem Hamster" )
ListAdd ( $MyList, "eine Liste" )
ListAdd ( $MyList, "an ein zweites" )
ListAdd ( $MyList, "Script uebergeben" )
ListAdd ( $MyList, "und diese Liste" )
ListAdd ( $MyList, "von diesem zweiten Script" )
ListAdd ( $MyList, "drucken lassen." )

# Liste zum Drucken an ein weiteres Script uebergeben
RunScript ( "List_Test.hsc", ListGetText ($MyList), 0 )

# Liste wieder freigeben
ListFree ( $MyList )
quit
----- >8 -----

In unserem zweiten Script wird die Liste nun gedruckt

----- 8< -----
#!hs2
#!load hStrings.hsm

varset ( $My_Print_List, ListAlloc () )
varset ( $i, 0 )

# Liste aus Ursprungsscript uebernehmen

For ( $i, 0, ParamCount )
ListAdd ( $My_Print_List, Paramstr ( $i ) )
endfor

# Liste im Hamster auflisten (eigentlich reicht die
# obige Schleife schon)

For ($i, 1, ListCount ( $My_Print_List ) - 1 )
Print ( "Eintrag " + $i + ": " + ListGet ( $My_Print_List, $i ) )
endfor

# Liste freigeben
ListFree ( $My_Print_List )

quit
----- >8 -----

Habe ich dein Problem verstanden?

Thomas 😷
--
== S E N D E Z E I T ================
  DATUM : Dienstag, 15. August 2023
  UHRZEIT: 20:04:11 UHR (MESZ)
== +++ Mariä Himmelfahrt +++ ========

Thomas Barghahn

unread,
Aug 15, 2023, 2:08:25 PM8/15/23
to
*Georg Gruber* meinte:
Wir bauen uns eine Liste mit dem Script "Liste_bauen.hsc" und übergeben
diese Liste an das Script "Liste_drucken.hsc". Diese Liste soll /nicht/
als File zwischengespeichert werden.

Zunächst das Script "Liste_bauen.hsc", welches eine Liste als Parameter
an ein zweites Script übergibt.

----- 8< -----
#!hs2
#!load hStrings.hsm

varset ( $MyList, ListAlloc() )
varset ( $i, 0 )

# eine Liste aufbauen, welche in einem anderen Script bearbeitet werden soll

ListAdd ( $MyList, "Wir wollen mit" )
ListAdd ( $MyList, "dem Hamster" )
ListAdd ( $MyList, "eine Liste" )
ListAdd ( $MyList, "an ein zweites" )
ListAdd ( $MyList, "Script uebergeben" )
ListAdd ( $MyList, "und diese Liste" )
ListAdd ( $MyList, "von diesem zweiten Script" )
ListAdd ( $MyList, "drucken lassen." )

# Liste zum Drucken an ein weiteres Script uebergeben
RunScript ( "Liste_drucken.hsc", ListGetText ($MyList), 0 )

# Liste wieder freigeben
ListFree ( $MyList )
quit
----- >8 -----

In unserem zweiten Script ("Liste_drucken.hsc") wird die Liste nun
gedruckt

----- 8< -----
#!hs2
#!load hStrings.hsm

varset ( $My_Print_List, ListAlloc () )
varset ( $i, 0 )

# Liste aus Ursprungsscript uebernehmen

For ( $i, 0, ParamCount )
ListAdd ( $My_Print_List, Paramstr ( $i ) )
endfor

# Liste im Hamster auflisten (eigentlich reicht die
# obige Schleife schon)

For ($i, 1, ListCount ( $My_Print_List ) - 1 )
Print ( "Eintrag " + $i + ": " + ListGet ( $My_Print_List, $i ) )
endfor

# Liste freigeben
ListFree ( $My_Print_List )

quit
----- >8 -----

Habe ich dein Problem verstanden?

[Supersedes] aufgrund von Fehlern und/oder Ergänzungen.

Thomas 😷
--
== S E N D E Z E I T ================
  DATUM : Dienstag, 15. August 2023
  UHRZEIT: 20:08:12 UHR (MESZ)

Georg Gruber

unread,
Aug 16, 2023, 4:19:51 AM8/16/23
to
Am 15.08.2023 um 20:08 schrieb Thomas Barghahn:
> *Georg Gruber* meinte:
>> Am 13.08.2023 um 15:45 schrieb Alfred Peters:
>
>>> Ich schließe mich Thomas Frage an: Wofür brauchst du das?
>
>> Ich prototype mit den Hamsterscripten unterschiedliche parallele
>> Suchverfahren, das geht mit HSC relativ unaufwendig.
>> Ich schreib mir halt die Listmodule schnell selber, schließlich gibt es
>> MemAlloc und ich brauch im ersten Anlauf keine parallelen
>> Schreibzugriffe, somit muss das noch nicht besonders bulletproof sein.
>> Es ist ja nur der Performance-Unterschied interessant und nicht die
>> absolute Performance, wenn ich schlauer bin kommt das in ein privates
>> Projekt.
>
> Wir bauen uns eine Liste mit dem Script "Liste_bauen.hsc" und übergeben
> diese Liste an das Script "Liste_drucken.hsc". Diese Liste soll /nicht/
> als File zwischengespeichert werden.
>
> Zunächst das Script "Liste_bauen.hsc", welches eine Liste als Parameter
> an ein zweites Script übergibt.

[...]

> Habe ich dein Problem verstanden?

Nein.
Du reichst ja nicht die Liste weiter, sondern eine Kopie davon.

Es geht vorerst mal um *parallel* ablaufende Zugriffe an verschiedene
Stellen der Liste(n) mit Modifikationen in einem weiteren Schritt und
hat entfernte Ähnlichkeiten mit einem DBMS.

Die Liste steht soweit, das Modul ist noch recht unaufgeräumt.
Mit Add, Get und Delete oszilliert das schon schön ohne Speicherlecks.
Insert und Set is next.

An Alfred:
Weshalb ist Underscore an der ersten Stelle einer Subroutine unzulässig?

Alfred Peters

unread,
Aug 16, 2023, 5:29:48 AM8/16/23
to
Es schrieb einmal Georg Gruber:
> Am 15.08.2023 um 20:08 schrieb Thomas Barghahn:
>> *Georg Gruber* meinte:
>>> Am 13.08.2023 um 15:45 schrieb Alfred Peters:

>> diese Liste an das Script "Liste_drucken.hsc". Diese Liste soll /nicht/
>> als File zwischengespeichert werden.

Wobei das noch das einfachste wäre. Einfach eine INI-Datei
zweckentfremden. Da ist der Zugriff aber auch nicht Thread-Safe.

> Es geht vorerst mal um *parallel* ablaufende Zugriffe an verschiedene
> Stellen der Liste(n) mit Modifikationen in einem weiteren Schritt und
> hat entfernte Ähnlichkeiten mit einem DBMS.

Wie wäre es mit einer SQLite DB?

> An Alfred:
> Weshalb ist Underscore an der ersten Stelle einer Subroutine unzulässig?

" _" hat die Sonderfunktion eines Zeilen-Mergers.

Siehe: Hilfe - Hamsterskript: Anweisungen und Kommentare

Alfred
--
🀋🀒 🀒🀡 23623.2
🀙🀚
🀙🀡 🀙🀡🀏
🀋🀖🀖🀏🀙🀚🀃🀃🀡

Georg Gruber

unread,
Aug 16, 2023, 6:03:11 AM8/16/23
to
Am 16.08.2023 um 11:29 schrieb Alfred Peters:
> Es schrieb einmal Georg Gruber:
>> Am 15.08.2023 um 20:08 schrieb Thomas Barghahn:
>>> *Georg Gruber* meinte:
>>>> Am 13.08.2023 um 15:45 schrieb Alfred Peters:
>
>>> diese Liste an das Script "Liste_drucken.hsc". Diese Liste soll /nicht/
>>> als File zwischengespeichert werden.
>
> Wobei das noch das einfachste wäre. Einfach eine INI-Datei
> zweckentfremden. Da ist der Zugriff aber auch nicht Thread-Safe.
>
>> Es geht vorerst mal um *parallel* ablaufende Zugriffe an verschiedene
>> Stellen der Liste(n) mit Modifikationen in einem weiteren Schritt und
>> hat entfernte Ähnlichkeiten mit einem DBMS.
>
> Wie wäre es mit einer SQLite DB?

Ich hab hier Microsoft SQL.
Hat syntaktische Restriktionen, da gehen gewisse Dinge nur von hinten
durch die Brust ins Auge - oder gar nicht.

>> An Alfred:
>> Weshalb ist Underscore an der ersten Stelle einer Subroutine unzulässig?
>
> " _" hat die Sonderfunktion eines Zeilen-Mergers.

Da nach dem Underscore und vor dem CR nur Blank vorkommen darf,
wäre ein "_" irgendwo in einer Variablen wahrscheinlich kein Problem.
Ich habe mich aber noch nicht mit einem RE_Parse entsprechend rumgespielt.
Insofern.

Alfred Peters

unread,
Aug 21, 2023, 10:14:50 AM8/21/23
to
Es schrieb einmal Georg Gruber:
> Am 16.08.2023 um 11:29 schrieb Alfred Peters:

>>> An Alfred:
>>> Weshalb ist Underscore an der ersten Stelle einer Subroutine unzulässig?
>>
>> " _" hat die Sonderfunktion eines Zeilen-Mergers.
>
> Da nach dem Underscore und vor dem CR nur Blank vorkommen darf,

Du hast Recht. Der Test prüft Simpel auf ein '_' am Zeilenende:

| if copy(s,length(s),1)<>'_' then begin // last line?

> wäre ein "_" irgendwo in einer Variablen wahrscheinlich kein Problem.

*Im* Variablen-/Funktionsnamen ist es ja auch erlaubt. Vor allem auch am
Ende 😬. Ich fürchte, du bist da über einen Bug gestolpert.

| varset($a,$b_,0)
| $b_ = $a

Funktioniert und ist in Ordnung. Aber:

| $a = $b_
| print($a)

...geht in die Hose.

# Error 4: Operator expected: print($a) [THscParsedFunc]
# Error-line: $a=$b print($a)

Alfred
--
🀤🀃🀏🀋🀀🀀 23637.4
🀦🀐 🀝🀝🀋
🀆🀆🀐🀜🀤
🀏🀃 🀜🀦

Georg Gruber

unread,
Aug 25, 2023, 5:09:50 AM8/25/23
to
Beim Parsen der Variablen bzw. Identifier den Underscore nur von
Buchstaben eingeschlossen zu erlauben, würde das Problem erschlagen,
vermutlich verwendet eh niemand einen trailing Underscore, aber was weiß
man denn schon; andererseits sind ja deine Versionen ohnehin Beta.

Nebenbei ist mir aufgefallen, dass man Kommentarzeilen nicht fortsetzen
kann, dadurch müssen mehrzeilige Statements zeilenweise deaktiviert
werden - Bug oder Feature?
0 new messages