![](images/chestnut/misc/left.gif) |
14.10.2009, 16:45
|
#61
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Исходники MP получены!
Пояснения:
сборка описана в 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" вызов метода класса (статического метода)
____
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", просматривая как собраны команды, и какие у них ,байт-коды
|
(Offline)
|
|
15.10.2009, 10:03
|
#62
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: Исходники 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" вызов метода класса (статического метода)
|
Ну что ж. Одного Сатурна уже понесло. Жаль, хороший был язык.
|
(Offline)
|
|
15.10.2009, 11:19
|
#63
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: Исходники MP получены!
Piligrim, прямую записью байт-кода будут писать редко, и только при необходимости, тем более это поможет лучше разбираться в основах java.
__
а тот вариант вы что предлагали: подключать класс-файлы как интерфейсные модули, и чтобы это работало с любыми классами, в ближайшем будущем не получится т.к.:
1. Нужно добавить все типы java (в итоге получится нечто похожее на " Canterbury Pascal for J2ME").
2. Делать нашлепки кода к каждой операции, для преобразования типов.
3. Добавлять конструкции которые не предусмотрены кодогенератором MidletPascal'я
|
(Offline)
|
|
15.10.2009, 18:01
|
#64
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: Исходники MP получены!
Скажите чем лучше эти строки? Из них можно вернуть любые данные? Им можно передать любые данные?
Насколько выше вероятность допустить ошибку? На мой взгляд в разы.
Если все это только для того чтобы не ставить Java SDK, то эти несчастные 200Mb того не стоят.
'javax/microedition/lcdui/Image'
|
вот эта строка сработает
а что-то вроде
'javax/microedition/media/Player'
|
даст вам ошибку исполнения из-за отсутствия импорта класса.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.10.2009, 23:11
|
#65
|
ПроЭктировщик
Регистрация: 21.06.2009
Адрес: Беларусь, Столбцы
Сообщений: 148
Написано 32 полезных сообщений (для 57 пользователей)
|
Ответ: Исходники MP получены!
Народ, предлогаю сделать нестандартные расширения синтакстса языка отдельным дополнением к программе, а не добавлять в изначальный билд. И чтобы сейчас занимались не добавлением не сильно затребованных функций, а исправлением глюков, доработкой уже имеющихся возможностей и оптимизацией. Зачем так настойчиво делать то, что будут использовать считанные люди, а то, с чем работают многие оставлять на потом
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо _Nox_ за это полезное сообщение:
|
|
15.10.2009, 23:41
|
#66
|
Нуждающийся
Регистрация: 03.01.2009
Сообщений: 93
Написано 8 полезных сообщений (для 15 пользователей)
|
Ответ: Исходники MP получены!
Байт код пускай будет...
ведь потом появится (наверное) декомпилятор jar в МПаскаль...
и для кода, который декомпиль несможет простроить паскалевские конструкции - пригодится байтКод...
|
(Offline)
|
|
15.10.2009, 23:46
|
#67
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Исходники MP получены!
ведь потом появится (наверное) декомпилятор jar в МПаскаль...
|
эхх, далёкое светлое будущее...
|
(Offline)
|
|
16.10.2009, 13:10
|
#68
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: Исходники 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-компиляторов, например счетчик циклов можно хранить постоянно в стеке, а не загружать и сохранять в переменную и .т.д...
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо abcdef за это полезное сообщение:
|
|
16.10.2009, 17:10
|
#69
|
Нуждающийся
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений (для 28 пользователей)
|
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 уже молчу)!!!
|
(Offline)
|
|
16.10.2009, 17:33
|
#70
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: Исходники MP получены!
satan, давай свою работающую версию!
ни один пример не компилиться в твоей..
|
(Offline)
|
|
17.10.2009, 01:19
|
#71
|
Нуждающийся
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений (для 28 пользователей)
|
Re: Исходники MP получены!
Ы....
Так оно и не будет компилица...
Надо перевести RD_assignment_or_procedure_call функцию и ещё пару - тройку закоментированых в коде...
Я просто выкинул версию для ознакомления Паскаль программистам, которые в Си ни бум-бум.
Так вот, посмотри на работу компилятора в Delphi дебаггере... И сразу станет ясно как работает компилятор... Да в принципе так же как и все компиляторы, за исключением того, что кодогенератор на половину вынесен в отдельный блок, а наполовину внедрён в парсер...
А пример я же уже сказал, объявления типов, переменных и констант я по возможности исправил... Теперь надо идти дальше, дописывать вышеуказанную функцию и вперёд на отладку... У меня к сожалению пока времени нет, было, я сделал все возможное, перевел львиную долю всех функций!!!
Будет время, так же исправлю и на Си компилятор, что бы сравнивать полученый файлы готовые... А когда комипляторы заработают одинаково, то уже буду думать о расширении и добавлении...
Но скорее всего придется заново переписать компилер и отделить мух от мяса.
|
(Offline)
|
|
18.10.2009, 04:17
|
#72
|
AnyKey`щик
Регистрация: 17.10.2009
Сообщений: 3
Написано одно полезное сообщение
|
Ответ: Исходники 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
|
(Offline)
|
|
18.10.2009, 10:52
|
#73
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Исходники 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.
|
(Offline)
|
|
18.10.2009, 13:45
|
#74
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: Исходники MP получены!
Сообщение от Tronix
I am creater sourceforge project. But I never worked with SVN.
|
Sourceforge?
Насколько я помню, было решено вести проект на гугле, и Piligrim занялся этим: http://code.google.com/p/midletpascal/
Надо как-то согласовывать действия, а то, глядя на эту ветку форума, создаётся впечатление лёгкого хаоса.
|
(Offline)
|
|
18.10.2009, 15:05
|
#75
|
Знающий
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений (для 331 пользователей)
|
Ответ: Исходники MP получены!
Сообщение от Bruteo
Sourceforge?
Насколько я помню, было решено вести проект на гугле, и Piligrim занялся этим: http://code.google.com/p/midletpascal/
Надо как-то согласовывать действия, а то, глядя на эту ветку форума, создаётся впечатление лёгкого хаоса.
|
Да хоть гугл код, хоть sourceforge, все равно. Piligrim занялся то занялся, но что-то пока не видно сдвигов дальше создания раздела. Или я не прав?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:16.
|