Page 1 of 2

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

Posted: Tue Feb 27, 2007 2:21 pm
by Knott
Тут я решил позаниматся компиляторами и намотал компайлер языка похожего на ЯВУ(ну или на C#). Как вы думаете, возникли некоторые проблемы. Но если вам понравится идея я могу продолжить.

Вот синтаксис.

Code: Select all

import meos.console;

public class Program {
	private int i, a;
	
	private void main(string[] args) {
		for (int i = 0; i < argCount(args); i++) {
			Console.println(i.toString() + ": " + args[i]);
		}
	}

	private int argCount(string[] args) {
		return args.lenght;
	}
}

public enum Bool {
	True = 1,
	False = 0
}

Posted: Tue Feb 27, 2007 2:47 pm
by Ghost
http://www.ecma-international.org/publi ... ma-335.htm - спецификация .NET Framework
http://www.ecma-international.org/publi ... ma-334.htm - C# Language Specification
Если возьмёшся за реализацию будет отлично! Сразу скажу что эти стандарты халявные и не о каких лицензиях/выплатах речи быть не может.

P.S. На последок совет : занимайся тем что тебе нравится, и не вздумай как некоторые делать вид что они делают одолжение для проекта, мол никто не отвечает - значит никому не надо, и бросать работу. Будут вопросы - чем сможим поможим.

Posted: Tue Feb 27, 2007 2:50 pm
by Knott
Ты коечего непонял. Дело в том что это не виртулальная машина.(Хотя следуюшия разработка это виртуальная машина).
Это полностью компилируемый язык. Компилится он в FASM. Сделано специально для Kolibri.

В этом языке, (Рабочее название Green) ручное управление памятью.

ЗЫ. Спасиба за ссылки, но с этими стандартами я знаком.

Posted: Tue Feb 27, 2007 3:09 pm
by Ghost
С# можно и в машинный код компилять, нет проблем. Просто реализовывать готовый язык, сейчас для проекта полезнее чем придумывать что-то самому, подумай : люди увидят в описании C# - подумают почему бы и не попробывать, а увидят Green - подумают "опять какой то самопал" и 90% даже вникать не станит что там. Кроме того если готового кода пока нет (или он находится на этапе разработок), а твой Green как ты сам говориш похож на Java/C# от чего сразу не смотреть в сторону C#. Сам я не сторонник объектно-ориентирыванных языков, но C# как-никак отраслевой стандарт и привлечь людёй к нему проще.

Posted: Tue Feb 27, 2007 6:59 pm
by Knott
Лутше тогда реализовывать Java, ибо коммунити, я думаю больше. Ктомуже, не получится полноценная Java. Ну вот допустим консоль юзать нельзя.
Также я не очень знаком с опкодами X86(Вот для ARM пожалуйста :) ) для генерации кода под JIT. Да и ктомуже пока серьёзно Kolibri не юзал. Я ведь как планировал сделать. Я хотел сначала написать на C# Green, а потом догфудом его под колибри скомпилить.

Posted: Wed Feb 28, 2007 7:07 pm
by diamond
А почему консоль нельзя использовать? Она же есть...

Posted: Thu Mar 01, 2007 9:13 am
by Knott
Она есть, но как я понял она может убратся\переписатся. Если делать консоль, то специальную для этой VM.

Posted: Sun Jun 10, 2007 10:33 pm
by Knott
После долгих раздумий, и мучений по созданию прототипа виртуальной машины, я решил:
Делать транслятор(конвертор) из Java .class файлов(или целых .jar) в .asm .

Компиляция будет проходить под мастдаем, и то под платформой .NET(Ибо RAD, другое баюсь не асилю).
Вот результаты роботы моего компилятора:

Code: Select all

package japp;

public class Main {
    
    private int i;
    
    public Main() {
        
    }

    public static void main(String[] args) {
        int a = 0;
        int b = 1;
        
        int c = a / b;
    }
}
Вот ява (Jasmin) асм сурц:

Code: Select all

; Segment type: Pure code
  .method public static main([Ljava/lang/String;)V
  .limit stack 2
  .limit locals 4
met002_begin:
  .line 29
    iconst_0
    istore_1 ; met002_slot001
  .line 30

met002_2:                                      
    iconst_1
    istore_2 ; met002_slot002
  .line 32

met002_4:                                      
    iload_1 ; met002_slot001
    iload_2 ; met002_slot002
    idiv
    istore_3 ; met002_slot003
  .line 33

met002_8:                                     
    return
met002_end:                                    

;met002_slot001                                
    .var 1 is a I from met002_2 to met002_end
;met002_slot002                                
    .var 2 is b I from met002_4 to met002_end
;met002_slot003                                
    .var 3 is c I from met002_8 to met002_end
  .end method
Вот конечный вариант:

Code: Select all

enter    16,0
; iconst 0
push     dword 0
; iconst 1
push     dword 1
; iload 1
mov      eax, 1
add      eax, ebp
push     [eax]
; iload 2
mov      eax, 2
add      eax, ebp
push     [eax]
; idiv
pop      eax
pop      ebx
div      ebx
leave

Posted: Sun Jun 10, 2007 10:34 pm
by Knott
Понимаю, код не оптимизирован, но это лутше чем виртуальная машина :)

Posted: Mon Jun 11, 2007 10:53 am
by bw
Нет, не лучше. Лучше чем ничего, но не лучше отдельных VM. Виртуальные машины вполне даже оптимизируют код.
Вообще полезная работа, желаю удачи.

..bw

Posted: Mon Jun 11, 2007 11:55 am
by Serial
Что-то не сильно улавливаю практическую ценность...
Вот если бы потом на этом языке написать компилятор этого же языка для Колибри, то было действительно круто!

Posted: Mon Jun 11, 2007 12:41 pm
by Knott
bw
VM не оптимизирует код(В отличии от JIT компиляторов, которые просто ис кода делают канфетку :) (ЗЫ. Jit это например .NET, или Java HotSpot) ).

Serial
Ну смотри:
Дело в том что я немогу писать на С++ или C дажа под Win(Негаваря уже о Колибри), ну не признаю я этот язык. В нём обсолютно нет логики. Мне просто с ним не приятно работать. А вот на обсолютно вылизанных Java и C# самое то. Но вот в чем проблема - их коды(IL и Java Byte-Code) не могут быть исполнены под KolibriOS.
Чтобо можно было исполнять на колибри их код, нада написать рантайм на С или С++(Причем такой салидный рантайм, ассобина для IL).
Так что я выбрал писать компилятор на C# под мастдай. Патом я напишу на яве этот компилятор и переведу его на KolibriOS.

Пачему я не пишу компайлер сразу на яве? Дело втом что мой компайлер имеет очень большие ограничения.
Но это пока, потом я буду писать виртуальную машину.

ЗЫ. Скоро уеду на неделю.

Posted: Mon Jun 11, 2007 12:47 pm
by Knott
Забыл сказать:
Мой компилятор пропускает процесс верификации кода.

Posted: Mon Jun 11, 2007 8:26 pm
by Serial
Knott wrote:bw
Пачему я не пишу компайлер сразу на яве? Дело втом что мой компайлер имеет очень большие ограничения.
Но это пока, потом я буду писать виртуальную машину.
Хм.. А виртуальная машина зачем нужна (и для какой ОС)?

Posted: Wed Jun 13, 2007 12:33 pm
by Knott
Виртуальная машина языка явы для Колибри. Ессе палучится то с JIT.