forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Разработка MIDlet Pascal (http://forum.boolean.name/forumdisplay.php?f=127)
-   -   Исходники MP получены! (http://forum.boolean.name/showthread.php?t=9079)

Tronix 14.10.2009 16:45

Ответ: Исходники MP получены!
 
Вложений: 1
Пояснения:
сборка описана в readmerus.txt
----
поправил индексацию массивов, т.е. в паскале стартовый индекс массива может быть любым, за счет того что после вычисления индекса элемента из него вычитается стартовый индекс.
Если начальный индекс = 0, то его можно исключить, что я и сделал, тем более что всегда стараюсь чтоб массив начинался с нуля
-------
синтаксис inline:
__
1-я модификация: inline(b : byte); - прямая запись байта в конструируемый код.
__
2-я модификация: inline(type_str, param1_str, param2_str, param3_str : string); - конструктор указателя на метод или поле в константном пуле, все параметры должны быть строками текста, (строковые переменные не допускаются).
где type_str:
"getstatic" получение статического поля класса
"putstatic" установка статического поля в классе
"getfield" перенос поля из объекта
"putfield" установка поля в объекте
"invokevirtual" вызывает метод экземпляра, основываясь на типе времени выполнения
"invokenonvirtual" вызывает метод экземпляра, основываясь на не виртуальном типе
"invokestatic" вызов метода класса (статического метода)
____
PHP код:

var
  
myint integer;
begin

  
//myint:=10;
  
inline(16); //  bipush;
  
inline(10);  // byte
  
inline('putstatic','M','myint','I') ;

  
//myint:=getWidth;
  
inline('getstatic''M''I''Ljavax/microedition/lcdui/Image;');
  
inline('invokevirtual''javax/microedition/lcdui/Image''getWidth''()I');
  
inline('putstatic','M','myint','I') ; 

__
можно писать любой java-байт-код, оперируя параметрами стека, только если его получать в MidletPascal'е, то стек нужно приводить под известные в MP типы.
__
если указывать произвольные методы, то скорее всего верификатор MP будет, выдавать ошибки, но файл "M.class" будет создан.
---
для анализа программ удобно использовать java-декомпилер "forum.boolean.name\MidletPascal\Основной Форум\Создание MidletPascal compiler'а\JD.exe", просматривая как собраны команды, и какие у них ,байт-коды

Piligrim 15.10.2009 10:03

Ответ: Исходники MP получены!
 
Цитата:

1-я модификация: inline(b : byte); - прямая запись байта в конструируемый код.
__
2-я модификация: inline(type_str, param1_str, param2_str, param3_str : string); - конструктор указателя на метод или поле в константном пуле, все параметры должны быть строками текста, (строковые переменные не допускаются).
где type_str:
"getstatic" получение статического поля класса
"putstatic" установка статического поля в классе
"getfield" перенос поля из объекта
"putfield" установка поля в объекте
"invokevirtual" вызывает метод экземпляра, основываясь на типе времени выполнения
"invokenonvirtual" вызывает метод экземпляра, основываясь на не виртуальном типе
"invokestatic" вызов метода класса (статического метода)
Ну что ж. Одного Сатурна уже понесло. Жаль, хороший был язык.

abcdef 15.10.2009 11:19

Ответ: Исходники MP получены!
 
Piligrim, прямую записью байт-кода будут писать редко, и только при необходимости, тем более это поможет лучше разбираться в основах java.
__

а тот вариант вы что предлагали: подключать класс-файлы как интерфейсные модули, и чтобы это работало с любыми классами, в ближайшем будущем не получится т.к.:

1. Нужно добавить все типы java (в итоге получится нечто похожее на " Canterbury Pascal for J2ME").
2. Делать нашлепки кода к каждой операции, для преобразования типов.
3. Добавлять конструкции которые не предусмотрены кодогенератором MidletPascal'я

Piligrim 15.10.2009 18:01

Ответ: Исходники MP получены!
 
Скажите чем лучше эти строки? Из них можно вернуть любые данные? Им можно передать любые данные?
Насколько выше вероятность допустить ошибку? На мой взгляд в разы.
Если все это только для того чтобы не ставить Java SDK, то эти несчастные 200Mb того не стоят.
Цитата:

'javax/microedition/lcdui/Image'
вот эта строка сработает
а что-то вроде
Цитата:

'javax/microedition/media/Player'
даст вам ошибку исполнения из-за отсутствия импорта класса.

_Nox_ 15.10.2009 23:11

Ответ: Исходники MP получены!
 
Народ, предлогаю сделать нестандартные расширения синтакстса языка отдельным дополнением к программе, а не добавлять в изначальный билд. И чтобы сейчас занимались не добавлением не сильно затребованных функций, а исправлением глюков, доработкой уже имеющихся возможностей и оптимизацией. Зачем так настойчиво делать то, что будут использовать считанные люди, а то, с чем работают многие оставлять на потом

Serg153 15.10.2009 23:41

Ответ: Исходники MP получены!
 
Байт код пускай будет...
ведь потом появится (наверное) декомпилятор jar в МПаскаль...
и для кода, который декомпиль несможет простроить паскалевские конструкции - пригодится байтКод...

NitE 15.10.2009 23:46

Ответ: Исходники MP получены!
 
Цитата:

ведь потом появится (наверное) декомпилятор jar в МПаскаль...
эхх, далёкое светлое будущее...

abcdef 16.10.2009 13:10

Ответ: Исходники MP получены!
 
вот как сделано в версиях TurboPascal:
есть стандартный модуль "system.pas", в нем процедуры и функции использующие inline для расширенных возможностей.

Т.о. можно все компилить в MP, вести отладку, смотреть как это организовано и т.д., не зависеть от большинства java-методов.

Т.к. константный пул MP не поддерживает 64-битные записи, можно временно сделать отдельный класс с этими элементами, и обращатся к нему для сохранения результатов, иначе если сохранять данные в классе system.pas необходимо стек приводить под int-переменную.

текущими возможностями байт-кода пока нельзя записать некоторые конструкции, поэтому вот расширение:
type_str:
"utf8" - ссылка в конст.пуле на utf-строку
"string" - ссылка на string-переменную
"class" - ссылка на класс
"nameandtype" - ссылка на имя и тип
____
вот простейший пример, библиотека "Lib_memclean.java" 365 bytes.
а вот код на MidletPascal:

Код:

procedure memclean;
begin
  inline('invokestatic', 'java/lang/System', 'gc', '()V');
end;

т.е. практически аналогично java-ассемблеру "jasmin" или моей разработке "JCC"
___
прямая работа со стеком, позволить создавать программы, быстрее аналогичных стандартных java-компиляторов, например счетчик циклов можно хранить постоянно в стеке, а не загружать и сохранять в переменную и .т.д...

satan 16.10.2009 17:10

Re: Исходники MP получены!
 
Не пойму я вас ребят! У вас 2 исходника на 2 языках программирования и вы до сих пор не поймете, что аналогичный результат был бы и в том случае, если бы их не было!!!

Объясняю почему.

Во первых, на вскидку я исправил работу с константами, переменными и типами, но это только начало... Компилятор (вернее транслятор) не позволяет сделать даже простых паскалевских стандартизированый действий...

CONST
a = 10000;
b = a + 2000;

Вот один из примеров.
То есть такие приятности и малости как CASE, WITH и ещё море возможностей просто отключены и не прописаны...
Главное что в нем есть, это обработка выражений и загрузка библиотек...
То есть по сути компилер уже дает нам доступ к JAVA в полной мере...

Единственный файл который надо дорабатывать или к чему я склоняюсь полностью переробатывать - PARSER.C или PASPARSER.PAS...

Теперь посмотрите на вот такой замахон
Код:

bytecode_append(current_block^.code, new_);
                bytecode_append_short_int(current_block^.code, cp_add_class('Real'));
                bytecode_append(current_block^.code, dup_x1_);
                bytecode_append(current_block^.code, swap_);
                bytecode_append(current_block^.code, invokespecial_);
                bytecode_append_short_int(current_block^.code, cp_add_methodref('Real', '<init>', '(I)V'));

Я насчитал как минимум 10 повторов...

О какой доработке может идти речь? Его полностью переписывать надо...
Вы уже начали прикручивать что то дополнительное, хотя основное не работает...

Мля я с дуру стер исправленую версию (сам правил) на Си, которая являлась консольным компилятором... В итоге получил не работающую версию...

Даю на вход ему ProjectMobilePascal.exe list.txt
Где list.txt список компилируемых модулей, на выходе строчка типа компилирую "PL/2" и вываливается компилятор???

abcdef Дружище, ну ты то прекрасно понимаешь, что inline функция - это по сути выдирание из lib файла данных, так зачем городить огород если всю яву можно выдернуть из архивов???

Так не проще занятся доработкой или разработкой Парсера Паскаля для начала, что бы иметь хотя бы отдалённое напоминание Турбо паса (про FPC и Delphi уже молчу)!!!

abcdef 16.10.2009 17:33

Ответ: Исходники MP получены!
 
satan, давай свою работающую версию!
ни один пример не компилиться в твоей..

satan 17.10.2009 01:19

Re: Исходники MP получены!
 
Ы....

Так оно и не будет компилица...
Надо перевести RD_assignment_or_procedure_call функцию и ещё пару - тройку закоментированых в коде...

Я просто выкинул версию для ознакомления Паскаль программистам, которые в Си ни бум-бум.

Так вот, посмотри на работу компилятора в Delphi дебаггере... И сразу станет ясно как работает компилятор... Да в принципе так же как и все компиляторы, за исключением того, что кодогенератор на половину вынесен в отдельный блок, а наполовину внедрён в парсер...

А пример я же уже сказал, объявления типов, переменных и констант я по возможности исправил... Теперь надо идти дальше, дописывать вышеуказанную функцию и вперёд на отладку... У меня к сожалению пока времени нет, было, я сделал все возможное, перевел львиную долю всех функций!!!

Будет время, так же исправлю и на Си компилятор, что бы сравнивать полученый файлы готовые... А когда комипляторы заработают одинаково, то уже буду думать о расширении и добавлении...

Но скорее всего придется заново переписать компилер и отделить мух от мяса.

javier 18.10.2009 04:17

Ответ: Исходники MP получены!
 
hey guys,

i think the MP project exceeds the russian/ukranian community, any chance to have an english forum? or an IRC channel at least? i do not understand a word of russian -i speak spanish natively- but at least i can read/write english.

btw, what about publishing the source code to sourceforge or googlecode (i saw empty projects in both)? just uploading the source as Niksa sent it to you will help to open the project to the world.
im asking you for it since you are in charge, i have the source code already but know of people that doesnt.

thanks

Tronix 18.10.2009 10:52

Ответ: Исходники MP получены!
 
Hi Javier,
No English forum or IRC channel there, but you can start new topic with name "English discussion thread" or something like that.
I am creater sourceforge project. But I never worked with SVN. If you can start SVN project, please tell me about it in private message. I add you in sourceforge project administrators.

Bruteo 18.10.2009 13:45

Ответ: Исходники MP получены!
 
Цитата:

Сообщение от Tronix (Сообщение 121858)
I am creater sourceforge project. But I never worked with SVN.

Sourceforge?
Насколько я помню, было решено вести проект на гугле, и Piligrim занялся этим: http://code.google.com/p/midletpascal/
Надо как-то согласовывать действия, а то, глядя на эту ветку форума, создаётся впечатление лёгкого хаоса.

Tronix 18.10.2009 15:05

Ответ: Исходники MP получены!
 
Цитата:

Сообщение от Bruteo (Сообщение 121865)
Sourceforge?
Насколько я помню, было решено вести проект на гугле, и Piligrim занялся этим: http://code.google.com/p/midletpascal/
Надо как-то согласовывать действия, а то, глядя на эту ветку форума, создаётся впечатление лёгкого хаоса.

Да хоть гугл код, хоть sourceforge, все равно. Piligrim занялся то занялся, но что-то пока не видно сдвигов дальше создания раздела. Или я не прав?


Часовой пояс GMT +4, время: 16:19.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot