Doporučte programovací jazyk pro Windows

Re:Doporučte programovací jazyk pro Windows
« Odpověď #195 kdy: 12. 03. 2020, 14:31:25 »
co to je silné a slabé typování

Python je dynamicky typovaný jazyk, což neznamená, že není typovaný silně, narozdíl např. od JavaScriptu nebo PHP, které jsou slabě typované (sečtete hrušky a jablka a dá vám to nějaký výsledek).

Pojmy silně a slabě typovaný jsem nikdy moc nepochopil. Vždycky, když jsem začal do toho trochu víc do hloubky, zjistil jsem, že Python je silně typovaný jen u buildin funkcí a buildin typů. Zatímco v případě PHP a JS je to slabé typování ve skutečnosti jen automatická konverze (debilní jasně, ale přesto jen konverze) a ve skutečnosti je úplně stejně silně/slabě jako Python. V praxi mezi tím pak není vůbec žádný rozdíl. U všech tří jazyků mám u všech hodnot podobné informace o typech, a chovají se vesměs podobně (se zmíněnými výjimkami).

IMHO je pojem slabě typovaný hrubě zavádějící, a spíše bych hovořil o tom, že JS má nešťastně zvolené automatické přetypovávání.

Rozdíl je právě v tom, zda při operaci s rozdílnými typy dojde k vyvolání výjímky (silné typy) nebo o automatické konverzi (slabé typy). Python má silné typy, protože v Pythonu hodnoty svůj typ automaticky nemění (s jednou výjimkou u Python 2, konverze int/long). Python je silně typovaný i u uživatelských typů.

operace jsou uzivatelsky definovane u vsech typu, vyjimku musi explicitne vyhodit treba __add__


Re:Doporučte programovací jazyk pro Windows
« Odpověď #196 kdy: 12. 03. 2020, 15:27:51 »
Rozdíl je právě v tom, zda při operaci s rozdílnými typy dojde k vyvolání výjímky (silné typy) nebo o automatické konverzi (slabé typy). Python má silné typy, protože v Pythonu hodnoty svůj typ automaticky nemění (s jednou výjimkou u Python 2, konverze int/long). Python je silně typovaný i u uživatelských typů.

Žádná formální definice silného a slabého typování neexistuje, viz https://en.wikipedia.org/wiki/Strong_and_weak_typing. Všude je to samé "colloquially", "generally", "may" a různé všelijak se překrývající definice různých autorů (koneckonců jednu jsi si tady navrhl i ty sám).

Mě přijde zajímavé

 - jestli má jazyk statický typový systém (Java, Haskell, Python s MyPy) a jak je silný (třeba program v Rustu, pokud nepoužívá undefined, zaručuje absenci data races a neplatných přístupů do paměti)
 - jestli má dynamický typový systém, tj. zda si s sebou nesou objekty informaci o svém typu za běhu, a do jaké míry (třeba v C se nedá hodnot za běhu ničeho doptat, v Pythonu mi každý objekt řekne, jakého je typu, v Javě mi může objekt říci, že je Array, ale už ne čeho protože type erasure atp.).
 - někomu dalšímu mohou připadat důležité další vlastnosti ze seznamu na uvedené wikistránce

Pojmy silný a slabý typový systém používám skutečně zřídka a neformálně, když nehrozí nějaké zmatení, rozhodně bych se tím tady neoháněl jako něčím všeobecně uznávaným.

