Login
Веселая фича
15.01.13 11:07
Веселая фича
имеем следующую конструкцию:
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
TTemplatesDll - синглетон
TemplateDir - проперть, контролирующая доступ к полю. Проперть критична и потому отслеживает ситуацию с своей инициализацией - выкидывае Ехцептион если что не так. Инициализация происходит в начале.
Вопрос - Каким образом она может оказаться НЕ инициализированной в средине выполнения программы, когда инициализация DefaultCstFolder уже давно позади?
имеем следующую конструкцию:
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
TTemplatesDll - синглетон
TemplateDir - проперть, контролирующая доступ к полю. Проперть критична и потому отслеживает ситуацию с своей инициализацией - выкидывае Ехцептион если что не так. Инициализация происходит в начале.
Вопрос - Каким образом она может оказаться НЕ инициализированной в средине выполнения программы, когда инициализация DefaultCstFolder уже давно позади?

NEW 16.01.13 00:07
in Antwort Murr 15.01.13 11:07
CLR всего лишь гарантирует, что инициализация статического члена произойдёт до его первого использования. Ты уверен, что использование имело место быть? ;-)
NEW 16.01.13 00:25
in Antwort Posmotrim 16.01.13 00:07
NEW 16.01.13 01:56
По-русски это звучит так пошло...
in Antwort Posmotrim 16.01.13 00:07
В ответ на:
что инициализация статического члена произойдёт до его первого использования
что инициализация статического члена произойдёт до его первого использования
По-русски это звучит так пошло...

NEW 16.01.13 09:53
перед и после первого использования DefaultCstFolder сделать записи в лог.
На основании чего сделан данный вывод? Измени геттер для TemplateDir:
in Antwort Murr 16.01.13 00:23
В ответ на:
Вопрос - Каким образом она может оказаться НЕ инициализированной в средине выполнения программы
Вопрос - Каким образом она может оказаться НЕ инициализированной в средине выполнения программы
перед и после первого использования DefaultCstFolder сделать записи в лог.
В ответ на:
когда инициализация DefaultCstFolder уже давно позади?
когда инициализация DefaultCstFolder уже давно позади?
На основании чего сделан данный вывод? Измени геттер для TemplateDir:
string TemplateDir
{
get
{
log.trace("TemplateDir: 1");
try
{
//перед return:
log.trace("TemplateDir: 2");
}
catch
{
log.trace("TemplateDir: 3");
throw;
}
}
}
что будет в лог файле?
NEW 16.01.13 12:35
даже не хочу знать знать, о чём ты думал в 6-м классе, изучая одночлены и многочлены =))
in Antwort scorpi_ 16.01.13 01:56
В ответ на:
По-русски это звучит так пошло...
По-русски это звучит так пошло...
даже не хочу знать знать, о чём ты думал в 6-м классе, изучая одночлены и многочлены =))
NEW 16.01.13 13:32
in Antwort Posmotrim 16.01.13 09:53
На основании чего сделан данный вывод?
-----
На основании лога. Есть запись об инициализации, есть записи об доступе и в конце есть запись об Ехцептионе...
Не мучайся - в этом коде проблем нет. Проблема есть в другом месте - там создается (не мною) второй инстансе синглетона и он - не инициализирован...
-----
На основании лога. Есть запись об инициализации, есть записи об доступе и в конце есть запись об Ехцептионе...

Не мучайся - в этом коде проблем нет. Проблема есть в другом месте - там создается (не мною) второй инстансе синглетона и он - не инициализирован...

NEW 16.01.13 13:49
ну так ССЗБ. приватный конструктор тебе в руки...
in Antwort Murr 16.01.13 13:32
В ответ на:
там создается (не мною) второй инстансе синглетона и он - не инициализирован.
там создается (не мною) второй инстансе синглетона и он - не инициализирован.
ну так ССЗБ. приватный конструктор тебе в руки...
NEW 16.01.13 14:39
in Antwort Posmotrim 16.01.13 13:49
приватный конструктор тебе в руки...
------
Он и так приватный - указано же - синглетон...
ну так ССЗБ.
-----
Скорее - разработчиков Linq надо кормить звиздюлями...
------
Он и так приватный - указано же - синглетон...

