Programovací jazyk BASIX

Kit

  • *****
  • 1 070
    • Zobrazit profil
    • E-mail
Re:Programovací jazyk BASIX
« Odpověď #90 kdy: 30. 08. 2026, 23:37:32 »
Jestli je v C++ nějaká featura, která maskuje že se něco děje, tak jsou to destruktory. Ale na druhou stranu, nečekané divočiny může dělat i nějaká "kill" funkce v C.

Destruktory v C++ jsou děs. Místo spuštění už při zneplatnění objektu se spustí až při jeho fyzické likvidaci.
Úplně nerozumím. Co přesně je to zneplatnění objektu? Šlo by dát nějaký příklad?

V destruktoru uvedu uvolnění nějakého prostředku (paměti, souboru, spojení,...). Na objekt už neexistuje pointer, ale stále si ten prostředek drží a může to způsobit deadlock. Destruktor je spuštěn až aktivací garbage collectoru, a to je pozdě. Jiné jazyky tím netrpí.


BoneFlute

  • *****
  • 2 144
    • Zobrazit profil
Re:Programovací jazyk BASIX
« Odpověď #91 kdy: 30. 08. 2026, 23:41:56 »
Jestli je v C++ nějaká featura, která maskuje že se něco děje, tak jsou to destruktory. Ale na druhou stranu, nečekané divočiny může dělat i nějaká "kill" funkce v C.

Destruktory v C++ jsou děs. Místo spuštění už při zneplatnění objektu se spustí až při jeho fyzické likvidaci.
Úplně nerozumím. Co přesně je to zneplatnění objektu? Šlo by dát nějaký příklad?

V destruktoru uvedu uvolnění nějakého prostředku (paměti, souboru, spojení,...). Na objekt už neexistuje pointer, ale stále si ten prostředek drží a může to způsobit deadlock. Destruktor je spuštěn až aktivací garbage collectoru, a to je pozdě. Jiné jazyky tím netrpí.

C++ a garbage collector? Teda, ne, že by se nepoužívali, ale je to trochu nonsens.

Kit

  • *****
  • 1 070
    • Zobrazit profil
    • E-mail
Re:Programovací jazyk BASIX
« Odpověď #92 kdy: Dnes v 00:21:43 »
Jestli je v C++ nějaká featura, která maskuje že se něco děje, tak jsou to destruktory. Ale na druhou stranu, nečekané divočiny může dělat i nějaká "kill" funkce v C.

Destruktory v C++ jsou děs. Místo spuštění už při zneplatnění objektu se spustí až při jeho fyzické likvidaci.
Úplně nerozumím. Co přesně je to zneplatnění objektu? Šlo by dát nějaký příklad?

V destruktoru uvedu uvolnění nějakého prostředku (paměti, souboru, spojení,...). Na objekt už neexistuje pointer, ale stále si ten prostředek drží a může to způsobit deadlock. Destruktor je spuštěn až aktivací garbage collectoru, a to je pozdě. Jiné jazyky tím netrpí.

C++ a garbage collector? Teda, ne, že by se nepoužívali, ale je to trochu nonsens.

Tak kdy se v C++ spouští destruktor?

Re:Programovací jazyk BASIX
« Odpověď #93 kdy: Dnes v 00:32:38 »
Jestli je v C++ nějaká featura, která maskuje že se něco děje, tak jsou to destruktory. Ale na druhou stranu, nečekané divočiny může dělat i nějaká "kill" funkce v C.

Destruktory v C++ jsou děs. Místo spuštění už při zneplatnění objektu se spustí až při jeho fyzické likvidaci.
Úplně nerozumím. Co přesně je to zneplatnění objektu? Šlo by dát nějaký příklad?

V destruktoru uvedu uvolnění nějakého prostředku (paměti, souboru, spojení,...). Na objekt už neexistuje pointer, ale stále si ten prostředek drží a může to způsobit deadlock. Destruktor je spuštěn až aktivací garbage collectoru, a to je pozdě. Jiné jazyky tím netrpí.

