Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2011, 11:07   #1
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию Линкер для .NET

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
если еще интересно, насчет dotNET могу ответить в личку.(или в теме созданной для этого)
Конечно, давай.
ds.Dante вне форума Ответить с цитированием
Старый 08.07.2011, 12:00   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хм, а почему линкер то?

ну начну с начала, dotNET приложения состоят из IL кода(возможно в смешении с обычным процессорозависимым), который есть ничто иное, как байт-код для виртуальной машины.
dotNET использует JIT-компиляцию, изза чего приложения занимают больше памяти, чем обычные, но в тоже время скорость выполнения не страдает.
за исключением времени нужного на проведение JIT(это или при старте приложения или же при первом использовании кода).
в отличие от Java, MS сделали финт ушами, и dotNET-приложения/библиотеки являются обычными(на вид) exe/dll, работает это за счет того, что вся мета-информация и код, хранятся внутри exe, которая затем подгружается ядром dotNET(MSCOREE, единственный импорт таких библиотек), со всеми проверками на соответствие версии фреймворка требуемой.(*)
при старте exe(загрузке dll) MSCOREE запускает _CorExeMain(_CorDllMain) которая ищет метаинформацию о фреймворке, если находит, то загружает нужную версию фреймворка(ну и дальше грузятся библиотеки классов).

*:
Код:
#include <windows.h>

void (*F)();

int main(int argc,char** argv)
{
	HMODULE H=LoadLibraryA("MSCOREE.DLL");
	F=(void(*)())GetProcAddress(H,"_CorExeMain");
	F();
}
при выполнении этого кода в простом приложении, вылезет ошибка, что не может найти информацию о версии.

может чтото упустил, задавайте вопросы, отвечу в меру знаний.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.07.2011, 12:22   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Это все, конечно, очень бла-ародно. А что мешает линковать mscore.dll?
ds.Dante вне форума Ответить с цитированием
Старый 08.07.2011, 12:36   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

всмысле запихивать внутрь exe?
ну:
1)став частью exe он не сможет обновлятся.
2)я всетаки немного не верно сказал, mscoree лишь загрузкич для нужного фреймворка по сути.
сами же библиотеки, для 4-го фреймворка здесь E:\WINDOWS\Microsoft.NET\Framework\ v4.0.30319 (clr.dll, clrjit.dll)
да и библиотеки классов, тоже не включишь в себя(хотя в теории такое можно)
3)эти dll платформозависимые, тогда теряется смысл dotNET.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.07.2011, 13:06   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)став частью exe он не сможет обновлятся.
Новая версия моей программы всегда была бы скомпилирована с новыми библиотеками .NET. А так я вынужден использовать старый .NET 3.5, чтобы не заставлять пользователя качать обновление ради одной программы.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
2)я всетаки немного не верно сказал, mscoree лишь загрузкич для нужного фреймворка по сути... да и библиотеки классов, тоже не включишь в себя(хотя в теории такое можно)
Любой линкер выбирает только используемые функции. Разница только в том, что он должен выбирать их не по опкодам, а по IL.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
3)эти dll платформозависимые, тогда теряется смысл dotNET.
Microsoft в последнюю очередь волнует платформонезависимость. Да и пользователю проще выбрать ссылку для скачивания для Win или Linux, а не загружать обновление фреймворка ради одной программы.
ds.Dante вне форума Ответить с цитированием
Старый 08.07.2011, 13:16   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Любой линкер выбирает только используемые функции. Разница только в том, что он должен выбирать их не по опкодам, а по IL.
линкер да, но у нас классы, что есть цельный объект.
там и линкера то нету в общем то.
в итоге ваш exe будет размером со все используемые библиотеки.
это уж проще сам фреймворк скачать...

одна из целей практически любого фреймворка это именно разделяемые ресурсы, dll, библиотеки классов, etc.
Цитата:
Новая версия моей программы всегда была бы скомпилирована с новыми библиотеками .NET. А так я вынужден использовать старый .NET 3.5, чтобы не заставлять пользователя качать обновление ради одной программы.
если пользователю нужна эта программа, он скачает фреймворк(можете и ссылку приложить к скачиванию)
флэш же обновляют.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.07.2011, 13:38   #7
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
линкер да, но у нас классы, что есть цельный объект.
Классы не являются цельными объектами. Оптимизатор может спокойно удалить неиспользуемые методы.


Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
одна из целей практически любого фреймворка это именно разделяемые ресурсы, dll, библиотеки классов, etc.
Лучше программист сам будет решать, использовать ресурсы из фреймворка, или таскать их с собой...

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

Upd. Для справки: последний фреймворк весит 48 МБ.

Последний раз редактировалось ds.Dante; 08.07.2011 в 13:40.
ds.Dante вне форума Ответить с цитированием
Старый 08.07.2011, 14:24   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Новая версия моей программы всегда была бы скомпилирована с новыми библиотеками .NET. А так я вынужден использовать старый .NET 3.5, чтобы не заставлять пользователя качать обновление ради одной программы.
Мне конечно не интересно, но как много народу, а именно пользователей юзают 4-й Фреймворк?

Цитата:
Microsoft в последнюю очередь волнует платформонезависимость. Да и пользователю проще выбрать ссылку для скачивания для Win или Linux, а не загружать обновление фреймворка ради одной программы.
Ой враки, Моно по-Вашему кто поддерживает? Мелкософт и Новелл.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.07.2011, 14:32   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Классы не являются цельными объектами. Оптимизатор может спокойно удалить неиспользуемые методы.
в dotNET однако не так, там JIT-ируется то что надо, но точно не вырезается.(в dotNET считается что классы, должны быть открытыми для рефлексии)
к сожалению тут решили за нас.(но это не ко мне претензии)
Цитата:
Лучше программист сам будет решать, использовать ресурсы из фреймворка, или таскать их с собой...
про решили за нас см выше.
опять же, если не заставляли выбирать этот фреймворк, то стоило заранее узнавать это.
Цитата:
...а ещё лучше - пользователь, в зависимости от того, стоит у него последний фреймворк, или нет.
если приложению строго нужна версия 4, то тут пользователь немного решить может.
и вообще, а вам нужны новинки 4-ки то?(или для понта?)
Цитата:
Мне конечно не интересно, но как много народу, а именно пользователей юзают 4-й Фреймворк?
а можно пояснить смысл слова "юзать" в данном контексте.
а то недогоняю, пользователи его обычно ставят ради каких то приложений.

PS: про размер знаю, со своим GPRS то(правда безлимит)
PPS: самое худшее в dotNET фреймворке, это то что что 4,0 не включает в себя предыдущие релизы.(у меня был прикол, что есть все кроме 3,5, который довольно много весит)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 08.07.2011 в 14:34.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.07.2011, 14:36   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну хорошо у скольких пользователей на компах стоит 4-й Фреймворк? И оно им надо чего-то там доустанавливать?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net gammaray Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 22.11.2010 17:36
Компоненты для Delphi 8 for .NET KyzDmitry Компоненты Delphi 0 07.07.2009 15:18
Линкер выдает ошибку Error: Fixup overflow Terasbetoni Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 27.04.2009 13:03