Сделать аналог макросов в VB Net

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

kanut
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 24.03.2013 (Вс) 12:10

Сделать аналог макросов в VB Net

Сообщение kanut » 25.01.2014 (Сб) 11:14

Хотел бы узнать каким образом в исходник на VB Net можно добавлять код из внешнего файла и чтобы этот фрагмент включался в состав программы при компиляции, а не во время выполнения (аналог макросов в C). В интернете я когда-то случайно наткнулся на один способ добавления кода из внешнего исходника, а сейчас сколько не искал, так и не смог найти его. Там использовались какие-то классы .Net Framework.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.01.2014 (Сб) 13:17

Насколько я представляю, никак... Можно компилировать код в рантайме, но это же вставка кода при компиляции.

kanut
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 24.03.2013 (Вс) 12:10

Re: Сделать аналог макросов в VB Net

Сообщение kanut » 25.01.2014 (Сб) 16:30

Qwertiy писал(а):но это же вставка кода при компиляции.


Всмысле не при компиляции?

Если других вариантов нет, значит, в той теме обсуждался именно такой способ как замена макросам :cry:

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.03.2014 (Вт) 1:24

kanut писал(а):Всмысле не при компиляции?

Именно так :)

kanut писал(а):Если других вариантов нет

Ну, можно написать генератор кода. Или даже расширение для VS для генерации кода или макросов.

PS: Полезно иногщда старые открытые в браузере вкладки поперебирать.

kanut
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 24.03.2013 (Вс) 12:10

Re: Сделать аналог макросов в VB Net

Сообщение kanut » 11.03.2014 (Вт) 17:47

Qwertiy писал(а):Ну, можно написать генератор кода

Да, именно его я и буду делать. Надо будет посмотреть как организована работа с макросами в среде VS в С/C++. Интересно, удастся ли реализовать для VB такой же функционал отладки как для C/C++ в среде VS или чем-то придется пожертвовать? Больше всего интересует как раз простая отладка кода VB со вставками.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Сделать аналог макросов в VB Net

Сообщение FireFenix » 11.03.2014 (Вт) 20:52

Самое главное - нафига?

.net по сути с моно уже кросс платформенный, зачем нужны макросы не понятно
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.03.2014 (Чт) 11:46

FireFenix писал(а):.net по сути с моно уже кросс платформенный, зачем нужны макросы не понятно

Не понял, какая связь между кроссплатформенностью и макросами?
Кстати, моно же только для шарпа, вроде?

kanut
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 24.03.2013 (Вс) 12:10

Re: Сделать аналог макросов в VB Net

Сообщение kanut » 13.03.2014 (Чт) 13:01

FireFenix писал(а):нафига

По результатам тестов вызов подпрограмм с очень легким кодом занимает примерно в 8 раз больше времени, чем просто этот легкий вставленный код. Допустим, что в среднем, тот код, который у меня будет в макросах будет немного тяжелее, но все равно это даст выигрыш в 5 раз. В некоторых местах программ мне требуется максимально высокая скорость выполнения, поэтому пятикратное увеличение их скорости будет там очень кстати.
Пока самым вероятным способом реализации макросов мне видится вариант с отладкой обычных подпрограмм, а после полной отладки и тестирования надо будет однократно заменить названия подпрограмм-макросов в исходниках на их код. Но я еще не углублялся в эту тему.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Сделать аналог макросов в VB Net

Сообщение FireFenix » 13.03.2014 (Чт) 13:17

Qwertiy писал(а):Не понял, какая связь между кроссплатформенностью и макросами?

Прямая.
Написание адекватного платформонезависмого кода практически невозможно без макросной обёртки.
В остальных случаях - можно обойтись без макросов без ущерба чему-то.

kanut писал(а):о результатам тестов вызов подпрограмм с очень легким кодом занимает примерно в 8 раз больше времени, чем просто этот легкий вставленный код