Ta "automatická změna typu" o které tu mluvíš není slabé typování, ale koerce (hledej coercion na https://en.wikipedia.org/wiki/Type_conversion).

Ink

  • ***
  • 199
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #197 kdy: 12. 03. 2020, 15:52:51 »
Mě přijde zajímavé

 - jestli má jazyk statický typový systém (Java, Haskell, Python s MyPy) a jak je silný (třeba program v Rustu, pokud nepoužívá undefined, zaručuje absenci data races a neplatných přístupů do paměti)
 - jestli má dynamický typový systém, tj. zda si s sebou nesou objekty informaci o svém typu za běhu, a do jaké míry (třeba v C se nedá hodnot za běhu ničeho doptat, v Pythonu mi každý objekt řekne, jakého je typu, v Javě mi může objekt říci, že je Array, ale už ne čeho protože type erasure atp.).
 - někomu dalšímu mohou připadat důležité další vlastnosti ze seznamu na uvedené wikistránce

Pojmy silný a slabý typový systém používám skutečně zřídka a neformálně, když nehrozí nějaké zmatení, rozhodně bych se tím tady neoháněl jako něčím všeobecně uznávaným.

Ta "automatická změna typu" o které tu mluvíš není slabé typování, ale koerce (hledej coercion na https://en.wikipedia.org/wiki/Type_conversion).

Naprosty souhlas.

qelurg

  • ****
  • 251
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #198 kdy: 12. 03. 2020, 17:41:03 »
co to je silné a slabé typování

Python je dynamicky typovaný jazyk, což neznamená, že není typovaný silně, narozdíl např. od JavaScriptu nebo PHP, které jsou slabě typované (sečtete hrušky a jablka a dá vám to nějaký výsledek).

Pojmy silně a slabě typovaný jsem nikdy moc nepochopil. Vždycky, když jsem začal do toho trochu víc do hloubky, zjistil jsem, že Python je silně typovaný jen u buildin funkcí a buildin typů. Zatímco v případě PHP a JS je to slabé typování ve skutečnosti jen automatická konverze (debilní jasně, ale přesto jen konverze) a ve skutečnosti je úplně stejně silně/slabě jako Python. V praxi mezi tím pak není vůbec žádný rozdíl. U všech tří jazyků mám u všech hodnot podobné informace o typech, a chovají se vesměs podobně (se zmíněnými výjimkami).

IMHO je pojem slabě typovaný hrubě zavádějící, a spíše bych hovořil o tom, že JS má nešťastně zvolené automatické přetypovávání.

Rozdíl je právě v tom, zda při operaci s rozdílnými typy dojde k vyvolání výjímky (silné typy) nebo o automatické konverzi (slabé typy). Python má silné typy, protože v Pythonu hodnoty svůj typ automaticky nemění (s jednou výjimkou u Python 2, konverze int/long). Python je silně typovaný i u uživatelských typů.

operace jsou uzivatelsky definovane u vsech typu, vyjimku musi explicitne vyhodit treba __add__

Operace jsou uživatelsky definovatelné nikoliv definované, implicitní chování u built in typů je vyhodit výjimku, pokud operátor nepodporuje operaci s různými datovými typy. Nikdy nedojde implicitně k přetypování hodnoty.

qelurg

  • ****
  • 251
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #199 kdy: 12. 03. 2020, 18:12:47 »
Rozdíl je právě v tom, zda při operaci s rozdílnými typy dojde k vyvolání výjímky (silné typy) nebo o automatické konverzi (slabé typy). Python má silné typy, protože v Pythonu hodnoty svůj typ automaticky nemění (s jednou výjimkou u Python 2, konverze int/long). Python je silně typovaný i u uživatelských typů.

Žádná formální definice silného a slabého typování neexistuje, viz https://en.wikipedia.org/wiki/Strong_and_weak_typing. Všude je to samé "colloquially", "generally", "may" a různé všelijak se překrývající definice různých autorů (koneckonců jednu jsi si tady navrhl i ty sám).

Mě přijde zajímavé

 - jestli má jazyk statický typový systém (Java, Haskell, Python s MyPy) a jak je silný (třeba program v Rustu, pokud nepoužívá undefined, zaručuje absenci data races a neplatných přístupů do paměti)
 - jestli má dynamický typový systém, tj. zda si s sebou nesou objekty informaci o svém typu za běhu, a do jaké míry (třeba v C se nedá hodnot za běhu ničeho doptat, v Pythonu mi každý objekt řekne, jakého je typu, v Javě mi může objekt říci, že je Array, ale už ne čeho protože type erasure atp.).
 - někomu dalšímu mohou připadat důležité další vlastnosti ze seznamu na uvedené wikistránce

Pojmy silný a slabý typový systém používám skutečně zřídka a neformálně, když nehrozí nějaké zmatení, rozhodně bych se tím tady neoháněl jako něčím všeobecně uznávaným.

Ta "automatická změna typu" o které tu mluvíš není slabé typování, ale koerce (hledej coercion na https://en.wikipedia.org/wiki/Type_conversion).

Formální definici to možná nemá, ale je to běžně používaný termín, který je obecně používán a přijímán a implicitní přetypování je základním rozlišením mezi silným a slabým typováním.


Re:Doporučte programovací jazyk pro Windows
« Odpověď #200 kdy: 12. 03. 2020, 20:02:48 »
Formální definici to možná nemá, ale je to běžně používaný termín, který je obecně používán a přijímán a implicitní přetypování je základním rozlišením mezi silným a slabým typováním.
Které známé jazyky tedy mají podle této definice silné typování?

Re:Doporučte programovací jazyk pro Windows
« Odpověď #201 kdy: 12. 03. 2020, 20:04:14 »
Formální definici to možná nemá, ale je to běžně používaný termín, který je obecně používán a přijímán a implicitní přetypování je základním rozlišením mezi silným a slabým typováním.

Citation needed. Mezitím si můžeš přečíst třeba https://stackoverflow.com/questions/2690544/what-is-the-difference-between-a-strongly-typed-language-and-a-statically-typed, speciálně odstavec "Strong vs weak" v první odpovědi, která má > 500 upvotes.

Dokonce koukám, že v tom vlákně si někdo (https://stackoverflow.com/a/2690596/3220468) myslí to samé co ty. Jeho názor má 15 upvotes. Tolik asi o tom jak je ten termín "obecně používán a přijímán" v tom smyslu, ve kterém to tvrdíš ty.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #202 kdy: 12. 03. 2020, 20:19:09 »
Operace jsou uživatelsky definovatelné nikoliv definované, implicitní chování u built in typů je vyhodit výjimku, pokud operátor nepodporuje operaci s různými datovými typy. Nikdy nedojde implicitně k přetypování hodnoty.

operator je obycejna funkce, ktera se zavola vzdy, typova kontrola muze a nemusi probihat uvnitr te funkce. Operace built in typu jsou definovane uplne stejnym zpusobem jako u uzivatelskych c api typu.
« Poslední změna: 12. 03. 2020, 20:22:29 od A.P.Hacker »

qelurg

  • ****
  • 251
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #203 kdy: 12. 03. 2020, 21:00:35 »
Formální definici to možná nemá, ale je to běžně používaný termín, který je obecně používán a přijímán a implicitní přetypování je základním rozlišením mezi silným a slabým typováním.

Citation needed. Mezitím si můžeš přečíst třeba https://stackoverflow.com/questions/2690544/what-is-the-difference-between-a-strongly-typed-language-and-a-statically-typed, speciálně odstavec "Strong vs weak" v první odpovědi, která má > 500 upvotes.

Dokonce koukám, že v tom vlákně si někdo (https://stackoverflow.com/a/2690596/3220468) myslí to samé co ty. Jeho názor má 15 upvotes. Tolik asi o tom jak je ten termín "obecně používán a přijímán" v tom smyslu, ve kterém to tvrdíš ty.

a) je to stará diskuse b) že s něčím souhlasí většina neznamená, že je to pravda c) ty odpovědi nebyly dány ve stejný čas, takže to porovnání hlasování nedává smysl d) píše se tam např. nesmysl jako "It is very rare to hear someone talk about a "strong" or "weak" dynamic type system." Už jen to by ti mělo napovědět, že je to dávno překonané.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #204 kdy: 12. 03. 2020, 21:17:50 »
Formální definici to možná nemá, ale je to běžně používaný termín, který je obecně používán a přijímán a implicitní přetypování je základním rozlišením mezi silným a slabým typováním.

Citation needed. Mezitím si můžeš přečíst třeba https://stackoverflow.com/questions/2690544/what-is-the-difference-between-a-strongly-typed-language-and-a-statically-typed, speciálně odstavec "Strong vs weak" v první odpovědi, která má > 500 upvotes.

Dokonce koukám, že v tom vlákně si někdo (https://stackoverflow.com/a/2690596/3220468) myslí to samé co ty. Jeho názor má 15 upvotes. Tolik asi o tom jak je ten termín "obecně používán a přijímán" v tom smyslu, ve kterém to tvrdíš ty.

a) je to stará diskuse b) že s něčím souhlasí většina neznamená, že je to pravda c) ty odpovědi nebyly dány ve stejný čas, takže to porovnání hlasování nedává smysl d) píše se tam např. nesmysl jako "It is very rare to hear someone talk about a "strong" or "weak" dynamic type system." Už jen to by ti mělo napovědět, že je to dávno překonané.