ну так ССЗБ.
-----
Скорее - разработчиков Linq надо кормить звиздюлями...
16.01.13 15:16
in Antwort Murr 16.01.13 14:39
Если конструктор приватный, как был создан второй объект данного класса? И чем тебе насолили создатели линка?
NEW 16.01.13 15:59
in Antwort Posmotrim 16.01.13 15:16
NEW 16.01.13 16:23
Ты не мог бы дать более расширенный ответ, а то я вообще не понимаю твои отрывки фраз :-(
in Antwort Murr 16.01.13 15:59
В ответ на:
Как - это не ко мне, а аккурат к создателям Linq...
Как - это не ко мне, а аккурат к создателям Linq...
Ты не мог бы дать более расширенный ответ, а то я вообще не понимаю твои отрывки фраз :-(
NEW 16.01.13 17:15
in Antwort Posmotrim 16.01.13 16:23
Хммм... Ну хорошо...
Где-то в недрах Linq происходит вызов приватного конструктора TTemplatesDll или класс инстанцируется без вызова.
Причина такого поведения, скорее всего в том, что Linq сам по себе инстанцирует обьекты и делает это где-то в отдельном блоке памяти.
Как результат - там действительно создается другой инстансе singleton'a TTemplatesDll и он непаравильно инициализирован.
Наверное есть какой-то метод как сообщить Linq что ему нужен полный клон обьекта, но мне было лениво копать и обошел по-другому - убрал статику.
Где-то в недрах Linq происходит вызов приватного конструктора TTemplatesDll или класс инстанцируется без вызова.
Причина такого поведения, скорее всего в том, что Linq сам по себе инстанцирует обьекты и делает это где-то в отдельном блоке памяти.
Как результат - там действительно создается другой инстансе singleton'a TTemplatesDll и он непаравильно инициализирован.
Наверное есть какой-то метод как сообщить Linq что ему нужен полный клон обьекта, но мне было лениво копать и обошел по-другому - убрал статику.
NEW 16.01.13 18:11
in Antwort Murr 16.01.13 17:15
а можно привести конструкцию linq, посредством которой
Спасибо.
В ответ на:
происходит вызов приватного конструктора TTemplatesDll или класс инстанцируется без вызова?
происходит вызов приватного конструктора TTemplatesDll или класс инстанцируется без вызова?
Спасибо.
NEW 16.01.13 19:21
in Antwort Posmotrim 16.01.13 18:11
Могу дать завтра. Там удаление из списка.
Но сам код - не принципиален - любой код с использованием Линк будет делать тоже самое...
Но сам код - не принципиален - любой код с использованием Линк будет делать тоже самое...

NEW 16.01.13 19:47
А тебе не кажется что в этом случае это просто не синглетон. Иначе говоря его кривая реализация.
Либо ты еще о чем умалчиваешь....
in Antwort Murr 16.01.13 13:32
В ответ на:
там создается (не мною) второй инстансе синглетона
там создается (не мною) второй инстансе синглетона
А тебе не кажется что в этом случае это просто не синглетон. Иначе говоря его кривая реализация.
Либо ты еще о чем умалчиваешь....
NEW 16.01.13 20:29
in Antwort AlexNek 16.01.13 19:47
А тебе не кажется что в этом случае это просто не синглетон.
-----
Нее, не кажется... TTemplatesDll представляет единственную длл в системе... Мне просто вреден второй экземпляр...
Я так припоминаю, что уже была дискуссия по этому поводу... лет 5-6 назад...
-----
Нее, не кажется... TTemplatesDll представляет единственную длл в системе... Мне просто вреден второй экземпляр...
Я так припоминаю, что уже была дискуссия по этому поводу... лет 5-6 назад...
NEW 16.01.13 21:35
in Antwort Posmotrim 16.01.13 21:14
NEW 16.01.13 23:01
А с каких пор ДЛЛ стала синглтоном? Я что то пропустил?
in Antwort Murr 16.01.13 20:29
В ответ на:
TTemplatesDll представляет единственную длл в системе
TTemplatesDll представляет единственную длл в системе
А с каких пор ДЛЛ стала синглтоном? Я что то пропустил?
NEW 17.01.13 00:51
in Antwort AlexNek 16.01.13 23:01
Представление Длл, однако, будет именно синглетоном... Ну не грузит же приложение две Длл... Хотя... Linq, похоже, грузит...
Да, вопросик попутnый образовался - загрузить Длл разными способами Я вроде умею... интересует - Как загрузить единичный класс из Длл?!.
Да, вопросик попутnый образовался - загрузить Длл разными способами Я вроде умею... интересует - Как загрузить единичный класс из Длл?!.
NEW 17.01.13 10:38
in Antwort Posmotrim 16.01.13 18:11
И так - код
[пре]
public class TTemplatesDll
{
string templateDir;
private TTemplatesDll()
{
}
private static TTemplatesDll instance;
public static TTemplatesDll Instance
{
get
{
if (instance == null)
{
instance = new TTemplatesDll();
instance.filename = defaultDllName;
}
return instance;
}
}
public static string TemplateDir
{
set
{
Instance.templateDir = value;
new TModules(value);
logger.Debug("TemplatesDir seted as " + value);
}
get
{
if (Instance.templateDir == null || Instance.templateDir == string.Empty)
{
throw new Exception("Pointer to Template's directory not initialized");
}
return Instance.templateDir;
}
}
}
public class TModules : List<TAbc>
{
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
public TModules(string pTemplatesDir)
{
/// обрезано
}
public int Remove() // падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
{
return base.RemoveAll(x => !x.Exists());
}
}
public class TAbc
{
public bool Exsist() { ... }
}
[/пре]
[пре]
public class TTemplatesDll
{
string templateDir;
private TTemplatesDll()
{
}
private static TTemplatesDll instance;
public static TTemplatesDll Instance
{
get
{
if (instance == null)
{
instance = new TTemplatesDll();
instance.filename = defaultDllName;
}
return instance;
}
}
public static string TemplateDir
{
set
{
Instance.templateDir = value;
new TModules(value);
logger.Debug("TemplatesDir seted as " + value);
}
get
{
if (Instance.templateDir == null || Instance.templateDir == string.Empty)
{
throw new Exception("Pointer to Template's directory not initialized");
}
return Instance.templateDir;
}
}
}
public class TModules : List<TAbc>
{
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
public TModules(string pTemplatesDir)
{
/// обрезано
}
public int Remove() // падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
{
return base.RemoveAll(x => !x.Exists());
}
}
public class TAbc
{
public bool Exsist() { ... }
}
[/пре]
NEW 17.01.13 13:00
это не линк. RemoveAll - метод коллекции, принимающий предикат. в качестве предиката передана лямбда. так что одно уже выяснили на 100%: линк тут не причём. уже хорошо.
теперь давай перейдём к:
кашпировских тут нет :) так что давай чуть подробней: какой исключение? Тип, сообщение, стэктрейс.
in Antwort Murr 17.01.13 12:35
В ответ на:
RemoveAll(x => !x.Exists());
RemoveAll(x => !x.Exists());
это не линк. RemoveAll - метод коллекции, принимающий предикат. в качестве предиката передана лямбда. так что одно уже выяснили на 100%: линк тут не причём. уже хорошо.
теперь давай перейдём к:
В ответ на:
// падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
// падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
кашпировских тут нет :) так что давай чуть подробней: какой исключение? Тип, сообщение, стэктрейс.
NEW 17.01.13 14:47
in Antwort Posmotrim 17.01.13 13:00
какой исключение?
---
В коде только одно исключение. Именно оно и выбрасывается...
принимающий предикат.
-----
Ну а предикат-то как вычисляется?
---
В коде только одно исключение. Именно оно и выбрасывается...
принимающий предикат.
-----
Ну а предикат-то как вычисляется?
NEW 17.01.13 15:30
in Antwort Murr 17.01.13 14:47
тебе вопросы задавать - ацкая пытка :) или ты просто издеваешься? :)
тоесть кидается
Еще раз : лямбда-выражение представляет краткий способ создания предикатов и не имеет ничего общего с линк. :)
В ответ на:
В коде только одно исключение. Именно оно и выбрасывается...
В коде только одно исключение. Именно оно и выбрасывается...
тоесть кидается
new Exception("Pointer to Template's directory not initialized");
из геттера. так? ты ответил на 2/3 моего первого вопроса. приведи стэк-трейс, будь добр =)
В ответ на:
Ну а предикат-то как вычисляется?
Ну а предикат-то как вычисляется?
Еще раз : лямбда-выражение представляет краткий способ создания предикатов и не имеет ничего общего с линк. :)
NEW 17.01.13 16:06
in Antwort Posmotrim 17.01.13 15:30
приведи стэк-трейс, будь добр =)
------
Чтобы это сделать надо открутить код на три-четыре дня назад. Даже если он и сохранился где-то - это туда-сюда положительного для задачи не даст, а времени займет много... Лучше Я поборюсь с Нулл-поинтером из-за недостатка памяти...
тебе вопросы задавать - ацкая пытка :)
-----
Так скопы-пасть код - он упадет и вопросов не будет...
------
Чтобы это сделать надо открутить код на три-четыре дня назад. Даже если он и сохранился где-то - это туда-сюда положительного для задачи не даст, а времени займет много... Лучше Я поборюсь с Нулл-поинтером из-за недостатка памяти...
тебе вопросы задавать - ацкая пытка :)
-----
Так скопы-пасть код - он упадет и вопросов не будет...
NEW 17.01.13 16:09
так приведи минимальный код, который я смогу скомпилировать.
давай я тебе помогу:
in Antwort Murr 17.01.13 16:06, Zuletzt geändert 17.01.13 16:15 (Posmotrim)
В ответ на:
Так скопы-пасть код - он упадет и вопросов не будет...
Так скопы-пасть код - он упадет и вопросов не будет...
так приведи минимальный код, который я смогу скомпилировать.
давай я тебе помогу:
using System;
using System.Collections.Generic;
namespace ConsoleApplication18
{
public class TTemplatesDll
{
string templateDir;
private TTemplatesDll()
{
}
private static TTemplatesDll instance;
public static TTemplatesDll Instance
{
get
{
if (instance == null)
{
instance = new TTemplatesDll();
instance.templateDir = "uhhaha!!!";
}
return instance;
}
}
public static string TemplateDir
{
set
{
Instance.templateDir = value;
new TModules(value);
System.Diagnostics.Debug.WriteLine("TemplatesDir seted as " + value);
}
get
{
if (Instance.templateDir == null || Instance.templateDir == string.Empty)
{
throw new Exception("Pointer to Template's directory not initialized");
}
return Instance.templateDir;
}
}
}
public class TModules : List<TAbc>
{
private static string DefaultCstFolder = TTemplatesDll.TemplateDir;
public TModules(string pTemplatesDir)
{
/// обрезано
}
public int Remove() // падает с Ехцептионом на вызове этого метода. Сам метод - не выполняется.
{
return base.RemoveAll(x => !x.Exists());
}
}
public class TAbc
{
public bool Exists()
{
return true;
}
}
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(TTemplatesDll.TemplateDir);
}
}
}
вывод:
uhhaha!!!
Drücken Sie eine beliebige Taste . . .
NEW 17.01.13 19:28
В первый раз встречаю, такое определение
Как то привык ориентироваться на другое.
http://csharpindepth.com/articles/general/singleton.aspx
http://msdn.microsoft.com/en-us/library/ff650316.aspx
Для каких целей, можно уточнить?
А в общем прицип простой - грузим длл-ку и вытаскиваем нужный тип
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");
SampleAssembly.GetType("SuperPuperType",true);
Однако веселые часы получишь после :)
Весьма желательно грузить все требуемые Длл-ки в домейн приложения (все выбирается автоматом). Иначе рискуешь получить две копии какой нибудь длл-ки и после долго думать отчего "type1" != "type1"
Ну и в домейне также неплохо подписаться на ошибки загрузки длл-ок и типов.
in Antwort Murr 17.01.13 00:51
В ответ на:
Представление Длл, однако, будет именно синглетоном
Представление Длл, однако, будет именно синглетоном
В первый раз встречаю, такое определение

