Programovací jazyk BASIX

Kit

  • *****
  • 1 066
    • 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 066
    • 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.