a) Ukaž novější. Zatím jsi neukázal nic, co by podporovalo to co tvrdíš, narozdíl ode mě.
b) Když tvrdíš, že je něco obecně (tedy většinou) přijímané, a přitom většina tvrdí opak, tak nemáš pravdu ty.
c) srsly? porovnání > 500 upvotes vs 16 upvotes (je milé, že jsi tam jeden přidal) nedává smysl, protože jedna odpověď je stará 3612 dní a jedna 3611 dní? To už je opravdu smutný argument.
d) To, že o tom často slyšíš mluvit sám sebe ještě neznamená, že to není extremely rare.

Zkus předložit nějaká podložená fakta místo dojmologie, která zakopává o realitu na každém kroku.

qelurg

  • ****
  • 251
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #205 kdy: 12. 03. 2020, 21:28:32 »
Operace jsou uživatelsky definovatelné nikoliv definované, implicitní chování u built in typů je vyhodit výjimku, pokud operátor nepodporuje operaci s různými datovými typy. Nikdy nedojde implicitně k přetypování hodnoty.

operator je obycejna funkce, ktera se zavola vzdy, typova kontrola muze a nemusi probihat uvnitr te funkce. Operace built in typu jsou definovane uplne stejnym zpusobem jako u uzivatelskych c api typu.
Operator neni funkce, operator muze volat prislusnou funkci, ale nevola ji vzdy.