Зачем замерять производительность лёгкого кода? Чем измерялась производительность?
Откуда число в 8 раз? Релиз сборка? включена оптимизация? количество замеров? Был ли сгенерирован ngen'ом образ?

kanut писал(а):В некоторых местах программ мне требуется максимально высокая скорость выполнения, поэтому пятикратное увеличение их скорости будет там очень кстати.

В критических местах к скорости по определению не нужно юзать .net

kanut писал(а):Пока самым вероятным способом

Самый лучший способ - вначале полностью и корректно изложить задачу (основную задачу) и зачем вы хотите в ней использовать макросы. Желательно с примерами кода, а лучше с рабочим проектом, чтобы не париться с запуском.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.03.2014 (Чт) 13:57

FireFenix писал(а):Написание адекватного платформонезависмого кода практически невозможно без макросной обёртки.

Эм.. На уровне ветвлений макросы вполне поддерживаются, хотя и в более урезанном варианте по сравнению с шарпом.

FireFenix писал(а):В остальных случаях - можно обойтись без макросов без ущерба чему-то.

Обойтись можно без всего. Но это не значит, что всегда удобно без этого обходиться.

kanut писал(а):По результатам тестов вызов подпрограмм с очень легким кодом занимает примерно в 8 раз больше времени, чем просто этот легкий вставленный код.

Очень подозрительное утверждение. Он должен бы сам инлайнить их при компиляции. Или замеры времени не для релиза? Тогда они вообще бессмысленны.

kanut
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 24.03.2013 (Вс) 12:10

Re: Сделать аналог макросов в VB Net

Сообщение kanut » 13.03.2014 (Чт) 14:33

FireFenix писал(а):В критических местах к скорости по определению не нужно юзать .net

Единственно, что может в разы, а не на проценты увеличить скорость по сравнению с Net это ассемблер, но у меня нет времени и желания учить его, а потом очень долго мучится с этим ужасным ассемблером. Лично у меня ассемблер забирает слишком много сил, терпения на него не хватает. :evil:

FireFenix писал(а):Был ли сгенерирован ngen'ом образ?

Про ngen я знаю.

FireFenix писал(а):Релиз сборка?

Qwertiy писал(а): Или замеры времени не для релиза?


Только сейчас узнал, что есть такая разница между отладочной версией и релизной. Провел тесты на релизе, и результаты для вставки и вызова подпрограммы оказались одинаковыми. Просто замечательно, теперь не придется возиться со вставками кода. :D

Заодно, не подскажете, откуда именно или как вы узнавали, что релиз выполняется намного быстрее. Хочется знать откуда программисты черпают полную информацию.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Сделать аналог макросов в VB Net

Сообщение FireFenix » 13.03.2014 (Чт) 15:09

Только сейчас узнал

Если вы бы сразу приложили код или сразу изложили проблему с тем, что вы сделали, и с какими параметрами, и как вы пришли к негативной работе - вам бы сразу помогли без наводящих вопросов.

Единственно, что может в разы, а не на проценты увеличить скорость по сравнению с Net это ассемблер

Утверждение не верно. Оптимизирующие компиляторы генерируют код достаточной производительности. Так же относительно и полностью сложный код будет оптимальнее у оптимизирующего компилятора. Если лучше, чем средне, знать как работает компилятор и использовать его лучшие стороны - код будет не хуже оптимизированного на асм.
Любой нативный язык минимум в 1,5 раза производительнее. Вызов .net функций в 2-3 раза медленнее чем на C++, на gamedev.ru уже не первый раз этот вопрос поднимался.

откуда именно или как вы узнавали, что релиз выполняется намного быстрее.

Интерес, интеллект -> найти потыкать кнопки в свойствах проекта
знания, возможности -> замерить время, открыть и посмотреть msil
сделать выводы

Ну и собсно на основе опыта - производители по умолчанию, для простоты отладки, в Debug компиляции встраивают дополнительную отладочную информацию и отладочные механизмы

Хочется знать откуда программисты черпают полную информацию.

