Вверх ↑
Этот топик читают: Гость
Главный модератор
Ответов: 2997
Рейтинг: 395
#496: 2013-04-14 21:40:08 ЛС | профиль | цитата
Следующий пост был опубликован 13 января 2012 года:
Nic писал(а):

« Класс ориентированная разработка (COD).
COD - это очевидная структура разрабатываемых компонентов при помощи кодогенераторов FTCG и RTCG.
За основу будущего компонента выбирается какой-либо класс фреймворка .NET, затем,
по описанию членов класса создается ini-файл компонента (можно написать утилиту для "выкусывания" данных из документации).
Далее, наполнение hws-файла методами (опять же, возможно брать эту информацию из документации). И последний этап отладка и корректировка.
Создание такого подхода к разработке компонент не только поможет увеличить скорость процесса,
но и защитит новый пакет от повторения "старых" ошибок и отвлечёт от желания тащить в него "пережитки" прошлого наследия.
Предлагаю в первую очередь сделать graber-convertor информации из документации в макеты файлов ini и hws. »

Какова ситуация сегодня? Идея создания программы, которая бы сама строила компоненты, реализована. С помощью программы ElementMaker сегодня можно получать некоторые виды низкоуровневых элементов для кодогенератора RTCG из содержимого HTML документации, которая идёт вместе с MSVS2010. Под понятием низкоуровневый надо понимать элемент, результатом вызова метода которого, как правило, является одна строка целевого кода на ЯВУ. Программа строит низкоуровневые элементы по следующим видам информации:
- по классам, некоторых видов;
- по интерфейсу;
- по перечислению;
Примером таких элементов, являются все визуальные контролы пакета CNET построенные на классах из постранства имён System.Windows.Forms и многие другие. Есть в пакете и высокоуровневые элементы, которые, как правило, строят более одной строки целевого кода ЯВУ на вызов одного метода. Примером такого элемента можно назвать TCP_client из Internet вкладки. Наверняка, можно построить подобный элемент из нескольких низкоуровневых элементов, но пока, на мой взгляд, более эффективный (по времени) способ создания таких элементов - это целевой поиск в интЫрнете исходных кодов и использование "готовых" классов (исходников) и сборок (DLL). Примером использования сборок являются элементы для работы с другими языками: VBScript, JScript и IronPython, а также вся вкладка Adobe для работы с программами InDesign, Photoshop и Acrobat, как COM-серверами.
Конечно, есть проблемы:
- несовершенство кодогенератора;
- ограничения, накладываемые средой;
- отсутствие поддержки HiAsm сообщества;
Но, несмотря на проблемы, пакет CNET развивается, хотя и медленнее, чем хотелось бы. В данный момент, происходит пересмотр, всех ранее сделанных, элементов на предмет соответствия достигнутому уровню пониманию возможностей кодогенератора и построение wiki документации по всем элементам на английском языке. После завершения "перетряски" и с разрешения автора HiAsm, будут опубликованы версии пакета для 4-ой и 5-ой версий среды.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Гость
Ответов: 17029
Рейтинг: 0
#497: 2013-04-14 22:03:30 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2022-09-20 02:11:36
карма: 0

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#498: 2013-04-14 22:12:08 ЛС | профиль | цитата
broadband-109-173-101-63. писал(а):
...к сожалению не знаю английский вообще...

Моё мнение о знании мной английского языка немногим выше, но это ниcколько мне не мешает: доступных переводчиков сколько угодно, в том числе и переводящих с экрана. Документация по-русски также доступна, если установить русскую версию MSVS2010. Дорогу осилит идущий.
Но повторюсь, что если Вы новичек в "схемотехнике HiAsm", то, конечно, легче начинать освоение с пакета Windows. А вот захотите ли потом что-то сделать в пакете CNET, зависит от того, каким станет пакет в будущем. Сейчас пакет - это испытательный полигон возможностей кодогенератора RTCG.

Немногие, наверное, понимают почему пакет Windows дружественнее к пользователю чем пакет CNET. Большинство элементов пакета Windows - это высокоуровневые (в моей терминологии - смотрите пост выше) элементы с законченными синтаксическими конструкциями ЯВУ, которые позволяют скрыть от пользователя:
broadband-109-173-101-63. писал(а):
..., а в ответ ошибки и ошибки...

на его, так сказать "метод тыка" при создании:
broadband-109-173-101-63. писал(а):
...пытаешься воплатить идею в рабочую схему...

но за счёт снижения эффективности целевого кода, который уже содержит защиты от "дурака" и многочисленные приведения типов данных.

Создание кодогенератора FTCG, а затем RTCG это попытка выхода на новый уровень создания эффективного целевого кода ЯВУ с большей степенью свободы пользователя, которая меньше защищает от возможности "собрать что-то не так". В этом и кроется основное противоречие: хотите построить эффективный код? Значит не надо строить авианосец, чтобы переплыть ручей "переплюйку".
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 1073
Рейтинг: 76
#499: 2013-04-15 10:30:51 ЛС | профиль | цитата
Nic писал(а):
С помощью программы ElementMaker
А данная прога доступна только разработчикам или всем желающим? Если всем то где ее искать не подскажите.
карма: 0

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#500: 2013-04-15 12:00:29 ЛС | профиль | цитата
tom-it писал(а):
где ее искать не подскажите

Пятая версия (5.0.13) среды с пакетом CNET: hiasm5_cnet_install.rar
В пакет CNET добавлена программа-помощник для создания новых компонентов.
Видео-пример создания нового компонента cnet_make_new_element.rar.

карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
1
файлы: 1elementmaker.rar [57KB] [296]
Голосовали:tom-it
Главный модератор
Ответов: 2997
Рейтинг: 395
#501: 2013-04-16 13:18:37 ЛС | профиль | цитата
Типизация данных на основе кодогенератора RTCG, позволяет "вставлять" код приведения типов данных, "пришедших" в компонент, и устанавливать для кодогенератора тип для данных, "уходящих" из него. Как это реализовано?
Для начала разработчик определяет используемые в пакете типы:
hiSys.hws

#hws
...
// register own types
register(1, int)
register(2, str)
...
затем, определяет правила преобразования типов друг в друга:
hiSys.hws

#hws
...
func to_type(value, type)
if(type == 1)
return(to_int(value))
elseif(type == 2)
return(to_str(value))
end
return(value)
end
...
наконец, разработчик реализует описанные правила:
hiSys.hws

#hws
...
func to_str(value)
t = code_type(value)
if(t == 1)
return('(' + value + ').ToString()')
end
return(value)
end

func to_int(value)
t = code_type(value)
if(t == 2)
return('Int32.Parse(' + value + ')')
end
return(value)
end
...
Теперь рассмотрим как это работает на уровне компонента. Если тип данных, принимаемых точкой, указан в INI файле компонента:
ini

#ini
[Methods]
...
data=Defines the data. ARG(string)|4|2
...
, то достаточно принять данные, используя лексему кодогенератора d(value), которая вызовет функцию sys.to_type(value, type), используя значение типа точки из INI файла:
hws

#hws
...
func doValue(data)
blk.println(this.codename, ' = ', d("data"), ';')
event("onValue", this.codename)
end
...
Если надо указать кодогенератору тип данных, "покидающих" компонент и заранее неуказанный в INI файле компонента, то используется лексема кодогенератора sub(value, type_id):
hws

#hws
...
func Var
return(sub(data, type_id))
end
...
, где type_id- код типа, определенный в файле hiSys.hws лексемой register(type_id, typename)
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 758
Рейтинг: 112
#502: 2013-04-16 17:57:59 ЛС | профиль | цитата
Nic, Вопрос на засыпку (хотел задать другие вопросы, но наткнулся на ступор :shock
Почему в TextBox два метода doSelect
И как в TextBox выделить 3-и первых символа текста

code_30837.txt
карма: 1

0
файлы: 1code_30837.txt [371B] [365]
Главный модератор
Ответов: 2997
Рейтинг: 395
#503: 2013-04-16 22:28:13 ЛС | профиль | цитата
code_30840.txt
------------ Дoбавленo в 22.28:
miver писал(а):
Почему в TextBox два метода doSelect

Не моя выдумка точно, а сложная система наследования методов визуальных классов:
http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.select.aspx
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
1
файлы: 1code_30840.txt [780B] [390]
Голосовали:miver
Ответов: 758
Рейтинг: 112
#504: 2013-04-16 23:01:04 ЛС | профиль | цитата
Nic, Спасибо. А теперь спрошу, то что хотел
Смотри: так работает
code_30841.txt
и так работает
code_30842.txt
а так нет
code_30843.txt
Это баг или так задумано
карма: 1

0
файлы: 3code_30841.txt [570B] [377], code_30842.txt [574B] [358], code_30843.txt [573B] [376]
Главный модератор
Ответов: 2997
Рейтинг: 395
#505: 2013-04-16 23:51:50 ЛС | профиль | цитата
Всё работает как ожидается. В схемах code_30842.txt и code_30843.txt Вы не открыли верхнюю точку start. Но для вызова метода doSelect(int start, int length) правильно выставили тип данных кнопки Push, поэтому кодогенератор принял данные из потока и они случайно совпали с первым параметром метода doSelect. В схеме code_30843.txt тип данных из потока не совпал с требуемым и Вы увидели сообщение об этом после попытки компиляции. Если бы Вы включили верхнюю точку start, то кодогенератор узнал бы ее тип в INI файле и правильно сделал бы приведение типов, что и делается в схеме code_30841.txt.

Почему надо обязательно включать верхние точки для получения их типа данных мне пока неизвестно, но думаю на то есть причина известная Автору среды и кодогенератора, хотя последний может быть не причём.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 758
Рейтинг: 112
#506: 2013-04-17 00:05:38 ЛС | профиль | цитата
Nic писал(а):
Почему надо обязятельно включать верхние точки для получения их типа данных мне пока неизвестно, но думаю на то есть причина известная Автору среды и кодогенератора, хотя последний может быть не причём.
Тогда лучше подождать автора.
Добавлю только, что это так отрабатывает метод d()

карма: 1

0
Ответов: 18
Рейтинг: 0
#507: 2013-04-29 00:39:22 ЛС | профиль | цитата
Как сделать что бы на русском был?
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#508: 2013-04-29 18:38:50 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2022-09-20 02:11:36
карма: 0

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#509: 2013-04-30 00:07:30 ЛС | профиль | цитата
В кодогенератор добавлена экспериментальная функция regex_search - поиск регулярных выражений, основанный на Perl синтаксисе. Требуется дополнительная библиотека: boost.regex, которую надо поместить в корневую папку программы HiAsm. Примером использования служит компонент MathParse. Также надо обновить кодогенератор с SVN.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
файлы: 1libboost_regex-mgw34-1_50.rar [341.7KB] [233]
Ответов: 490
Рейтинг: 162
#510: 2013-05-20 12:24:24 ЛС | профиль | цитата
Здрасте, В компоненте Random у меня какая-то непонятка, проверьте у себя. Если в свойствах установлено мах 100 и не подключено к точке сверху и не передается в потоке - не работает . Если к примеру установить 10 или 1000 - работает.
code_31040.txt
С#v4.0.30319
Это только у меня так?
карма: 4

0
файлы: 1code_31040.txt [350B] [464]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)