Proč je syntaxe programovacích jazyků tak složitá?

Kit

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #195 kdy: 29. 12. 2018, 15:38:38 »
pozrite sa na DSP ak viete co to je. A veci, o ktorej vy rozpravate sa spravne nazyva oktet. https://en.wikipedia.org/wiki/Octet_(computing)

Bajt sice na speciálních procesorech může mít jinou velikost než 8 bitů, ale obecně je vnímáno, že bajt a oktet jsou synonyma.


asdad

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #196 kdy: 29. 12. 2018, 16:48:17 »
pozrite sa na DSP ak viete co to je. A veci, o ktorej vy rozpravate sa spravne nazyva oktet. https://en.wikipedia.org/wiki/Octet_(computing)

Bajt sice na speciálních procesorech může mít jinou velikost než 8 bitů, ale obecně je vnímáno, že bajt a oktet jsou synonyma.

Napisali ste prave oxymoron...

asdad

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #197 kdy: 29. 12. 2018, 16:51:02 »
...
https://en.cppreference.com/w/cpp/types/climits

pozrite sa na DSP ak viete co to je. A veci, o ktorej vy rozpravate sa spravne nazyva oktet. https://en.wikipedia.org/wiki/Octet_(computing)
;D
To by mne zajímalo, co si tím kompenzuješ...

Tvoju nevedomost ;-)

Radovan.

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #198 kdy: 29. 12. 2018, 17:11:18 »
Ehm: https://en.wikipedia.org/wiki/Byte
Citace
The size of the byte has historically been hardware dependent and no definitive standards existed that mandated the size – byte-sizes from 1 to 48 bits are known to have been used in the past. Early character encoding systems often used six bits, and machines using six-bit and nine-bit bytes were common into the 1960s.


Osmibitový bajt přišel až s IBM System/360, což by pravidelní čtenáři rootu měli vědět.

BaldSlattery

Re:Proc je syntaxe programovacich jazyku tak slozita ?
« Odpověď #199 kdy: 06. 01. 2019, 09:41:36 »
Syntaxe přirozených jazyků je výrazně složitější než syntaxe programovacích jazyků.
V jakem smyslu? Že není bezkontextová?


Jano7

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #200 kdy: 06. 01. 2019, 20:38:47 »
Všichni kolem jsou debilové, ale s funkcemi víc argumentů tě počítat nenapadlo...
Já se k tomu náhodou přidávám. Pipe operátor ("|>"), který mívají funkcionální jazyky (např. F#, Elixir. Haskell má podobné "$") je neuvěřitelně návykový. Hlavně proto, že se kód čte zleva doprava a ne obráceně. Funkce více argumentů nejsou větší problém. Osobně jsem si na to hodně zvykl a přijde mi to daleko čitenější než haskellovské skládání využívající curryfikace (YMMV).

Kód: [Vybrat]
list = ["a", "b", "c", "d"]
list |> Enum.reverse() |> Enum.join("/")

# vysledek: "d/c/b/a"

versus

Kód: [Vybrat]
list = ["a", "b", "c", "d"]
Enum.join(Enum.reverse(list), "/")

# vysledek: "d/c/b/a"

(obojí Elixir)

A takto to má Python (list je klicove slovo):
Kód: [Vybrat]
lst = ['a', 'b', 'c', 'd']
'/'.join(reversed(lst))

Ruby

Kód: [Vybrat]
vals = ['a', 'b', 'c', 'd']

joined = vals.reverse.join("/")
p joined

JavaScript

Kód: [Vybrat]
let vals= ['a', 'b', 'c', 'd'];
let joined = vals.reverse().join('/');

console.log(joined);

Groovy

Kód: [Vybrat]
def vals = ['a', 'b', 'c', 'd']
def joined = vals.reverse().join('/')

println(joined)

Java

Kód: [Vybrat]
var vals = List.of("a", "b", "c", "d");

var joined = vals.stream().sorted(Collections.reverseOrder())
                .collect(Collectors.joining("/"));
System.out.println(joined);

Kotlin

Kód: [Vybrat]
val nums = listOf('a', 'b', 'c', 'd')
val joined = nums.reversed().joinToString("/")

println(joined)

PHP

Kód: [Vybrat]
$list = ["a", "b", "c", "d"];
$joined = implode("/", array_reverse($list));

print_r($joined);

Tcl

Kód: [Vybrat]
set vals {a b c d}
set joined [join [lreverse $vals] "/"]

puts $joined

Perl 6

Kód: [Vybrat]
my $vals = <a b c d>;
my $joined = join('/', reverse($vals));

say $joined;

C#

Vie niekto pre C# lepšie riešenie? Ja som sa domotal
len k takémuto škaredému:

Kód: [Vybrat]
var vals = new List<char> {'a', 'b', 'c', 'd'};
vals.Reverse();

Console.WriteLine(string.Join('/'));

Najkomplikovanejšie to má klasicky Java :), najbohatšie možnosti som postrehol pri Kotline. Viaceré jazyky to majú elegantné.