Как то привык ориентироваться на другое.
http://csharpindepth.com/articles/general/singleton.aspx
http://msdn.microsoft.com/en-us/library/ff650316.aspx
В ответ на:
интересует - Как загрузить единичный класс из Длл
интересует - Как загрузить единичный класс из Длл
Для каких целей, можно уточнить?
А в общем прицип простой - грузим длл-ку и вытаскиваем нужный тип
Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");
SampleAssembly.GetType("SuperPuperType",true);
Однако веселые часы получишь после :)
Весьма желательно грузить все требуемые Длл-ки в домейн приложения (все выбирается автоматом). Иначе рискуешь получить две копии какой нибудь длл-ки и после долго думать отчего "type1" != "type1"

Ну и в домейне также неплохо подписаться на ошибки загрузки длл-ок и типов.
NEW 17.01.13 20:38
in Antwort AlexNek 17.01.13 19:28
СамплеАссемблы = Ассемблы.ЛоадФром("ц:\\Сампле.Ассемблы.длл");
------
Это - легко...
Даже класс из нее инстанцировать никакой сложности не представляет... это, кстати, именно тот класс который мне нужен...
Теперь , плс, перекомпилируй те из 650 шаблонов, которые требуют перекомпиляции... информация - аккурат в загруженном классе...
Первый момент - файл не доступен для записи... Хорошо - грузим в массив и инстанцируем и массива... Победили... однако памяти отожрали много...
Можно уменьшить расходы, сохраняя нужный мне класс в отдельной Длл... тоже работает... но получается много Дллок.
Хочется, однако, иметь одну (большую) Длл и не загружать ее несколько раз...
Потому спрашиваю - Как загрузить отдельный класс из Длл, не загружая саму Длл.
Что-то вида - прочитать заголовок, прочитатй кусок байтового аррея представляющий нужный мне класс и инстанцировать только этот класс из аррея...
и после долго думать отчего "тыпе1" != "тыпе1"
------
Похоже, что что-то похожее было...
------
Это - легко...
Даже класс из нее инстанцировать никакой сложности не представляет... это, кстати, именно тот класс который мне нужен...
Теперь , плс, перекомпилируй те из 650 шаблонов, которые требуют перекомпиляции... информация - аккурат в загруженном классе...
Первый момент - файл не доступен для записи... Хорошо - грузим в массив и инстанцируем и массива... Победили... однако памяти отожрали много...
Можно уменьшить расходы, сохраняя нужный мне класс в отдельной Длл... тоже работает... но получается много Дллок.
Хочется, однако, иметь одну (большую) Длл и не загружать ее несколько раз...
Потому спрашиваю - Как загрузить отдельный класс из Длл, не загружая саму Длл.
Что-то вида - прочитать заголовок, прочитатй кусок байтового аррея представляющий нужный мне класс и инстанцировать только этот класс из аррея...
и после долго думать отчего "тыпе1" != "тыпе1"
------
Похоже, что что-то похожее было...
NEW 17.01.13 20:44
in Antwort Posmotrim 17.01.13 16:09
Хммм... В немецком Я понимаю меньше чем свинья в апельсинах...
Говоришь - не падает... Ну пусть так... А у меня - упало... где не ожидал...
Отчего и почему - не знаю... и не интересно...
Сделал чтобы работало - и хорошо - там других проблем навалом...
Говоришь - не падает... Ну пусть так... А у меня - упало... где не ожидал...
Отчего и почему - не знаю... и не интересно...
Сделал чтобы работало - и хорошо - там других проблем навалом...
NEW 17.01.13 21:03
in Antwort Murr 17.01.13 20:44
NEW 17.01.13 21:10
in Antwort Murr 17.01.13 20:38
Пока еще смутно пониманию что тебе нужно. Чем тебя смущает Лоад?
Можно еще поиграться
с Assembly.ReflectionOnlyLoad и AppDomain
Или загрузить кучу твоих мелких дллок в ресурсы, а после грузить оттуда через стреам.
Можно еще поиграться
с Assembly.ReflectionOnlyLoad и AppDomain
Или загрузить кучу твоих мелких дллок в ресурсы, а после грузить оттуда через стреам.
NEW 17.01.13 21:32
in Antwort AlexNek 17.01.13 21:10
Пока еще смутно пониманию что тебе нужно.
------
Мне нужно получить из Длл информацию об тех шаблонах, которые она уже содержит.
После получения этой информации мне нужно добавить/удалить/заменить соответственно новые/удаленные/изненные шаблоны и обновленную информацию обратно в Длл..
Полную перекомпиляцию делать нежелательно - занимает слишком долго, а меняются обычно 1-2-3 шаблона за раз...
Ну а потом - загружать и гнать все на выполнение... Выполнялку Я сегодня дочинил... Осталось немного потоптаться на базовом коде шаблона и почистить все изделие... Баги там, конечно, еще есть, но оно уже супортабельное - понятно где ковырять при падении...
------
Мне нужно получить из Длл информацию об тех шаблонах, которые она уже содержит.
После получения этой информации мне нужно добавить/удалить/заменить соответственно новые/удаленные/изненные шаблоны и обновленную информацию обратно в Длл..
Полную перекомпиляцию делать нежелательно - занимает слишком долго, а меняются обычно 1-2-3 шаблона за раз...
Ну а потом - загружать и гнать все на выполнение... Выполнялку Я сегодня дочинил... Осталось немного потоптаться на базовом коде шаблона и почистить все изделие... Баги там, конечно, еще есть, но оно уже супортабельное - понятно где ковырять при падении...
NEW 17.01.13 21:51
in Antwort Posmotrim 17.01.13 21:03
это вывод программы на консоль..
-----
Ааа... не обратил внимания на код...
За попутку разобраться - отдельное спасибо...
Сегодня была другая хохмочка...
Система - запускается... и работает... генерация кода - происходит... 100... 200... 400... 600... шаблонов отработали...
А потом - хлюп... и нулл-поинтер... причем шаблоны - те же самые... и выполнялка - та же самая...
Минут 15 не мог понять откуда проблема - все исходники доступны, все компилируется... хоть инкрементно, хоть с нуля...
И все одно - падает...
Потом догадался - версия шаблонов была от предыдущей генерации - изменений в них не было и их не перекомпилировало,
а изменения у меня были аккурат в базовом коде шаблонов...