Kód: [Vybrat]
>>> a = compile("(10).__add__(20)", "x", "exec")
>>> b = compile("(10)+(20)", "x", "exec")
>>> a.co_code
'd\x00\x00i\x00\x00d\x01\x00\x83\x01\x00\x01d\x02\x00S'
>>> b.co_code
'd\x00\x00d\x01\x00\x17\x01d\x02\x00S'
>>> import dis
>>> dis.disassemble(a)
  1           0 LOAD_CONST               0 (10)
              3 LOAD_ATTR                0 (__add__)
              6 LOAD_CONST               1 (20)
              9 CALL_FUNCTION            1
             12 POP_TOP             
             13 LOAD_CONST               2 (None)
             16 RETURN_VALUE       
>>> dis.disassemble(b)
  1           0 LOAD_CONST               0 (10)
              3 LOAD_CONST               1 (20)
              6 BINARY_ADD         
              7 POP_TOP             
              8 LOAD_CONST               2 (None)
             11 RETURN_VALUE

Operace definovane v c api bych neoznacoval za uzivatelske.

qelurg

  • ****
  • 251
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #206 kdy: 12. 03. 2020, 22:31:34 »
Formální definici to možná nemá, ale je to běžně používaný termín, který je obecně používán a přijímán a implicitní přetypování je základním rozlišením mezi silným a slabým typováním.

Citation needed. Mezitím si můžeš přečíst třeba https://stackoverflow.com/questions/2690544/what-is-the-difference-between-a-strongly-typed-language-and-a-statically-typed, speciálně odstavec "Strong vs weak" v první odpovědi, která má > 500 upvotes.

Dokonce koukám, že v tom vlákně si někdo (https://stackoverflow.com/a/2690596/3220468) myslí to samé co ty. Jeho názor má 15 upvotes. Tolik asi o tom jak je ten termín "obecně používán a přijímán" v tom smyslu, ve kterém to tvrdíš ty.

a) je to stará diskuse b) že s něčím souhlasí většina neznamená, že je to pravda c) ty odpovědi nebyly dány ve stejný čas, takže to porovnání hlasování nedává smysl d) píše se tam např. nesmysl jako "It is very rare to hear someone talk about a "strong" or "weak" dynamic type system." Už jen to by ti mělo napovědět, že je to dávno překonané.

a) Ukaž novější. Zatím jsi neukázal nic, co by podporovalo to co tvrdíš, narozdíl ode mě.
b) Když tvrdíš, že je něco obecně (tedy většinou) přijímané, a přitom většina tvrdí opak, tak nemáš pravdu ty.
c) srsly? porovnání > 500 upvotes vs 16 upvotes (je milé, že jsi tam jeden přidal) nedává smysl, protože jedna odpověď je stará 3612 dní a jedna 3611 dní? To už je opravdu smutný argument.
d) To, že o tom často slyšíš mluvit sám sebe ještě neznamená, že to není extremely rare.

Zkus předložit nějaká podložená fakta místo dojmologie, která zakopává o realitu na každém kroku.
a)
https://cs.m.wikipedia.org/wiki/Python
https://en.m.wikipedia.org/wiki/Python_(programming_language)
https://cs.m.wikipedia.org/wiki/Haskell_(programovac%C3%AD_jazyk)
https://cs.m.wikipedia.org/wiki/Java_(programovac%C3%AD_jazyk)
https://cs.m.wikipedia.org/wiki/PHP
https://cs.m.wikipedia.org/wiki/C_(programovac%C3%AD_jazyk)
https://cs.m.wikipedia.org/wiki/Rust_(programovac%C3%AD_jazyk)
https://wiki.python.org/moin/Why%20is%20Python%20a%20dynamic%20language%20and%20also%20a%20strongly%20typed%20language
https://oznetnerd.com/2017/05/16/python-strong-dynamically-typed-language/
https://www.artima.com/weblogs/viewpost.jsp?thread=7590
https://m.youtube.com/watch?v=-NuS_BM1etY
https://wiki.c2.com/?WeakAndStrongTyping
https://docs.microsoft.com/en-us/windows/win32/rpc/strong-typing
http://python.wraith.cz/uvod-datove_typy-typovani.php
https://www.i-programmer.info/programming/theory/1469-type-systems-demystified-part2-weak-vs-strong.html
https://dl.acm.org/doi/10.1145/97946.97964
https://en.m.wiktionary.org/wiki/strong_typing
https://perl.plover.com/yak/typing/

b) jaká většina, odkazuješ se na starou nesmyslnou diskusi

c) návštěvnost není po celou dobu stejná, první příspěvek byl dán o dva měsíce dřív, po dvou měsících už je takový dotaz minulost

d) je to normálně používané označení typového systému, viz odkazy výše na popisy jednotlivých jazyků na wiki, u každého je definováno, zda má silné nebo slabé typy a to i u dynamických jazyků, používá se to úplně běžně.
« Poslední změna: 12. 03. 2020, 22:37:00 od qelurg »

Re:Doporučte programovací jazyk pro Windows
« Odpověď #207 kdy: 13. 03. 2020, 02:06:21 »
co to je silné a slabé typování