логично, что у оффициально производителя среды и языка http://msdn.microsoft.com/ru-ru/library/
а так же http://www.google.ru и http://www.ya.ru
в тупиковых ситуациях существуют форумы bbs.vbstreets.ru, gamedev.ru, sources.ru, вингард и другие
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

kanut
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 24.03.2013 (Вс) 12:10

Re: Сделать аналог макросов в VB Net

Сообщение kanut » 13.03.2014 (Чт) 16:03

FireFenix писал(а):вам бы сразу помогли без наводящих вопросов

Нет, такое предусмотреть невозможно. Если бы я задавал вопросы на форумах каждый раз когда они появляются, то не вылезал бы с них. Приходится искать информацию самому и на ее основании самостоятельно решать может ли быть еще какой-то способ избавиться от проблемы или нет.

FireFenix писал(а):Любой нативный язык минимум в 1,5 раза производительнее.

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

FireFenix писал(а):Вызов .net функций в 2-3 раза медленнее чем на C++, на gamedev.ru уже не первый раз этот вопрос поднимался.

Всмысле, скорость вызова функции .Net против скорости вызова такой же функции из стандартной библиотеки C++?
Вообще, в критических секциях мне в основном нужны математические и логические операции, а вызовов функций там мало.

FireFenix писал(а):сделать выводы

Ясно, спасибо!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Сделать аналог макросов в VB Net

Сообщение FireFenix » 13.03.2014 (Чт) 16:07

kanut писал(а):Нет, такое предусмотреть невозможно. Если бы я задавал вопросы на форумах каждый раз когда они появляются, то не вылезал бы с них. Приходится искать информацию самому и на ее основании самостоятельно решать может ли быть еще какой-то способ избавиться от проблемы или нет.

Имелось ввиду изложение материала в первом посте, а не по любому вопросу идти на форум :D

Всмысле, скорость вызова функции .Net против скорости вызова такой же функции из стандартной библиотеки C++?

Скорость вызова функции .NET MyFunction()
против вызова скорости функции C++ MyFunction()
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

kanut
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 24.03.2013 (Вс) 12:10

Re: Сделать аналог макросов в VB Net

Сообщение kanut » 13.03.2014 (Чт) 16:40

FireFenix писал(а):Имелось ввиду изложение материала в первом посте

На тот момент мне казалось, что вставка кода это единственный способ сделать скорости выполнения равными. Если бы я хотя бы подозревал, что есть еще какой-то другой способ, то поступил бы по-другому. Писать конкретные примеры моих тестов и спрашивать, что с ними делать, для меня было бессмысленным.

FireFenix писал(а):Скорость вызова функции .NET MyFunction()
против вызова скорости функции C++ MyFunction()

Интересно, как-нибудь при случае попробую протестировать.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.03.2014 (Пт) 11:56

kanut писал(а):На тот момент мне казалось, что вставка кода это единственный способ сделать скорости выполнения равными.

Просто компилятор или jit-компилятор именно так и поступает, но сам :)

FireFenix писал(а):Скорость вызова функции .NET MyFunction()
против вызова скорости функции C++ MyFunction()

Эм.. Нет...
Скорость первого вызова медленнее из-за компиляции, а остальных - нет.
Там разница возникает за счёт всяких защитных проверок.
Последний раз редактировалось Qwertiy 14.03.2014 (Пт) 16:47, всего редактировалось 1 раз.

kanut
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 24.03.2013 (Вс) 12:10

Re: Сделать аналог макросов в VB Net

Сообщение kanut » 14.03.2014 (Пт) 15:56

Qwertiy писал(а):Просто компилятор или оше-компилятор именно так и поступает, но сам

Ясно :)

Всем большое спасибо за помощь!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.03.2014 (Пт) 16:49

kanut писал(а):
Qwertiy писал(а):Просто компилятор или оше-компилятор именно так и поступает, но сам

Ясно :)

Только не оше-компилятор, а jit-компилятор. Невнимательно слежу за пунтосвитчером :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

    TopList