-----
Ааа... не обратил внимания на код...
За попутку разобраться - отдельное спасибо...
Сегодня была другая хохмочка...
Система - запускается... и работает... генерация кода - происходит... 100... 200... 400... 600... шаблонов отработали...
А потом - хлюп... и нулл-поинтер... причем шаблоны - те же самые... и выполнялка - та же самая...
Минут 15 не мог понять откуда проблема - все исходники доступны, все компилируется... хоть инкрементно, хоть с нуля...
И все одно - падает...

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


NEW 17.01.13 21:59
in Antwort Murr 17.01.13 21:32
Ну вот, после пыток стало немного проясняться. 
долго это сколько на современном компе?
То бишь шаблоны это некие классы, а не спец. язык?
Какой "уровень наследования"? Что мешает сделать по шаблону на Длл-ку - только количество?

В ответ на:
занимает слишком долго
занимает слишком долго
долго это сколько на современном компе?
То бишь шаблоны это некие классы, а не спец. язык?
Какой "уровень наследования"? Что мешает сделать по шаблону на Длл-ку - только количество?
NEW 17.01.13 22:30
in Antwort AlexNek 17.01.13 21:59
долго это сколько на современном компе?
-----
Долго - это дольше, чем может вытерпеть мой шеф...
А вытерпеть он может перекомпиляцию именно тех шаблонов, которые были изменены...
По поводу долго... иногда - долго... есть шаблон, содержащий минимизированную версию какой-то JS-либы... кажется 220 килобайт... минут пять идет конвертация в cs-класс...
Так и хочется выкинуть эту каку хотя бы в отдельный поток... но компилятор - однопоточный...
То бишь шаблоны это некие классы, а не спец. язык?
-----
Отдельный язык, компилируемый (своим компиляторм) в стандартные C# классы. Затем классы уже компилятся в модули... и по результатам еще и Длл лепится...
Какой "уровень наследования"?
-----
2-3... может и больше - я до конца еще не разобрался...
Что мешает сделать по шаблону на Длл-ку - только количество?
-----
Там есть неприятная зависимость от последовательности компиляции... Сейчас шаблоны группируются по модулям и система управляет порядком компиляции и выполнения этих групп/модулей... Если поменять порядок - может и не компилироваться... Разбираться с этим на уровне отдельного шаблона - редактировать в ручную файл в 600+ строк... и делать это каждый раз при добавлении нового шаблона... по 8-10 раз в день... и синхорнизация между разработчиками...
-----
Долго - это дольше, чем может вытерпеть мой шеф...