Python je dynamicky typovaný jazyk, což neznamená, že není typovaný silně, narozdíl např. od JavaScriptu nebo PHP, které jsou slabě typované (sečtete hrušky a jablka a dá vám to nějaký výsledek).

Pojmy silně a slabě typovaný jsem nikdy moc nepochopil. Vždycky, když jsem začal do toho trochu víc do hloubky, zjistil jsem, že Python je silně typovaný jen u buildin funkcí a buildin typů. Zatímco v případě PHP a JS je to slabé typování ve skutečnosti jen automatická konverze (debilní jasně, ale přesto jen konverze) a ve skutečnosti je úplně stejně silně/slabě jako Python. V praxi mezi tím pak není vůbec žádný rozdíl. U všech tří jazyků mám u všech hodnot podobné informace o typech, a chovají se vesměs podobně (se zmíněnými výjimkami).

IMHO je pojem slabě typovaný hrubě zavádějící, a spíše bych hovořil o tom, že JS má nešťastně zvolené automatické přetypovávání.

Rozdíl je právě v tom, zda při operaci s rozdílnými typy dojde k vyvolání výjímky (silné typy) nebo o automatické konverzi (slabé typy). Python má silné typy, protože v Pythonu hodnoty svůj typ automaticky nemění (s jednou výjimkou u Python 2, konverze int/long). Python je silně typovaný i u uživatelských typů.

operace jsou uzivatelsky definovane u vsech typu, vyjimku musi explicitne vyhodit treba __add__

Přesně tak. Možná tak C, tam je opravdu všechno jen ukazatel na int.  Ale když se tu porovnává Python s Javascriptem a PHP, tak ten rozdíl je jen v tom automatickém přetypovávání u buildin věcí. Jakmile si vytváříš vlastní funkce a objekty, tak je jen na tobě, zda budeš asertovat vstupy. Na této úrovni není Python o nic silnější jak Javascript. A PHP je dokonce ještě o chloupek chytřejší, protože má typehinty, a tudíš to jakože usnadňuje tu asertaci.

Bez ohledu na obdiv, který k Pythonu chovám, tak pojem silná typová kontrola považuju za marketingový kec a nemám ho rád, protože to s žádným typováním nesouvisí.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #208 kdy: 13. 03. 2020, 02:09:43 »
d) je to normálně používané označení typového systému, viz odkazy výše na popisy jednotlivých jazyků na wiki, u každého je definováno, zda má silné nebo slabé typy a to i u dynamických jazyků, používá se to úplně běžně.
Ale jo, to je samozřejmě pravda, že se to naprosto běžné používá. Já ale tvrdím, že je to blbost protože to vyvolává falešná očekávání.

Python - WTF???
« Odpověď #209 kdy: 13. 03. 2020, 03:59:29 »
Tak, dneska mam dalsi dukaz, jake Python umoznuje bastleni. Takove sra cka by v Jave NIKDY nemohla existovat.

Kód: [Vybrat]
import boto3

# Write to SNS
sns = boto3.resource('sns')
sns.publish(TopicArn='myTopic123', Message='Hello world')

# Write to SQS
sqs = boto3.client('sqs')
queue = sqs.get_queue_by_name(QueueName='myQueue123')
queue.send_message(MessageBody='Hello world')

Jak vam mozna doslo, na promenne "sqs" ani "sns" vam v IDE nefunguje naseptavani metod, statickou analyzou nejde zjistit co to do haje vlastne vraci, tzn. celou dobu prace s touhle knihovnou musite cumet do dokumentace na Internetu  :D

Ano, autor knihovny byl bezesporu debil, a v Pythonu to jde udelat i jinak, ale PYTHON TOHLE UMOZNI! Java to neumozni, takze i kdyz je nejaky programator blbecek, tak tohle nema sanci nejak rozumne rozsirit do sveta v Jave.
« Poslední změna: 13. 03. 2020, 04:03:21 od PetrK »