C++ a garbage collector? Teda, ne, že by se nepoužívali, ale je to trochu nonsens.

Tak kdy se v C++ spouští destruktor?
V C++ jsem se s GC teda ještě nepotkal, jen jsem slyšel nějaké zvěsti. Takže můj dotaz tak nějak trvá.

Destruktor se spouští, když končí život objektu :
- u lokálních proměnných na konci scopu
- membery struktury se likvidují při likvidaci samotné struktury
- u dynamicky alokovaných objektů se destruktor volá při uvolňování toho objektu (v novém idiomatickém c++ když zanikne unique_ptr, nebo poslední shared_ptr co na ně ukazuje)
- V c++ když na objekt zanikne poslední ukazatel a on je pořád naživu, tak už leakne navždycky(není GC, není kdo by to taky uvolnil). Ale při použití smartpointerů už toho není až tak jednoduché dosáhnout.

BoneFlute

  • *****
  • 2 144
    • Zobrazit profil
Re:Programovací jazyk BASIX
« Odpověď #94 kdy: Dnes v 01:43:17 »
Destruktor je spuštěn až aktivací garbage collectoru, a to je pozdě. Jiné jazyky tím netrpí.

Je pravdou, že v C++ se destruktor skutečně používá i na správu prostředků, nejen paměti. A funguje to právě proto, že C++ ten GC (obvykle) nemá, a s objektem se tedy pracuje trochu jinak.

A právě že v jiných jazycích s tím problém je, proto se u nich často rozlišuje vytvoření/alokace objektu a jeho paměťovej zánik, a vytvoření/alokace objektu a jeho ztráta kontextu. V různých jazycích se tomu říká různě, ale dejme tomu něco jako Context Managers. V C# je to klíčové slovo `using`, v pythonu `with`, v go-lang `defer`, v javě `try`.


PS:
Přijde mi, že konkrétně ty @Kite máš takovou ruku vždycky tvrdit opak než jak to ve skutečnosti je. To je z tvé strany nějaká hra?


BoneFlute

  • *****
  • 2 144
    • Zobrazit profil
Re:Programovací jazyk BASIX
« Odpověď #95 kdy: Dnes v 01:52:57 »
V C++ jsem se s GC teda ještě nepotkal, jen jsem slyšel nějaké zvěsti.

Omlouvám se předem za off-topic, ale tuhle jsem si studoval, jak řeší paměť BEM/Erlang, a to je strašně vtipný. Tam jsou desítky až tisíce malých procesů, které každý má svůj vlastní samostatný GC. Což v důsledku znamená, že stop-the-world jaksi není the-world a díky tomu je prakticky neměřitelný.

Re:Programovací jazyk BASIX
« Odpověď #96 kdy: Dnes v 06:29:58 »
Omlouvám se předem za off-topic, ale tuhle jsem si studoval, jak řeší paměť BEM/Erlang, a to je strašně vtipný. Tam jsou desítky až tisíce malých procesů, které každý má svůj vlastní samostatný GC. Což v důsledku znamená, že stop-the-world jaksi není the-world a díky tomu je prakticky neměřitelný.
Ale taky to bohužel znamená, že ty procesy nemůžou jednoduše sdílet paměť. Což už zas tak vtipný není. A kdybys stejný omezení udělal na vlákna v jiným GC jazyku, tak dostaneš stejnej výsledek.

BoneFlute

  • *****
  • 2 144
    • Zobrazit profil
Re:Programovací jazyk BASIX
« Odpověď #97 kdy: Dnes v 07:05:43 »
Omlouvám se předem za off-topic, ale tuhle jsem si studoval, jak řeší paměť BEM/Erlang, a to je strašně vtipný. Tam jsou desítky až tisíce malých procesů, které každý má svůj vlastní samostatný GC. Což v důsledku znamená, že stop-the-world jaksi není the-world a díky tomu je prakticky neměřitelný.
Ale taky to bohužel znamená, že ty procesy nemůžou jednoduše sdílet paměť. Což už zas tak vtipný není. A kdybys stejný omezení udělal na vlákna v jiným GC jazyku, tak dostaneš stejnej výsledek.