А вытерпеть он может перекомпиляцию именно тех шаблонов, которые были изменены...

По поводу долго... иногда - долго... есть шаблон, содержащий минимизированную версию какой-то JS-либы... кажется 220 килобайт... минут пять идет конвертация в cs-класс...
Так и хочется выкинуть эту каку хотя бы в отдельный поток... но компилятор - однопоточный...

То бишь шаблоны это некие классы, а не спец. язык?
-----
Отдельный язык, компилируемый (своим компиляторм) в стандартные C# классы. Затем классы уже компилятся в модули... и по результатам еще и Длл лепится...
Какой "уровень наследования"?
-----
2-3... может и больше - я до конца еще не разобрался...

Что мешает сделать по шаблону на Длл-ку - только количество?
-----
Там есть неприятная зависимость от последовательности компиляции... Сейчас шаблоны группируются по модулям и система управляет порядком компиляции и выполнения этих групп/модулей... Если поменять порядок - может и не компилироваться... Разбираться с этим на уровне отдельного шаблона - редактировать в ручную файл в 600+ строк... и делать это каждый раз при добавлении нового шаблона... по 8-10 раз в день... и синхорнизация между разработчиками...
NEW 17.01.13 23:13
in Antwort Murr 17.01.13 22:30
Ну вот, а говорил вот бы класс вытянуть из длл-ки 
А нефиг С# генерить вместо IL
Компиляторы бы ваши поумнее сделать, что бы не генерили столько мусора.