Lojza

  • *****
  • 672
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #201 kdy: 06. 01. 2019, 21:24:58 »
skoda ze Wirth nedotahnul PL/O do stavu plnohodnotneho jazyka, kompletni ucebnice na 17 strankach je uzasna ale k nicemu (je to hodne osekana verze pascalu)


https://www.dropbox.com/s/iy1xm8bhd38x8r0/PL0%20User%27s%20Manual.pdf?dl=0




Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #202 kdy: 06. 01. 2019, 21:40:41 »
skoda ze Wirth nedotahnul PL/O do stavu plnohodnotneho jazyka, kompletni ucebnice na 17 strankach je uzasna ale k nicemu (je to hodne osekana verze pascalu)


https://www.dropbox.com/s/iy1xm8bhd38x8r0/PL0%20User%27s%20Manual.pdf?dl=0

Tím dotaženým jazykem je Oberon nebo Oberon/0

PetrM

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #203 kdy: 07. 01. 2019, 10:23:12 »
Do mufloních vemen, vy tomu dáváte... '\0' má velikost charu, NULL má velikost ukazatele; to tu nikdo nerozporoval. Pokud je přetypuješ na stejný typ - což ten Mlocikův kód, který tuhle dávící soutěž odstartoval implicitně dělá, protože je napsán v C - bude mít výsledek pro oba přesně stejnou hodnotu i velikost. To je, oč tu celou dobu šlo. Jasné, soudruzi?

Ty jsi někde na mufloním vemenu měl neviditelně natisknutý ANCI S standard, že tak mudruješ?

1) Víš, jak funguje v C standardní string? Je to pole znaků v paměti, kde jsou za sebou ASCII znaky a poslední je NUL* (hodnota 0). Pokud je string prázdný, tak znak[0] == 0.
2) Víš, jak dostaneš string do funkce? Dáš mu odkaz na znak[0], konec si najde tak, že prostě narazí na 0. Hotovo.
3) NULL má hodnotu 0 proto, že v podmínce se jednoduše pozná, jestli je pointer platný**

No a teď příklad. Něco jednoduchýho, C na Z80. Program zaříná na adrese 0, skočí třeba na adresu 0x200. Takže od adresy 0x0 máš C3-00-20-... Pak máme třeba v RAMce (adresa řekněme 0x9876) pole pro string, který je prázdný ( byte s adresou 0x9876 == 0).
Pokud chci vrátit prázdný string, vrátím 0x9876. Funkce dereferuje pointer, vidí 0 a nic nedělá.
Pokud mu vrátím nulu (jako pointer), funkce vidí pole 0xC3-0x00 - zpracuje nesmyslný znak nebo nepozná, že jde o prázdný string a spustí nějakou akci.

Takže je úplně šumák, jestli NULL == NUL == 0. Jde o to, kdo, kde a jak to použije.  char* str = 0 není prázdný string, ale nepatný string!!!***

-------
* Je to NUL proto, že ASCII používá tři znaky pro označení, například zvonek u dálnopisu - bell - má označení BEL. Stejně tak první znak je null, ale autoři ASCII to stáhli na NUL.
** C nemá booleovský typ, kontroluje jenom je/není 0 - mrknout na zero flag CPU je jednoduchý a efektivní
*** takže třeba já osobně ho používám jenom jako indikaci selhání - v debugu neprojde asercí

O

Re:Proc je syntaxe programovacich jazyku tak slozita ?
« Odpověď #204 kdy: 07. 01. 2019, 15:56:49 »
Syntaxe přirozených jazyků je výrazně složitější než syntaxe programovacích jazyků.
V jakem smyslu? Že není bezkontextová?

To samozřejmě taky, ale reálně jsou přirozené jazyky složitější v jakémkoli smyslu, na který si vzpomeneš, protože to nejsou formální jazyky. Zkus si vzít třeba českou syntaxi a formálně ji popsat tak, aby podle toho popisu bylo možné strojově jednoznačně posoudit syntaktickou správnost libovolného textu a určit syntaktický význam každého prvku textu. To prakticky nejde. Ve srovnání s tím je jakýkoli programovací jazyk naprosto triviální matematická konstrukce.

