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.