Což jde IMHO proti filozofii Erlangu. Což vytváří další důsledky, jakože sdílená paměť je více pod kontrolou, což sice teda není vtipný, ale rozumný jo.

Re:Programovací jazyk BASIX
« Odpověď #98 kdy: Dnes v 08:31:43 »
Citace
PS:
Přijde mi, že konkrétně ty @Kite máš takovou ruku vždycky tvrdit opak než jak to ve skutečnosti je. To je z tvé strany nějaká hra?

Ja tomu hovorim troling.

PavelPalda

  • *
  • 7
  • Palivec
    • Zobrazit profil
Re:Programovací jazyk BASIX
« Odpověď #99 kdy: Dnes v 09:28:13 »
https://forum.root.cz/index.php?action=post;topic=31861.90;last_msg=436601

Odkaz jsem si uložil jako jeden ze zdrojů entropie pro generování certifikátů.

Kit

  • *****
  • 1 070
    • Zobrazit profil
    • E-mail
Re:Programovací jazyk BASIX
« Odpověď #100 kdy: Dnes v 11:03:07 »
Přijde mi, že konkrétně ty @Kite máš takovou ruku vždycky tvrdit opak než jak to ve skutečnosti je. To je z tvé strany nějaká hra?

Asi jsem si to spletl s jiným jazykem, kde to tak je. V destruktoru bylo zavírání otevřeného souboru. Bylo vytvořeno a zrušeno několik tisíc instancí. Proces pak padl na vyčerpání počtu povolených souborových deskriptorů.

Každý má nějaký názor, který nemusí korespondovat s názory ostatních a každý se občas splete v nějakém detailu. Místo GC jsem měl napsat uvolnění objektu z paměti, které se neděje bezprostředně po jeho zneplatnění.

Kit

  • *****
  • 1 070
    • Zobrazit profil
    • E-mail
Re:Programovací jazyk BASIX
« Odpověď #101 kdy: Dnes v 11:07:20 »
Citace
PS:
Přijde mi, že konkrétně ty @Kite máš takovou ruku vždycky tvrdit opak než jak to ve skutečnosti je. To je z tvé strany nějaká hra?

Ja tomu hovorim troling.

Ten tvůj výkřik o Brainfucku nebyl trollingem? Píšeš v něm reálné aplikace?

Re:Programovací jazyk BASIX
« Odpověď #102 kdy: Dnes v 12:54:07 »
Přijde mi, že konkrétně ty @Kite máš takovou ruku vždycky tvrdit opak než jak to ve skutečnosti je. To je z tvé strany nějaká hra?

Asi jsem si to spletl s jiným jazykem, kde to tak je. V destruktoru bylo zavírání otevřeného souboru. Bylo vytvořeno a zrušeno několik tisíc instancí. Proces pak padl na vyčerpání počtu povolených souborových deskriptorů.

Každý má nějaký názor, který nemusí korespondovat s názory ostatních a každý se občas splete v nějakém detailu. Místo GC jsem měl napsat uvolnění objektu z paměti, které se neděje bezprostředně po jeho zneplatnění.

To by chtělo tedy přesně říct, jaký jazyk to byl. C++ ne, Java ne. Možná C# kde to takto mizerně pojmenovali namísto "finalizer"?

Re:Programovací jazyk BASIX
« Odpověď #103 kdy: Dnes v 13:15:58 »
Místo GC jsem měl napsat uvolnění objektu z paměti, které se neděje bezprostředně po jeho zneplatnění.
Ne neměl. Ještě že jste napsal GC. Takhle víme, že je to omyl. Že mluvíte o nějakém jazyce s GC a ne o C++.
Kdybyste dál psal o zneplatnění objektu, tak se tu točíme v kruhu. Protože v kontextu C++ to moc nedává smysl a zároveň je to příliš obecné.