Page 2 of 2

Posted: Wed Jun 13, 2007 1:26 pm
by Serial
Knott

А зачем ВМ, если твой компилер переводит яву в фасм?

Posted: Wed Jun 13, 2007 5:15 pm
by Knott
Я же писал. Мой компилятор имеет много ограничений.

Posted: Tue Jun 19, 2007 7:21 am
by [J0k3r]
Knott, с удовольствием помогу тебе в написании проекта. Сам собирался этим заняться.
В частности могу сделать лексический, синтаксический и семантический анализаторы.

Не смог понять из постов (может невнимательно прочел), на чем написан твой нынешний компилятор?

Posted: Tue Jun 19, 2007 8:56 pm
by Knott
Так, давай раставем фсе точки над i.

Сначало это был компилятор, но потом, после посешения стешнего IRC, миня уговорили делать виртуальную машину. Причем не Java, а .NET .
После долгого времяни, писания прототипов, чтения документации(О процессорах, о виртуальных машинах, о компиляторов(И CIL и Native)),
я понил - .NET, с его хитро-вы****ым JIT мине не асилить. Да и недумаю что Kolibri поташил бы мою расработку(Веть песать нада на АСМ).
После этого я решил углубится в Java VM. Мне понравилось то что остоваясь высокоуровневой виртуальной машиннай, она имеет незкоуровневый дизайн(Что добовляет скорости). Все же я решил делать компилятор из компилированых Java байткадофф в native кот. Тоесть некаких анализаторов.

Но потом я буду заниматся "своим" компайлером.

Пишу я на C#.

Posted: Wed Jun 20, 2007 12:32 pm
by [J0k3r]
Гм... за Java VM респект.
Только вот я вижу гораздо больше смысла в написании полноценного интерпретатора под KoOS, потому что, написав транслятор "из компилированых Java байткадофф в native кот", мы не сможем полноценно программить без сторонних ОС. А хочецо! )
С другой стороны, написание упомянутого транслятора на ЯВУ гораздо проще и приятнее, чем на АСМ.

Интересна следующая идея:
1) пишем транслятор
2) на Java пишем VM или что-то подобное..
3) транслируем под KoOS
4) правим баги )
5) радуемсо :-D

PS. Приведи ссылки на те материалы, которые ты курил в эту тему.

Posted: Wed Jun 20, 2007 1:49 pm
by Knott
Я счас набралсо опыта. И в принципе могу писать Яво ВМ пот коос.
Толька мне нужна помосч!.

Толька на чем песать? На Си(Бес ПП) или на Асм?

Есле что, стучитесь в асю 307435176.

Зы. Запыл про сцылке :)

Первым делом это VM Спек:
http://java.sun.com/docs/books/jvms/sec ... C.doc.html

Потом онлайн опкоде референс:
http://mrl.nyu.edu/~meyer/jvmref/ref-Java.html

Posted: Wed Aug 08, 2007 12:32 pm
by Knott
Ъняъпз леимпмоме аоекз, з дмюуйъз леимпмоьс оецяйщпчпма.

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
Пчи номуцмхдёп ноу нмйлмк улйчхлулже. Пмеъпщ ъдейма улйчхл, имкнуйзпмо нмхкёп бпм аеъде уънмйцявпъз имлъпчлпь, у оецяйщпчп аьбуъйелуз (b == false) уцаеъпел
ам аоекз имкнуйзфуу. Кепмд 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();
         }
    }
Ноу аьцмае compareLongs, уцаеъплм бпм b имлъпчлпч, лм а имде

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
Имлъпчлпч ъмсочлзепъз ичи ймичйщлчз неоекеллчз, лм а ъпеи, неоедчёпъз ълмам ичи имлъпчлпч... Цчбек?
Ыпм юьйм ъдейчлм лч аъзиух ъйябух - еъйу неоекеллчз аьсмдуп цч ноедейь "номъпмжм юймич", пм млч дмйтлч юьпщ а ймичйщлмх неоекеллмх.
Ч ъехбчъ, мнпукуцчфуу пунч "Номъпьс юймима" ле оечйуцмачлч...

Posted: Wed Aug 08, 2007 12:35 pm
by Knott
Vot blin...
Whata fuck?

Posted: Wed Aug 08, 2007 1:50 pm
by DmitrySokolowsky
Да не переживай, с кем не бывает! :D

Re: Компилятор ЯВЫ

Posted: Mon Dec 24, 2007 7:55 pm
by SHREDER
Глянь суда. ИМХО но ява для десктопных приложений нафиг никому не нужна.

http://download.java.net/jdk6/
http://java.sun.com/javase/downloads/index.jsp

Вроде как сорцы виртуальной машины Java 2SE стали доступны.

Re: Компилятор ЯВЫ

Posted: Sat Jan 02, 2021 2:12 pm
by maxcodehack
Интерпретатор JAVA-подобного языка https://github.com/edynox/IFJ.
Собрать под KolibriOS просто, но нужно ли. Просто информация.