Knott
А зачем ВМ, если твой компилер переводит яву в фасм?
Компилятор ЯВЫ
Я же писал. Мой компилятор имеет много ограничений.
Knott, с удовольствием помогу тебе в написании проекта. Сам собирался этим заняться.
В частности могу сделать лексический, синтаксический и семантический анализаторы.
Не смог понять из постов (может невнимательно прочел), на чем написан твой нынешний компилятор?
В частности могу сделать лексический, синтаксический и семантический анализаторы.
Не смог понять из постов (может невнимательно прочел), на чем написан твой нынешний компилятор?
Так, давай раставем фсе точки над i.
Сначало это был компилятор, но потом, после посешения стешнего IRC, миня уговорили делать виртуальную машину. Причем не Java, а .NET .
После долгого времяни, писания прототипов, чтения документации(О процессорах, о виртуальных машинах, о компиляторов(И CIL и Native)),
я понил - .NET, с его хитро-вы****ым JIT мине не асилить. Да и недумаю что Kolibri поташил бы мою расработку(Веть песать нада на АСМ).
После этого я решил углубится в Java VM. Мне понравилось то что остоваясь высокоуровневой виртуальной машиннай, она имеет незкоуровневый дизайн(Что добовляет скорости). Все же я решил делать компилятор из компилированых Java байткадофф в native кот. Тоесть некаких анализаторов.
Но потом я буду заниматся "своим" компайлером.
Пишу я на C#.
Сначало это был компилятор, но потом, после посешения стешнего IRC, миня уговорили делать виртуальную машину. Причем не Java, а .NET .
После долгого времяни, писания прототипов, чтения документации(О процессорах, о виртуальных машинах, о компиляторов(И CIL и Native)),
я понил - .NET, с его хитро-вы****ым JIT мине не асилить. Да и недумаю что Kolibri поташил бы мою расработку(Веть песать нада на АСМ).
После этого я решил углубится в Java VM. Мне понравилось то что остоваясь высокоуровневой виртуальной машиннай, она имеет незкоуровневый дизайн(Что добовляет скорости). Все же я решил делать компилятор из компилированых Java байткадофф в native кот. Тоесть некаких анализаторов.
Но потом я буду заниматся "своим" компайлером.
Пишу я на C#.
Гм... за Java VM респект.
Только вот я вижу гораздо больше смысла в написании полноценного интерпретатора под KoOS, потому что, написав транслятор "из компилированых Java байткадофф в native кот", мы не сможем полноценно программить без сторонних ОС. А хочецо! )
С другой стороны, написание упомянутого транслятора на ЯВУ гораздо проще и приятнее, чем на АСМ.
Интересна следующая идея:
1) пишем транслятор
2) на Java пишем VM или что-то подобное..
3) транслируем под KoOS
4) правим баги )
5) радуемсо
PS. Приведи ссылки на те материалы, которые ты курил в эту тему.
Только вот я вижу гораздо больше смысла в написании полноценного интерпретатора под KoOS, потому что, написав транслятор "из компилированых Java байткадофф в native кот", мы не сможем полноценно программить без сторонних ОС. А хочецо! )
С другой стороны, написание упомянутого транслятора на ЯВУ гораздо проще и приятнее, чем на АСМ.
Интересна следующая идея:
1) пишем транслятор
2) на Java пишем VM или что-то подобное..
3) транслируем под KoOS
4) правим баги )
5) радуемсо
PS. Приведи ссылки на те материалы, которые ты курил в эту тему.
Я счас набралсо опыта. И в принципе могу писать Яво ВМ пот коос.
Толька мне нужна помосч!.
Толька на чем песать? На Си(Бес ПП) или на Асм?
Есле что, стучитесь в асю 307435176.
Зы. Запыл про сцылке
Первым делом это VM Спек:
http://java.sun.com/docs/books/jvms/sec ... C.doc.html
Потом онлайн опкоде референс:
http://mrl.nyu.edu/~meyer/jvmref/ref-Java.html
Толька мне нужна помосч!.
Толька на чем песать? На Си(Бес ПП) или на Асм?
Есле что, стучитесь в асю 307435176.
Зы. Запыл про сцылке
Первым делом это VM Спек:
http://java.sun.com/docs/books/jvms/sec ... C.doc.html
Потом онлайн опкоде референс:
http://mrl.nyu.edu/~meyer/jvmref/ref-Java.html
Ъняъпз леимпмоме аоекз, з дмюуйъз леимпмоьс оецяйщпчпма.
Ыпм ъйежич ночайельх(Пмблее мпрмокмпуомачлуьх) имд - оецяйщпчп очюмпь кмежм почлъйзпмоч...
Амп уъсмдльх имд, уъ ичпмомжм з имкнуйуй.
А нйчле ъдейчпщ улйчхлулж(Мъмюм чипячйел дйз заь - уюм уънмйщцявпъз имомпиуе кепмдь).
Еъйу ъухбчъ ъдейчпщ улйчхл мнпукуцчфуу(Лч яомале ючхп имдма заь), пм нмйябупъз пчимх имд.
Пчи номуцмхдёп ноу нмйлмк улйчхлулже. Пмеъпщ ъдейма улйчхл, имкнуйзпмо нмхкёп бпм аеъде уънмйцявпъз имлъпчлпь, у оецяйщпчп аьбуъйелуз (b == false) уцаеъпел
ам аоекз имкнуйзфуу. Кепмд hello пмте улйчхлупъз(Ноу яъймауу b == true мл пмте юядеп улйчхлупъз, лм нмъйе мнпукуцчфуу Dead code elimination ядчйупъз =) ).
Дчк леимпмоье мюгзълелуз нм имдя:
Цчбек аеъде ыпу .JL_XX?
Ыпм чдоеъч ючхп имдма заь. Пмеъпщ JL_00 ъммъпаепъаяеп улпъояифуу нмд чдоеъмк 0. Ч JL_22, нмд 22h.
Улмждч юьачеп бпм нмд улъпояифех лепя улъпояифух - ыпм юьачеп йуюм нмпмкя бпм улъпояифуз ле укнйекелпуомачлч,
уйу номъпм лелятлч.
Нмбекя ноу
Ноу аьцмае compareLongs, уцаеъплм бпм b имлъпчлпч, лм а имде
Имлъпчлпч ъмсочлзепъз ичи ймичйщлчз неоекеллчз, лм а ъпеи, неоедчёпъз ълмам ичи имлъпчлпч... Цчбек?
Ыпм юьйм ъдейчлм лч аъзиух ъйябух - еъйу неоекеллчз аьсмдуп цч ноедейь "номъпмжм юймич", пм млч дмйтлч юьпщ а ймичйщлмх неоекеллмх.
Ч ъехбчъ, мнпукуцчфуу пунч "Номъпьс юймима" ле оечйуцмачлч...
Code: Select all
format ELF
; Ыпмп кепмд ле лятел...
; Уънмйщяцепъз пмйщим дйз имлъпояипмоч мюгеипч Entrypoint
; (Импмоьх ле лятел - уюм Entrypoint леимдч ле ъмцдчёпъз).
; Method: knott/Entrypoint#<init>!()V
;public Q25knott10Entrypoint233cinit3e2e2829V
;Q25knott10Entrypoint233cinit3e2e2829V:
; push ebp
; mov ebp,esp
; sub esp,8
; .JL_0:
; .JL_1:
; push dword [ebp+-4]
; call Q34java4lang6Object233cinit3e2e2829V
; .JL_4:
; jmp .footer
; .footer:
; add esp,8
; mov esp,ebp
; pop ebp
; ret
; Method: knott/Entrypoint#main!([Ljava/lang/String;)V
public Q25knott10Entrypoint23main2e285bLjava2flang2fString3b29V
Q25knott10Entrypoint23main2e285bLjava2flang2fString3b29V:
push ebp
mov ebp,esp
sub esp,24
.JL_0:
call Q25knott10Entrypoint23getZeroLong2e2829J
.JL_3:
mov [ebp+-8],eax
mov [ebp+-12],ebx
.JL_4:
.JL_5:
; For compability...
mov [ebp+-16],0
mov [ebp+-20],0
.JL_6:
.JL_7:
.JL_8:
push dword [ebp+-8]
push dword [ebp+-12]
push 0
push 0
call Q25knott10Entrypoint23compareLongs2e28JJ29Z
.JL_11:
mov [ebp+-24],eax
.JL_13:
.JL_15:
mov eax,[ebp+-24]
cmp eax,0
jne .JL_21
.JL_18:
call Q25knott10Entrypoint23hello2e2829V
.JL_21:
jmp .footer
.footer:
add esp,24
mov esp,ebp
pop ebp
ret
; Method: knott/Entrypoint#hello!()V
public Q25knott10Entrypoint23hello2e2829V
Q25knott10Entrypoint23hello2e2829V:
.JL_0:
.JL_2:
push 104
call Q25knott10Entrypoint23outch2e28C29V
.JL_5:
.JL_7:
push 101
call Q25knott10Entrypoint23outch2e28C29V
.JL_10:
.JL_12:
push 108
call Q25knott10Entrypoint23outch2e28C29V
.JL_15:
.JL_17:
push 108
call Q25knott10Entrypoint23outch2e28C29V
.JL_20:
.JL_22:
push 111
call Q25knott10Entrypoint23outch2e28C29V
.JL_25:
jmp .footer
.footer:
ret
; Method: knott/Entrypoint#getZeroLong!()J
public Q25knott10Entrypoint23getZeroLong2e2829J
Q25knott10Entrypoint23getZeroLong2e2829J:
.JL_0:
.JL_1:
xor eax,eax
xor ebx,ebx
jmp .footer
.footer:
ret
; Method: knott/Entrypoint#compareLongs!(JJ)Z
public Q25knott10Entrypoint23compareLongs2e28JJ29Z
Q25knott10Entrypoint23compareLongs2e28JJ29Z:
push ebp
mov ebp,esp
sub esp,12
.JL_0:
.JL_1:
.JL_2:
mov edx,[ebp+-12]
mov ecx,[ebp+-16]
mov ebx,[ebp+16]
mov eax,[ebp+12]
sub edx,ebx
test edx,edx
je .dl1
cmp edx,0
jl .dl2
jmp .dl3
.dl1:
sub ecx,eax
test ecx,ecx
je .dl4
cmp ecx,0
jl .dl2
jmp .dl3
.dl2:
mov eax,-1
jmp .dl5
.dl3:
mov eax,1
jmp .dl5
.dl4:
mov eax,0
.dl5:
.JL_3:
cmp eax,0
jle .JL_8
.JL_6:
.JL_7:
mov eax,1
jmp .footer
.JL_8:
.JL_9:
xor eax,eax
jmp .footer
.footer:
add esp,12
mov esp,ebp
pop ebp
ret
extrn Q34java4lang6Object233cinit3e2e2829V
extrn Q25knott10Entrypoint23outch2e28C29V
Амп уъсмдльх имд, уъ ичпмомжм з имкнуйуй.
Code: Select all
package knott;
public class Entrypoint {
// Main entrypoint method.
public static void main(String[] args) {
long a = getZeroLong();
long b = 0;
boolean b = compareLongs(a, b);
if (b == false) {
hello();
}
}
// native - оечйуцчфуз кепмдч, лч мпйублмк мп заь
// омдлмк зцьие.
private static native void outch(char arg0);
private static void hello() {
outch('H'); outch('e'); outch('l');
outch('l'); outch('o');
}
private static long getZeroLong() {
return 0;
}
private static boolean compareLongs(long a, long b) {
return (a > b);
}
}
А нйчле ъдейчпщ улйчхлулж(Мъмюм чипячйел дйз заь - уюм уънмйщцявпъз имомпиуе кепмдь).
Еъйу ъухбчъ ъдейчпщ улйчхл мнпукуцчфуу(Лч яомале ючхп имдма заь), пм нмйябупъз пчимх имд.
Code: Select all
main:
.JL_0:
.JL_2:
push 104
call Q25knott10Entrypoint23outch2e28C29V
.JL_5:
.JL_7:
push 101
call Q25knott10Entrypoint23outch2e28C29V
.JL_10:
.JL_12:
push 108
call Q25knott10Entrypoint23outch2e28C29V
.JL_15:
.JL_17:
push 108
call Q25knott10Entrypoint23outch2e28C29V
.JL_20:
.JL_22:
push 111
call Q25knott10Entrypoint23outch2e28C29V
ret
ам аоекз имкнуйзфуу. Кепмд hello пмте улйчхлупъз(Ноу яъймауу b == true мл пмте юядеп улйчхлупъз, лм нмъйе мнпукуцчфуу Dead code elimination ядчйупъз =) ).
Дчк леимпмоье мюгзълелуз нм имдя:
Цчбек аеъде ыпу .JL_XX?
Ыпм чдоеъч ючхп имдма заь. Пмеъпщ JL_00 ъммъпаепъаяеп улпъояифуу нмд чдоеъмк 0. Ч JL_22, нмд 22h.
Улмждч юьачеп бпм нмд улъпояифех лепя улъпояифух - ыпм юьачеп йуюм нмпмкя бпм улъпояифуз ле укнйекелпуомачлч,
уйу номъпм лелятлч.
Нмбекя ноу
Code: Select all
// Main entrypoint method.
public static void main(String[] args) {
long a = getZeroLong();
long b = 0;
boolean b = compareLongs(a, b);
if (b == false) {
hello();
}
}
Code: Select all
; Дояжмх имд
.JL_4:
.JL_5:
; For compability...
mov [ebp+-16],0
mov [ebp+-20],0
.JL_6:
.JL_7:
.JL_8:
push dword [ebp+-8]
push dword [ebp+-12]
push 0
push 0
call Q25knott10Entrypoint23compareLongs2e28JJ29Z
Ыпм юьйм ъдейчлм лч аъзиух ъйябух - еъйу неоекеллчз аьсмдуп цч ноедейь "номъпмжм юймич", пм млч дмйтлч юьпщ а ймичйщлмх неоекеллмх.
Ч ъехбчъ, мнпукуцчфуу пунч "Номъпьс юймима" ле оечйуцмачлч...
Vot blin...
Whata fuck?
Whata fuck?
Да не переживай, с кем не бывает!
Глянь суда. ИМХО но ява для десктопных приложений нафиг никому не нужна.
http://download.java.net/jdk6/
http://java.sun.com/javase/downloads/index.jsp
Вроде как сорцы виртуальной машины Java 2SE стали доступны.
http://download.java.net/jdk6/
http://java.sun.com/javase/downloads/index.jsp
Вроде как сорцы виртуальной машины Java 2SE стали доступны.
Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
Интерпретатор JAVA-подобного языка https://github.com/edynox/IFJ.
Собрать под KolibriOS просто, но нужно ли. Просто информация.
Собрать под KolibriOS просто, но нужно ли. Просто информация.
Who is online
Users browsing this forum: No registered users and 2 guests