BaldSlattery

Re:Proc je syntaxe programovacich jazyku tak slozita ?
« Odpověď #205 kdy: 07. 01. 2019, 16:19:23 »
Syntaxe přirozených jazyků je výrazně složitější než syntaxe programovacích jazyků.
V jakem smyslu? Že není bezkontextová?

To samozřejmě taky, ale reálně jsou přirozené jazyky složitější v jakémkoli smyslu, na který si vzpomeneš, protože to nejsou formální jazyky. Zkus si vzít třeba českou syntaxi a formálně ji popsat tak, aby podle toho popisu bylo možné strojově jednoznačně posoudit syntaktickou správnost libovolného textu a určit syntaktický význam každého prvku textu. To prakticky nejde. Ve srovnání s tím je jakýkoli programovací jazyk naprosto triviální matematická konstrukce.
Ono to jde, ale složitějšími prostředky. Třeba Watson od IBM to umí (pro angličtinu) pomocí slot grammars. Čeština má debilně volný slovosled, možná až na shluky příklonek, ale zase bohatší tvarosloví, což se navzájem vykompenzuje.

Kiwi

Re:Proc je syntaxe programovacich jazyku tak slozita ?
« Odpověď #206 kdy: 07. 01. 2019, 17:02:36 »
Ono to jde, ale složitějšími prostředky. Třeba Watson od IBM to umí (pro angličtinu) pomocí slot grammars. Čeština má debilně volný slovosled, možná až na shluky příklonek, ale zase bohatší tvarosloví, což se navzájem vykompenzuje.
Proč debilně? Chápu to spíš jako výhodu. Zas tak volný není - ty možné kombinace mají trochu jiné významové zabarvení.

Lojza

  • *****
  • 672
    • Zobrazit profil
    • E-mail
Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #207 kdy: 07. 01. 2019, 17:05:46 »

Citace
Ono to jde, ale složitějšími prostředky. Třeba Watson od IBM to umí (pro angličtinu) pomocí slot grammars. Čeština má debilně volný slovosled, možná až na shluky příklonek, ale zase bohatší tvarosloví, což se navzájem vykompenzuje.

Ten Watson si v anglictine poradi i s Frazovymi slovesy pode kontextu vety/odstavce ?

BaldSlattery

Re:Proč je syntaxe programovacích jazyků tak složitá?
« Odpověď #208 kdy: 07. 01. 2019, 17:49:50 »

Citace
Ono to jde, ale složitějšími prostředky. Třeba Watson od IBM to umí (pro angličtinu) pomocí slot grammars. Čeština má debilně volný slovosled, možná až na shluky příklonek, ale zase bohatší tvarosloví, což se navzájem vykompenzuje.

Ten Watson si v anglictine poradi i s Frazovymi slovesy pode kontextu vety/odstavce ?
Ano, poradí. Watson analyzuje sémantiku podle aktuálního větného členění. S frázovými slovesy to nesouvisí, všechna slovesa a jejich doplnění se interpretují podle kontextu. Mimochodem je to napsané v Prologu.

BaldSlattery

Re:Proc je syntaxe programovacich jazyku tak slozita ?
« Odpověď #209 kdy: 07. 01. 2019, 17:56:30 »
Ono to jde, ale složitějšími prostředky. Třeba Watson od IBM to umí (pro angličtinu) pomocí slot grammars. Čeština má debilně volný slovosled, možná až na shluky příklonek, ale zase bohatší tvarosloví, což se navzájem vykompenzuje.
Zas tak volný není - ty možné kombinace mají trochu jiné významové zabarvení.
Je syntakticky zcela volný kromě shluků příklonek. Sémantiku slovosled nijak neovlivňuje, vliv má jen na interpretaci v kontextu (podle aktuálního větného členění a kontextové vázanosti slov). Vzájemné ovlivňování slovosledu a kontextuální interpretace je rozsáhlá věda, píšou se o tom dizertace, ovšem bez znalosti několika typologicky odlišných jazyků si v tom člověk neškrtne. Například japonština vyjadřuje aktuální větné členění místo slovosledu příklonnými částicemi. I ta vysmívaná angličtina má ovšem příslušné slovosledné prostředky, viz například přesmyčka v “In the garden was a fountain”.