Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Jul 22, 2019 11:01 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 25 posts ]  Go to page 1 2 Next
Author Message
PostPosted: Tue Feb 27, 2007 2:21 pm 
Тут я решил позаниматся компиляторами и намотал компайлер языка похожего на ЯВУ(ну или на C#). Как вы думаете, возникли некоторые проблемы. Но если вам понравится идея я могу продолжить.

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

Code:
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
}


Top
   
 Post subject:
PostPosted: Tue Feb 27, 2007 2:47 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
http://www.ecma-international.org/publications/standards/Ecma-335.htm - спецификация .NET Framework
http://www.ecma-international.org/publications/standards/Ecma-334.htm - C# Language Specification
Если возьмёшся за реализацию будет отлично! Сразу скажу что эти стандарты халявные и не о каких лицензиях/выплатах речи быть не может.

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


Last edited by Ghost on Tue Feb 27, 2007 2:56 pm, edited 1 time in total.

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

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

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


Top
   
 Post subject:
PostPosted: Tue Feb 27, 2007 3:09 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
С# можно и в машинный код компилять, нет проблем. Просто реализовывать готовый язык, сейчас для проекта полезнее чем придумывать что-то самому, подумай : люди увидят в описании C# - подумают почему бы и не попробывать, а увидят Green - подумают "опять какой то самопал" и 90% даже вникать не станит что там. Кроме того если готового кода пока нет (или он находится на этапе разработок), а твой Green как ты сам говориш похож на Java/C# от чего сразу не смотреть в сторону C#. Сам я не сторонник объектно-ориентирыванных языков, но C# как-никак отраслевой стандарт и привлечь людёй к нему проще.


Last edited by Ghost on Tue Feb 27, 2007 7:17 pm, edited 1 time in total.

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


Top
   
 Post subject:
PostPosted: Wed Feb 28, 2007 7:07 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
А почему консоль нельзя использовать? Она же есть...


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


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

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

Code:
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:
; 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:
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


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


Top
   
 Post subject:
PostPosted: Mon Jun 11, 2007 10:53 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
Нет, не лучше. Лучше чем ничего, но не лучше отдельных VM. Виртуальные машины вполне даже оптимизируют код.
Вообще полезная работа, желаю удачи.

..bw


Top
   
 Post subject:
PostPosted: Mon Jun 11, 2007 11:55 am 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Что-то не сильно улавливаю практическую ценность...
Вот если бы потом на этом языке написать компилятор этого же языка для Колибри, то было действительно круто!


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

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

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

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


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


Top
   
 Post subject:
PostPosted: Mon Jun 11, 2007 8:26 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Knott wrote:
bw
Пачему я не пишу компайлер сразу на яве? Дело втом что мой компайлер имеет очень большие ограничения.
Но это пока, потом я буду писать виртуальную машину.


Хм.. А виртуальная машина зачем нужна (и для какой ОС)?


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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 25 posts ]  Go to page 1 2 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited