Diskuze: Jmeno programovaciho jazyka

Člen

Zobrazeno 50 zpráv z 61.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
C@ (jazyov zacinajucich na C nie je nikdy dost:) )
Detaily? Interpretovaný, kompilovaný nebo Virt. Stroj? Z jakého jazyka vychází? Pokud kompilovaný, do kterého jazyka se kompiluje?
Kompilovaný, vychází z Javy a Ruby, kompiluje se do Javy, kolekce, objektový, lambda výrazy..
Kompilujes to do java bytecodu alebo do javy ktoru nasledne kompiluje java kompilatorom?
Zatím se kompiluje do zdroje Javy, ale chci to udělat později přímo do bytecodu.
Mimochodem, nechtěl by jsi pomoc při vývoji?
Vystup tvojho prekladaca je korektny java kod alebo nehavas osetrovanie chyb na java kompilatore?
Dík, zvládnu to sám, ale pokud s něčím budu potřebovat pomoct, zeptám
se tě
Nespravyl si nahodou len preprocessor?
No... , když se nad tím teď zamyslím, tak asi jo Ale mám tam i runtime interpretaci
a vlastnosti, které do Javy nejdou převést..
Ako tam mozes mat interpreter ked testovanie chyb nehavas na jave? Ako tam
mozes mat vlastnosti ktore nejdu do javy previest ked to kompilujes do javy?
Mám tam dva režimy:
Je to složité, ale funguje to
A myslím, že tu jde o jméno ne princip překladu, kompilaci, interpretace...
Jakou má syntaxi podle toho by se dal vymyslet název...
Jméno už jsem vymyslel, syntaxi má "plochou" (co nejméně závorek) -> Flat.
takze příkaz if se tam (podle mého odhadu) dělá
if a == "ahoj" then
end
narozníl od javy kde je to
if(a.equals("ahoj)){
}
chapu to dobře
takze tvuj jazyk se může jmenovat Flat
Docela mě zajímá jaké má další vlastnosti.
Protoze kdyby byl objektový tak by se mohl jmenovat fol(flat objectiv
language)
A proč né třeba rose, vycházející z tvého
příjmení?
Pak to prezentovat na doméně např. rose-lang.com ...
Jo, jazyk se může jmenovat Flat. Jeho hlavní odlišností bude hlavně volání (a definování) funkcí:
# Definice
say: what as: who; do
print: who + ' says ' + what
end
# Zavolání
say: 'Hello!' as: 'World'
Přemýšlím také o tvorbě vlastního jazyka a napadla mě podobná syntaxe
Jo, to by mohl, vlastně jsem o tom moc nepřemýšlel... Ony obě jména
mají své výhody a nevýhody ohledně konfliktů ve vyhledávači: Flat se
často zamění s Cb (c-flat, sice neznámý, ale vyhledávač ho hází na
první místa). Rose se zase zamění s frameworkem ROSE... Každopádně o tom
popřemýšlím
Přesněji že by se jednotlivé příkazy dali oddělit :
No objektový jazyk to není to je jasné fungováním my trochu připomíná lua
Jaký je to typ jazyka.
Hádám to na funkcionální takže by se mohl jmenovat ffl (flat funkcional language)
Je to hodně podobné Objective-C. K tomu jazyků, v jakém jazyce ho
hodláš programovat? Já ho programuju v Pythonu a vytváří k němu vlastní
parkovací knihovnu. Jestli chceš pošlu ti její poslední, ještě
nezveřejněnou verzi. Ale asi
ji ještě budu mnohokrát měnit a optimalizovat...
Objekty zde budou, ale nebude to čistě objektový jazyk, bude možná trochu funkcionální, chtěl bych tam mít prototypy nebo něco na ten způsob, přemýšlel jsem, že by se atributy objektů ukládaly do hashe (dictionary) -> dají se snadno přidávat/mazat/měnit. Bude to jazyk dynamický -> proměnné jsou jména ukazující na hodnotu -> hodnota se nemění, mění se pouze informace, kam ukazuje "jméno". Taky jsem tam chtěl zakomponovat něco jako "odhadovač" výpočtů a ten, když výpočet selže (ComputeError, například při výpočtu Googolplexu), dosadí svou "odhadnutou" hodnotu místo výsledků.
No umím programovat v Javě a v C#
Zatím ho plánuju programovat v C#
A bude objektový mám rád OOP.
Jak rozpoznáš konstrukce?
# Definice
say: what as: who; do
print: who + ' says ' + what
end
# Zavolání
say: what as: who
Trochu nechápu jak to myslíš. Mám tu tyto konstrukce:
# Try-Catch-Else(pokud Try "vyjde")
try
...
[fail [TypChyby do]
...
[else
...]]
end
# If: pokud platí, Unless: pokud neplatí
[if | unless] ... do
...
[ elif ... do
...
[else
...]]
end
# Switch
match ... do
case ... {
...
}
[else
...
[end]]
end
# While: dokud podmínka platí, Until: dokud podmínka neplatí
[while | until] ... do
...
[elif ... do
...
[else
...]]
end
# While s pozdní podmínkou
do
...
while ... [elif ... do
...
[else
...]]
end
# Iterátor
for ... in ... do
...
[elif ... do
...
[else
...]]
end
# Přiřazení proměnné
a = 1 + 2 - 3 * 4 / 5 ** 6 // 7
# "Hození" chyby
raise Exception
# Spuštění kódu v textu
do 'print: \'Hello world!\''
Zajímalo mě, jak rozpoznáš volání a definici funkce.
Volání funkce je několikrát se opakující symbol, za kterým následuje dvojtečka a výraz. Pokud se ve výrazu vyskytuje (na konci výrazu) volání funkce, musí být ukončet středníkem (aby se argumenty jednotlivých funkcí rozlišily). Definice funkce má hlavičku s již zmíněnou gramatikou s tím rozdílem, že místo výrazů (sčítání, volání funkcí, podmínky), jsou zde POUZE identifikátory (vnitřní jména argumentů), a celá hlavička je zakončena středníkem. Poté následuje blok "údajů" (statements), který zase může obsahovat definice funkcí, a je uvozen klíčovým slovem "do" a ukončen slovem "end".
Co se vytiskne v tomhle případě?
say: word to: receiver; do
return '->say_to:' + receiver + word
end
say: word; do
return '->say:' + word
end
to: receiver; do
return '->to:' + receiver
end
# volani
print: say: say: say: 'a'; to: to: 'b'; + '4'
Vyskytne se syntaktická chyba, protože za jménem argumentu musí následovat hodnota:
print: say: say: say: 'a'; to: to: 'b'; + '4'
^
To je přece volání funkce: [to: 'b']
EDIT:
A nebo je to možná volání funkce [to: 'b'; + '4'], nejsem si jistý, že
jsem úplně pochopil tvoji definici.
Dobře, v tom případě se vyskytne syntaktická chyba na konci řádku, poněvadž všechny funkce volané uvnitř argumentů musí končit středníkem a dva zde schází. Pokud by zde byl:
print(say(say(say('a'), to=(to('b')+'4'))))
V mém AST je to reprezentováno takto:
([{'call': {'args': ({'name': 'print'}, {'value': {'call': {'args': ({'name': 'say'}, {'value': {'call': {'args': [({'name': 'say'}, {'value': {'call': {'args': ({'name': 'say'}, {'value': {'string': 'a'}})}}}), ({'name': 'to'}, {'value': ({'call': {'args': ({'name': 'to'}, {'value': {'string': 'b'}})}}, '+', {'string': '4'})})]}}})}}})}}], '')
Nikdo tě nenutí v něm programovat. Tato syntaxe má uživatele donuti, aby nevolali brutálně vnořené
funkce, a raději si jejich hodnoty ukládali do proměnných. Ještě není
dodělaný, ale třeba desktopovou aplikaci si představuju takto:
require: 'app'
# Dědění, třídu od funkce rozpoznám tak, že na prvním místě je metoda @init
App(Application) do
@init: @window, @ui
@load; do
@super.load # Funkce a metody bez argumentů se chovají jako atributy -> při vyhodnocování atribut/metoda mají metody přednost
end
@render; do
@super.render
@ui.add: Label: 'Hello world!'; id: 'helloLabel'
@ui.add: Button: 'Click me!'; id: 'clickButton'
end
@frame; do
@super.frame
end
@event: e; do
if e == 'clickButtonClicked' do
@ui.get: 'helloLabel';.text: 'Clicked!'
end
end
end
já bych si to představoval spíš takhle.
window my = new window(true); #visible
my.add(label:text:"ahoj",variable:myLabel)
function myLabelAction() ;#nevim jak ve tvém jazyce fungují funkce
print("hello world");
end function
Trošku jsem to upravil:
print: (say: (say: (say: 'a') to: (to: 'b' + '4')))
Vnořené funkce jsou uzavřené v závorkách a jména argumentů nejsou oddělena čárkami. Dá se zde také použít nový C-like zápis, v němž už čárky být musí.
Tato syntaxe má uživatele donuti, aby nevolali brutálně vnořené funkce
Mozes dat priklad comu chces zabranit (a ako a preco)?
print(input("Answer this question: '" + input("Enter a question: ") + "'."))
Jak? Vysvětleno výše.
Proč? Protože s jakoukoli syntaxí je to guláš.
Zobrazeno 50 zpráv z 61.