А нефиг С# генерить вместо IL

Компиляторы бы ваши поумнее сделать, что бы не генерили столько мусора.
NEW 17.01.13 23:37
in Antwort AlexNek 17.01.13 23:13
Ну вот, а говорил вот бы класс вытянуть из длл-ки
------
Так оно и остается востребованным...
что бы не генерили столько мусора.
------
Хммм... может еще и где именно мусор лежит подскажешь? Я вот вчера добавил в один из шаблонов реального мусора - возможность выполнять вызов не относящейся к бизнес-обьекту процедурки на sql-сервере... А может и не мусор - разработчику нужен набор данных с сервера, а представления набора - нету... Придется изобретать как в трех строках описать процедуру как набор...
А нефиг C# генерить вместо IL
------
Это не ко мне - это к шефу... Бо, закажить IL будем делать IL... нам, Котам, пофиг что делать...
------
Так оно и остается востребованным...
что бы не генерили столько мусора.
------
Хммм... может еще и где именно мусор лежит подскажешь? Я вот вчера добавил в один из шаблонов реального мусора - возможность выполнять вызов не относящейся к бизнес-обьекту процедурки на sql-сервере... А может и не мусор - разработчику нужен набор данных с сервера, а представления набора - нету... Придется изобретать как в трех строках описать процедуру как набор...
А нефиг C# генерить вместо IL
------
Это не ко мне - это к шефу... Бо, закажить IL будем делать IL... нам, Котам, пофиг что делать...
NEW 18.01.13 00:03
Если не делать из него инстанс, то можно решить либо чистой рефлексией либо из моно стыбрить парсер нетовских длл-ок.
Ну я же не работю по совместительству бабой Вангой, но что то мне подсказывает что гигабайт исходников для обычной задачи многовато.
in Antwort Murr 17.01.13 23:37
В ответ на:
Так оно и остается востребованным...
Так оно и остается востребованным...
Если не делать из него инстанс, то можно решить либо чистой рефлексией либо из моно стыбрить парсер нетовских длл-ок.
В ответ на:
Хммм... может еще и где именно мусор лежит подскажешь?
Хммм... может еще и где именно мусор лежит подскажешь?
Ну я же не работю по совместительству бабой Вангой, но что то мне подсказывает что гигабайт исходников для обычной задачи многовато.
NEW 18.01.13 08:11
in Antwort AlexNek 18.01.13 00:03
для обычной задачи многовато.
------
Если он получается за 5 минут без напяга со стороны исполнителя и имеет гарантированно рабочую функциональность => пофиг размер...
------
Если он получается за 5 минут без напяга со стороны исполнителя и имеет гарантированно рабочую функциональность => пофиг размер...
NEW 18.01.13 22:52
in Antwort Murr 18.01.13 08:11
О 5 минутах и гарантированную фукнциональность - это просто для более интересного рассказа? 
А отчего тогда шеф не доволен временем и что ты правишь каждый день?

