Diskuze: Budoucí programovací jazyk
Tvůrce
Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
když se ti takový jazyk líbí, si ho vytvoř. Mě se líbí současné jazyky.
Na rozdil od kolegy si myslim, ze je to dobry napad. Kazdopadne, je to pro tebe jakasi moznost, ze takovy jazyk muzes vymyslet a zpopularizovat. Zkus to a bud uspejes nebo neuspejes.
Jinak, zajimalo by me, jak bys resil ten inf
Napadá mě třeba zjistit si to druhé číslo v intervalu a pak nechat dosadit jakékoli podle podmínky. Bylo by to docela zajímavý, přešlo by se k esenciální složitosti programu a upustilo by se od té druhotné, nicméně na vytvoření takového jazyka nemám zkušenosti.
Zadání:
maximalizuj: x + 2y
2 <= x <= 5
2 <= y
x + y = 10
Řešení v R:
library(boot)
a <- c(1, 2)
A1 <- rbind(c(1, 0))
b1 <- c(5)
A2 <- rbind(c(1, 0), c(0, 1))
b2 <- c(2, 2)
A3 <- rbind(c(1, 1))
b3 <- 10
simplex(a, A1, b1, A2, b2, A3, b3, maxi = T)
Napadá mě třeba zjistit si to druhé číslo v intervalu a pak nechat dosadit jakékoli podle podmínky. Bylo by to docela zajímavý, přešlo by se k esenciální složitosti programu a upustilo by se od té druhotné, nicméně na vytvoření takového jazyka nemám zkušenosti.
Úplně nechápu to tvoje klíčové slovo belongs. Tím jako řekneš, že daná proměnná je takového typu, jehož obor hodnot je <0;inf)? Určitě by se to někdy hodilo, na druhou stranu nevím, jak by na tom takový kód byl s výkonem. Ale v některých rozšířeních na verifikaci kódu se něco na ten způsob může použít (sdělíš rozsah vstupních hodnot parametrů funkce a překladač je na základě toho schopný říci třeba něco o jejím výsledku).
Pak ještě nechápu tebou používané pojmy esenciální složitost a druhotná složitost. Myslím tím odstřihnoutí se od implementační složiotsti (tzn. řešení, jaké má mít program proměnné a datové struktury, v podstatě se jedná o rozhodnutí závislá na prostředí/architektuře...)? Jestli ano, asi by se ti líbily neprocedurální jazyky (možná Prolog, ale spíše Haskell, Shceme...), kde ta implementační složitost tak trochu odpadá a jedná se spíš o zápis myšlenek (alespoň tak to vidím jako někdo, kdo ty jazyky vůbec nemusí).
Belongs (patří, náleží) jsem myslel náleží v matematickém smyslu. Tedy proměnná náleží intervalu <0, inf), kdy inf je nekonečno, nebo proměnná náleží množitě N0, tedy přirozeným číslům s nulou.
Druhotnou složitostí jsem myslel postupy, které přímo neslouží k výsledku programu. Ošetření chyb, testy, cache, nějaké nepříliš významné struktury. Esenciální složitost by pak souvisela pouze striktně s potřebnou složitostí programu.
Zároveň by byla potřeba architektura, která by oddělila data, logiku a výpis, což je častá nevýhoda u velkých aplikačních rámců, například Tkinteru. Pracuje se zde pak s aplikací, kde nejen že se řeší pouze esenciální složitost, ale výkonově má stejný potenciál jako třeba C, přestože neztrácí přehlednost. Nemluvě o jeho univerzálnosti. Takový jazyk by pro mě byl nebem.
Ahoj,
a vyzkousel jsi se podivat na funkcionalni programovani? To je primo zalozene na
praci s daty (mnozinami) a jejich reprezentaci.
Peknym uvodem muze byt napr. http://www.inf.fu-berlin.de/…i/lambda.pdf
Druhotnou složitostí jsem myslel postupy, které přímo neslouží k výsledku programu. Ošetření chyb, testy, cache, nějaké nepříliš významné struktury. Esenciální složitost by pak souvisela pouze striktně s potřebnou složitostí programu.
Tohle podle mě právě dost splňují ty neprocedurální (funkcionální jazyky). Tam jsou věci týkající se spíše architektury a implementačních detailů ponechány spíše na překladači. Co se týče ošetření chyb a testů, tomu asi moc nelze uniknout, protože asi těžko překladač uhodne, jak by sis přál určitou chybu zrovna v dané situaci řešit a protože verifikace je sice fajn věc, ale zdaleka se nedá použít vždycky (a co si pamatuju, tak některé přístupy v ní také dovolují udělat chyby).
Co se týče toho funkcionálu, vezměme si za příklad třeba Quicksort. Ve funkcionálním jazyce zapíšeš tento algoritmus nějak takto:
Jedná se o množinu skládající se ze tří částí:
* Quicksort([čísla <= pivot]),
* pivod (např. prostřední prvek setřizovaného pole),
* Quicksort([čísla > pivot]).
Což je v podstatě hlavní myšlenka toho algoritmu. Dá se to (třeba v Haskelu) napsat na 1-2 řádky, co si pamatuju, a vůbec neřešíš nějaké přehazování čísel, nějaké proměnné... jenom zapíšeš tuhle myšlenku syntaxí jazyka a je hotovo (+ musíš definovat okrajové případy).
Výkonové problémy tebou navrhovaných jazyků by se daly řešit jejich transformací do Cčka (pokud vím, takové jazyky i existují, např. Mercury, případně něco pro programování v realtime prostředí). Vůbec bych se nedivil, kdyby jazyk, který má to tvoje belongs v určité formě existoval. Jenom ho třeba využívají jen někde na akademické půdě nebo v podobně malém měřítku.
problém s takovým jazykem by byla hlavně současná architektura procesorů.. A jak to naimplementovat, aby to nebylo pekelně pomalé.. Můžeš zkusit
Jak už ti naznačovali ostatní, vymýšlíš něco, co už je vymyšlené
Myslím si, že je úplně jedno v čem programuješ, důležité je programování samo o sobě. Tedy umět vymyslet postup, zpracovat vstupy a výstupy a pod. Pak je neméně důležité umět svůj program zdokonalit a upravit. Myslím si, že je fakt jedno, zda k tomu co potřebuješ počítačem udělat použiješ JavaScript, PHP, C nebo cokoliv jiného. Ale třeba najdeš prostředí pro které stávající jazyky nevyhovují, jako tomu bylo při vzniku PHP, JavaScript, C++...
Pardon chtěl jsem dát +1 jen jsem se překlik a už to nejde vzít zpět.
Zobrazeno 14 zpráv z 14.