Ну и опять же, способ сортировки (даже в Вашей маленькой схеме) сомнения вызывает. А еще и все точки на линиях связи пронумерованы (в смысле, имеют свои иденты отличные от всего остального). И схемы тоже....
А если заводить отдельный счетчик на каждый класс - при внутреннем использовании (ну, например, при генерации кода), обрабатывая очередь из элементов схемы, я должен пользоваться не идентом (просто число), а парой - <номер>+<имя класса>. Это не увеличивает, мягко говоря, эффективность работы кодогенератора. Вот и спрашивается - ради чего
Вот сегодня получил от Nic-а его знаменитую схему (всего 50К под RAR-ом). Нажимаю <Статистика>, и вижу:
[code:1]В текущем контейнере: 284
Всего элементов: 11597[/code:1]
И какая сортировка здесь поможет :?:
И получается - куча напряга с непонятным результатом.
Опять же, ИМХО, конечно......
У Автора совершенно спокойно может оказаться другое мнение :)
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
|
|||
карма: 9 |
|
Ответов: 964
Рейтинг: 12
|
|||
При написании тестов для студентов я часто сталкивался с похожими
проблемами - и нечего все решалось. (Там нужно было выдавать определенное количество вопросов из определенных групп причем так чтобы соблюдать определенные пропорции все это псевдослучайно и разумеется без повторов.) Кстати сильно сомневаюсь что способ генерации "крякозяблов" на много проще счетчиков. (а возможно что и сложнее) Кстати для упрощения изменения я предложил править уже при записи на диск. Для чего все это надо ? Для того чтоб иметь возможность контролировать код когда это понадобится . - дело в том что 70970779 и 70170774 на глаз совершено не различается сходу , а 000001 и 000009 различить и найти в коде куда как проще. (В схеме еще ладно но на Паскала это полный "пушной зверек" и кубатура шара в придачу... .) |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
AlexKir, а я и не говорил, что задача не разрешимая, или бессмысленная. Говорил несколько другое:
2) Это улучшит качество выходного продукта - нет 3) Это совсем не имеет смысла - имеет[/list:u]И прибавлял, ИМХО, конечно. Ну а самое рациональное решение здесь - напрягать Автора не на собственные предпочтение (которые могут оказаться и не самыми удобными для остальных), а на предоставление возможности реализовывать свои предпочтения самостоятельно. Примеры: 1) Команду <Копировать ссылку> каждый может поместить куда хочет, с помощью редактора команд. Вот я поместил в контекстное меню по правому клику на элементе.... 2) Разместить коды своих элементов можно там где вздумается. Ну и режимы оптимизации для компилятора, задаваемые через командную строку.... 3) Можно разделить работу среды и кодогенератора, вынеся последний в dll-ку. Уже сегодня пользователь может создавать свои типы проектов => можно создать проект генерации того самого кодогенратора. Но это на схеме HiAsm, а если Вам больше понравится в оболочке Дельфи - так совсем нет вопросов. Вот он-то и генерирует файлы контейнеров - к нему и вопросы по формированию имен, вплоть до переименования тех, которые не нравятся. А вот среда тогда становится языково-независимой, и, следовательно, нельзя делать вывод, что в любом гипотетическом языке устроены зоны видимости по аналогии с языками ВУ. Не факт => генерация идентов в среде должна быть уникальной по всему проекту, независимости от вложенности. Но если у пользователя (продвинутого в достаточной степени, конечно) есть возможность влиять на кодогенератор - так нумеруйте как хочется. А если Ваш вариант окажется удачным - так будет Вам большое спасибо от всех любителей кода Этот вопрос еще не закончен в достаточной степени, но таки обсуждался на форуме. Так что, присоединяйтесь, г-н барон.... Присоединяйтесь... |
|||
карма: 9 |
|
Ответов: 964
Рейтинг: 12
|
|||
AlexKir, а я и не говорил, что задача не разрешимая, или бессмысленная. Говорил несколько другое: 1) Это лежит на ветке "визуального программирования" - нет 2) Это улучшит качество выходного продукта - нет 3) Это совсем не имеет смысла - имеет Вывод: все оставить как есть ни чего не менять ... Ну а самое рациональное решение здесь - напрягать Автора не на собственные предпочтение (которые могут оказаться и не самыми удобными для остальных), а на предоставление возможности реализовывать свои предпочтения самостоятельно. О да ! Как-же, как-же ... Глобальные улучшения, универсальные решения - это на самом деле БОЛЕЗНЬ большинства программистов. (И моя, каюсь, тоже!) Не стоит пренебрегать возможностью сделать что-то лучше уже сейчас, не дожидаясь когда будет готов очередной "перепотуммобиле" - возможно сразу решающий и эту и множество других проблем. (Как показала практика часто универсальные решения просто одни проблемы заменяют другими.) На самом деле нужен БАЛАНС между частным и общим. Хотя насчет кодагенератора в принципе согласен.. (Насчет мультиязыковости можно спорить, но это по идее никак не отразится на любителях Паскаля (Пасквилянтах ) .) Возвращаясь от прикладной философии "к нашим баранам" То что я предлагаю по моему уж точно не хуже того что есть, и для большинства просто просто пройдет незамеченным . (По моему эти идентификаторы вообще рудимент скриптовых версий ХайАсма) Этот вопрос еще не закончен в достаточной степени, но таки обсуждался на форуме. Так что, присоединяйтесь, г-н барон.... Присоединяйтесь... С удовольствием сиятельный граф Galkov ! Не будете ли так любезны подсказать ветку форума? |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Подход "ближе к делу" это правильный подход На счет простоты генерации идентификатора в настоящее время прав г-н Galkov, - она проста на столько, на сколько это вообще возможно. А именно к классу элемента добавляется его адрес в памяти, что обеспечивает 100% уникальность и ничего дополнительно делать не надо.
Поменять идентификатор можно самостоятельно в строке: [code:1]CodeName := cgt.elGetClassName(e) + '_' + Int2Hex(e,6);[/code:1] кодогенератора(пока таковой есть только для PocketPC) например на простой счетчик: [code:1]CodeName := cgt.elGetClassName(e) + '_' + Int2Str(ECount); inc(ECount);[/code:1] |
|||
карма: 27 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
По моему эти идентификаторы вообще рудимент скриптовых версий ХайАсма
Не совсем так. Если внимательно посмотреть на формат SHA то станет ясно почему. |
|||
карма: 27 |
|
Ответов: 964
Рейтинг: 12
|
|||
А я то думал! Еще простой вариант вариант получать ИД из адреса єлемента в памяти.
Зы Ладно попробую сейчас написать свой утиль. |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Dilma, а почему тогда всего 6 цифр
|
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
количество цифр ни на что по идее не влияет даже если адреса будут меньше 0x00100000
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Ну не факт, что диапазон адресов в 1метр уложится. В, не к ночи помянутом, статусплане, например......
|
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Так я и говорю что все равно. Вместо 6 можно и 8 поставить а можно и 1...
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Так вот чего я знаю про это на сегодняшний день:
1) Среда уже распознает наличие CodeGen.dll в папке соответствующего проекта, и если нашла таковую - готова радостно перепоручить кодогенерацию этой dll-ке 2) Результат работы (несколько StrList-ов) среда далее передаст одной из dll-к типа make_XXX. Так называемые генераторы проекта. Исходники на эти dll-ки (кроме make_exe) лежат в папке %HiAsm%\plug, и, если ознакомиться с ними, приходит понимание как сделать свой проект (например, тот же отсутствующий make_exe, или генератор кодогенератора из схемы HiAsm) 3) CodeGen.dll экспортирует один метод:
|
|||
карма: 9 |
|
Ответов: 964
Рейтинг: 12
|
|||
Спасибо за информацию! Нужно будет хорошенько вникнуть.
А пока вот что : шарясь в каталогах я обнаружил схемы вроде about.sha. Означает ли они наличие внутреннего интерпретатора и/или возможности создавать оболочки элементов-компонентов для «Дизайн-Тайма» (как в Дельфи) ? Думаю что это было бы не плохо! Зы : Разобрался в опции «копировать ссылку» и прикрутил ее «по Галковски» Но обнаружил забавный глюк попытавшись создать ссылку на МайнФорм Кстати неплохо бы как то выделять ссылку на схеме(как ярлыки Винде) , а то можно удалить по ошибке оригинал . «Мультики» тоже желательно сделать более различимыми – ну хоть-бы номер в углу нарисовать что-ли и/или комментарий автоматом внутри вставлять (Не важно что размер «квадратика» на схеме будет большой зато сразу будет видно что к чему и почему – хинт (ИМХО) все же не то ... ) |
|||
карма: 0 |
|
Ответов: 964
Рейтинг: 12
|
|||
На счет мультиязыковости по размышлению имеет смысл.
Но думаю что не для "одно яйцевых" языков как С,Паскаль,Ада,Модула,Фортран... А для более логически отличных таких как Форт,Пролог,Лисп,Руби... Кстати рекомендую обратить внимание именно на Форт . ИМХО этот язык просто создан для НиАсма ! Компактность кода может соперничать с чистым асемблером! Наращиваемость конструкций (Гибкость!) не сравнятся ни каким другим языком. Язык одновременно и высокого и низкого уровня и компилятор и интерплетатор . (Есть возможность применения ООП) Пугающая новичков «обратная польская запись» легко правится простеньким набором слов на два три скрина по 10-15 строк кода. Не хватает только развитой визуальной среды - не хватает ХайАсма! http://www.forth.org.ru/ |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
А возвращаемый поинтер - это такая штука:
Добавлю, что эта структура на 100% определяется программистом и может содержать любые поля. В среде она никак не используется и нужно только очевидно для разделения генерируемого кода и проектов. TCodeGenTools - комментарии будут попозже. Означает ли они наличие внутреннего интерпретатора и/или
возможности создавать оболочки элементов-компонентов для «Дизайн-Тайма»(как в Дельфи) ? Думаю что это было бы не плохо! не означает. Поскольку в среде уже есть классы понимающие sha формат то грех их не использовать в качестве интерфейса. Однако свои компоненты вставить можно: Помощь->Разработка->Класс Custom Но обнаружил забавный глюк попытавшись создать ссылку на МайнФорм
Какой? Кстати неплохо бы как то выделять ссылку на схеме(как ярлыки Винде) , а то можно удалить по ошибке оригинал
А как же она сейчас выделяется Но думаю что не для "одно яйцевых" языков как С,Паскаль,Ада,Модула,Фортран...
А для более логически отличных таких как Форт,Пролог,Лисп,Руби... Прошу ознакомится с пакетом FASM на основе одноименного ассемблера. Это действующий пакет с двумя примерами - отрисовкой линий на форме и закрытием формы по нажатию кнопки. В папке есть и скомпилированные EXE для ознакомления. |
|||
карма: 27 |
|