А отчего тогда шеф не доволен временем и что ты правишь каждый день?

NEW 18.01.13 23:55
in Antwort AlexNek 18.01.13 22:52
что ты правишь каждый день?
-----
Сам движек...
Шеф всегда нацелен на сделать как можно быстрее...
Ну а у меня цель - сделать более качественно, обеспечить сопровождаемость...
Это всегда занимает дольше... правда не дольше, чем писать и править спагетти...
для более интересного рассказа?
------
Приложение, обычно, порождается работоспособным... Но шаблоны надо весьма и
весьма вдумчиво чистить - там слишком много встроенного кода... который часто полное
спагетти...
-----
Сам движек...
Шеф всегда нацелен на сделать как можно быстрее...
Ну а у меня цель - сделать более качественно, обеспечить сопровождаемость...
Это всегда занимает дольше... правда не дольше, чем писать и править спагетти...
для более интересного рассказа?
------
Приложение, обычно, порождается работоспособным... Но шаблоны надо весьма и
весьма вдумчиво чистить - там слишком много встроенного кода... который часто полное
спагетти...
NEW 19.01.13 13:55
То есть компиляция кодогнератора занимает дофига времени?
Что то мне кажется что твоя цель более правильна......
По идее любая готовая программа рабопособна,... в определенной ситауции.
А вот найти ошибку в гиге сгенерированного кода, думаю не такая уж и простая задача.
in Antwort Murr 18.01.13 23:55
В ответ на:
Сам движек...
Сам движек...
То есть компиляция кодогнератора занимает дофига времени?
В ответ на:
Ну а у меня цель - сделать более качественно, обеспечить сопровождаемость...
Ну а у меня цель - сделать более качественно, обеспечить сопровождаемость...
Что то мне кажется что твоя цель более правильна......
В ответ на:
Приложение, обычно, порождается работоспособным
Приложение, обычно, порождается работоспособным
По идее любая готовая программа рабопособна,... в определенной ситауции.
А вот найти ошибку в гиге сгенерированного кода, думаю не такая уж и простая задача.
NEW 21.01.13 10:30
in Antwort AlexNek 19.01.13 13:55
То есть компиляция кодогнератора занимает дофига времени?
------
Там кучка поцессов.
1. Компиляция собственно генератора. По времени - пустяки, тем более, что выполняется однократно...
2. Компиляция шаблонов. Тоже относительно не долго, но происходит гораздо чаще.
3. Кеширование схемы приложения (базы данных). Медленный процесс, мне хватает 1-го раза, а интегратору нужно раз 30 в час...
4. Генерация. Наиболее частый процесс. Последнее (мое) достижение - снизил времая генерации с 12 минут до 51 секунды.
5. Компиляция сгенерированного приложения. Тут странно - занимает дольше генерации...
6. Тестирование. Под вопросом - аккурат то, над чем мне работать на следующем этапе.
более правильна..
------
Но и более дорога. А денег вроде начинает катастрофически нехватать.
не такая уж и простая задача.
------
От того, что найдется ошибка в коде - ни холодно, ни жарко. Это как констатировать, что в выданной сдаче не хватает пяточка. Одна известна прямо сейчас - где-то в вызове sql-процедуры не подставляется OrderBy... при этом - есть критерий по умолчанию - по первичному ключу, но он не подставляется.
Теперь, как результат наличия ошибки, надо устанавливать она взялась - в исходных данных схемы (это легко), в конфигах (это тоже не сложно), в шаблонах (обьемно, но не сильно сложно), либо где-то в комплексе генератора (тут уже надо попыхтеть)...
------
Там кучка поцессов.
1. Компиляция собственно генератора. По времени - пустяки, тем более, что выполняется однократно...
2. Компиляция шаблонов. Тоже относительно не долго, но происходит гораздо чаще.
3. Кеширование схемы приложения (базы данных). Медленный процесс, мне хватает 1-го раза, а интегратору нужно раз 30 в час...
4. Генерация. Наиболее частый процесс. Последнее (мое) достижение - снизил времая генерации с 12 минут до 51 секунды.
5. Компиляция сгенерированного приложения. Тут странно - занимает дольше генерации...
6. Тестирование. Под вопросом - аккурат то, над чем мне работать на следующем этапе.
более правильна..
------
Но и более дорога. А денег вроде начинает катастрофически нехватать.
не такая уж и простая задача.
------
От того, что найдется ошибка в коде - ни холодно, ни жарко. Это как констатировать, что в выданной сдаче не хватает пяточка. Одна известна прямо сейчас - где-то в вызове sql-процедуры не подставляется OrderBy... при этом - есть критерий по умолчанию - по первичному ключу, но он не подставляется.
Теперь, как результат наличия ошибки, надо устанавливать она взялась - в исходных данных схемы (это легко), в конфигах (это тоже не сложно), в шаблонах (обьемно, но не сильно сложно), либо где-то в комплексе генератора (тут уже надо попыхтеть)...