Беседа с ООП кодером.
05-03-2007 19:39
к комментариям - к полной версии
- понравилось!
Видимо я открыл новое слово - как ускорить интерпретацию методов объектов еще на этапе компиляции, о чем мы и побеседовали с одним эрудированным, но законсервированным ООП Кодером.
fixin (10:50:34 5/03/2007)
по дельфи силен?
ООП кодер (10:50:45 5/03/2007)
только по С
fixin (10:50:52 5/03/2007)
С++ ?
ООП кодер (10:51:12 5/03/2007)
С С++ - но не шарп
fixin (10:51:45 5/03/2007)
тогда вопрос, может в курсах
fixin (10:51:46 5/03/2007)
Известно, что в Windows можно использовать DLL, т.е. откомпилировать некий набор функций отдельно и сохранить его в виде DLL, чтобы по мере надобности загрузить в память.
В связи с этим вопрос - а можно ли откомпилировать отдельно класс (по аналогии с DLL), чтобы тоже подгружать его в память по мере необходимости:
1. Возможно ли это в принципе.
2. Возможно ли это, если есть все исходники базовых классов.
3. Возможно ли это, если базовые классы представлены только в компилированном виде.
Какой язык позволяет такую раздельную компиляцию? С теоретической точки зрения никаких проблем не вижу. Интерпретаторы не предлагать, речь именно о компиляторах.
В принципе, для такой динамической загрузке в память нужно всего лишь заменить после загрузки в память адреса вызовов базовых функций реальными адресами, где находятся эти функциями, или даже проще, нужно просто заменить адреса базовых классов на фактические адреса этих базовых адресов в памяти, а функции вызывать по относительной ссылке - на каком смещении от начала кода класса находится эта функция (смещение можно определить еще при компиляции из откомпилированного модуля базового класса). Все реально, вопрос в том, есть ли такое?
fixin (10:51:52 5/03/2007)
Вопрос по IDispatch.
Если у меня в коде встречается вызов
For i=1 to 100
X.Print();
Next i
То в интерфейсе IDispatch название метода Print будет искаться в таблице методов каждый раз в 100 проходах цикла или только при первом обращении?
И еще вопрос по IDispatch - если X обладает таким интерфейсом, то смогу я записать X.Print() или мне все же придется извращаться с X.CallIDispatch("Print", …)
fixin (10:51:56 5/03/2007)
Вопрос по вызовам методов.
Если программист пишет в коде:
Y="Print";
X[Y]();
То понятно, что на этапе компиляции мы не можем определить, какой метод объекта X хочет вызвать программист, и должны искать соответствие по таблице методов. Единственное, в этой точке кода мы можем сделать хеширование, чтобы проверять, если в очередной раз название требуемого метода соответствует предыдущему, не искать, а выдавать готовый метод (например, в циклах).
Но такая формулировка встречается очень редко.
Обычно программист пишет: X.Print();
Тогда можно завести глобальный двумерный массив, где перечислены все методы (Print, Copy, Paste, Run и т.д….) для всех классов.
Каждый экземпляр класса (например в Delphy) обычно содержит информацию о своем типе, поэтому можно обратиться к этому двумерному массиву и определить, по какому адресу расположен нужный метод у нужного объекта.
Если метода нет, можно в этой двумерной таблице проставлять ссылку на метод NoMethod соответствующего класса - метод, который обрабатывает случай, когда запрашивают метод, которого нет (чтобы не вводить дополнительную проверку, существует ли сооветствующий метод у класса).
ООП кодер (10:52:41 5/03/2007)
это скорее вопрос по нутру венды
fixin (10:52:58 5/03/2007)
нет, это вопрос о компиляторе
fixin (10:53:02 5/03/2007)
хочу такой язык
fixin (10:53:15 5/03/2007)
винда позволяет грузить DLL, значит такое возможно
fixin (10:53:21 5/03/2007)
потому что класс - суть набор функций
ООП кодер (10:55:37 5/03/2007)
ну вообще-то MFC так и сделано - библиотека классов скомпилена в отдельную DLL-ку и подгружается
ООП кодер (10:56:43 5/03/2007)
в принципе если взять исходники MFC - чего-то в них поковырять в реализации не меняя интерфейс и собрать - то можно подменить одну длл-ку другой с другой реализацией классов и все будет супер
ООП кодер (10:57:37 5/03/2007)
все виндовые движки тем - которые не просто цвет меняют а именно вид контролов - скажем интерфейс венды а-лф макос - именно на этом и построены
fixin (10:57:56 5/03/2007)
как называется технология???
ООП кодер (10:58:03 5/03/2007)
да ХЗ
ООП кодер (10:58:15 5/03/2007)
DLL оно и в африке DLL
fixin (10:58:36 5/03/2007)
мдя, это не ответ...
fixin (10:58:47 5/03/2007)
DLL - это набор функций, а я про набор классов
ООП кодер (10:58:59 5/03/2007)
а не по?
ООП кодер (10:59:10 5/03/2007)
функции, классы - один хуй
fixin (10:59:33 5/03/2007)
короче, серега, ты не в курсе.
fixin (10:59:34 5/03/2007)
ок
ООП кодер (11:00:43 5/03/2007)
надо просто собрать реализацию классов в виде DLL а в своем проекте использовать хедер с описаниями - в результате в твою прогу вкомпилируются только вызовы классов - а реализация классов - сами методы - будут доступны динамически
fixin (11:01:22 5/03/2007)
гы, а це идея
fixin (11:01:40 5/03/2007)
только как компилятор пропустит X.Print() если X - неопределенного класа
fixin (11:02:40 5/03/2007)
надо просто собрать реализацию классов в виде DLL а в своем проекте использовать хедер с описаниями - в результате в твою прогу вкомпилируются только вызовы классов - а реализация классов - сами методы - будут доступны динамически
не, облом.... ты предполагаешь что библиотека цельная, а мне надо каждый класс в отдельный юнит
fixin (11:02:43 5/03/2007)
секешь разницу?
ООП кодер (11:06:33 5/03/2007)
а у тебя ограничение на количество DLL?
ООП кодер (11:06:51 5/03/2007)
сделай по отдельной DLL на класс
ООП кодер (11:07:49 5/03/2007)
только с зависимостями будет труба - то есть твоя прога вызывает олин класс - тот в свою очередь обращается к другому и т.д.
fixin (11:08:02 5/03/2007)
вот именно суть в зависимостях
ООП кодер (11:08:06 5/03/2007)
то есть венда учитывая ее кривость умрет
fixin (11:08:20 5/03/2007)
я не хочу делать один EXE, я хочу чтобы DLL подргружалиьс по мере вызова
ООП кодер (11:08:34 5/03/2007)
нахухуа?
fixin (11:08:34 5/03/2007)
вот в 1с 80 загружаются все модули, ав 8.1. - только те что нужны
fixin (11:08:46 5/03/2007)
это вопрос не винды, а компилятора
fixin (11:09:07 5/03/2007)
чтобы не напрягать память!
ООП кодер (11:09:11 5/03/2007)
компилятор сделал ДЛЛ и умыл руки
ООП кодер (11:09:30 5/03/2007)
а потом начинается memory management на уровне ядра
fixin (11:09:31 5/03/2007)
читай выше, как компилятор должен уметь динамически загружать классы
ООП кодер (11:09:43 5/03/2007)
компилятор ничего не загружает
ООП кодер (11:09:55 5/03/2007)
загружает динамический линкер ядра венды
fixin (11:09:59 5/03/2007)
он компилирует с учетом динамической загрузки - выставляет нужные смещения
fixin (11:10:04 5/03/2007)
да я в курсе...
ООП кодер (11:10:05 5/03/2007)
он же выгружает
fixin (11:10:19 5/03/2007)
вопрос - кто из компилеров такое умеет?
ООП кодер (11:10:20 5/03/2007)
при этом образуется фрагментация памяти которая копится
fixin (11:10:43 5/03/2007)
серега, модули подгружаются по мере надобности и не выгружаются до конца программы, фрагментации нет
ООП кодер (11:10:55 5/03/2007)
смысл?
fixin (11:11:02 5/03/2007)
экономия памяти
fixin (11:11:17 5/03/2007)
например кассир может работать с 20 Мб памяти, а финменеджер - с 1 Гб
ООП кодер (11:11:28 5/03/2007)
ну делай DLL
ООП кодер (11:11:40 5/03/2007)
но это тупиковый путь
ООП кодер (11:12:01 5/03/2007)
на такой разброс надо писать отдельную прогу кассиру
fixin (11:12:05 5/03/2007)
Хорошо, вот еще вопрос, ты не ответил:
только как компилятор пропустит X.Print() если X - неопределенного класа
fixin (11:12:16 5/03/2007)
в 1с не пишется отдельная прога касиру
fixin (11:12:25 5/03/2007)
и здесь не нужна
ООП кодер (11:12:35 5/03/2007)
1С не работает на 20M даже для кассира
fixin (11:12:37 5/03/2007)
есть базовый класс аппликатион, форма кассира и т.п.
fixin (11:12:46 5/03/2007)
ну дык я ж не 1С пишу, а альтернативу
fixin (11:12:54 5/03/2007)
Хорошо, вот еще вопрос, ты не ответил:
только как компилятор пропустит X.Print() если X - неопределенного класа
ООП кодер (11:13:09 5/03/2007)
пошлет нахуй
fixin (11:13:23 5/03/2007)
вот и я про то же, а ведь это легко обыграть - я написал как
fixin (11:13:34 5/03/2007)
то бишь такие выражения можно не интерпретировать, а компилировать
fixin (11:13:41 5/03/2007)
что, никто не догадался что ли?
fixin (11:13:45 5/03/2007)
или очередной велосипед
ООП кодер (11:14:01 5/03/2007)
просто железо в наши дни стоит копейки
fixin (11:14:21 5/03/2007)
серега, не еби мозги с железом.. если бы было так, в 8.1 не сделали загрузку модулей по требованию
ООП кодер (11:15:00 5/03/2007)
и твои изъебы не нужны никому - потому как конкурент который не будет ебать мозги разделением классов на DLL а сфокусируется на удобстве юзера и скорости разработки выиграеи
ООП кодер (11:15:19 5/03/2007)
модуль - это не каждый класс в отдельной либе
fixin (11:15:29 5/03/2007)
ООП кодер, это не изъебы, это поиск эффективного способа программирования
ООП кодер (11:15:56 5/03/2007)
это людм напрягли мозги и разложили по кучкам те функции, которые нужны в кажлом конкретном случае
fixin (11:16:34 5/03/2007)
да ты темен в 8.1., там подружаются модули по требованию, ничего не разлагается...
fixin (11:16:39 5/03/2007)
автоматически
fixin (11:16:55 5/03/2007)
что такое QT, еще вопрос
ООП кодер (11:17:02 5/03/2007)
DLL всегда подгружается автоматически
fixin (11:17:05 5/03/2007)
какая то либа, одинаковая для вынь и линуха
fixin (11:17:32 5/03/2007)
ну я надеюсь ты понял, о чем я веду речь, так вот видимо это новое слово в програмировании, по карйней мере то что x.print() можно компилировать
fixin (11:17:38 5/03/2007)
а не интерпретировать
fixin (11:17:49 5/03/2007)
так что мое имя впишут рядом с бойсом и кодом
fixin (11:17:50 5/03/2007)
гыгыгы
fixin (11:17:59 5/03/2007)
рядом с кнутом т.е.
fixin (11:18:01 5/03/2007)
гыгыгы
ООП кодер (11:18:09 5/03/2007)
хитрость в том что уложив в оодну ДЛЛ все что нужно для модуля когда ты вызываешт скажем функцию кассы - у тебя вгружается одна DLL и никаких зависимостей не надо
fixin (11:18:36 5/03/2007)
== хитрость в том что уложив в оодну ДЛЛ все что нужно для модуля когда ты вызываешт скажем функцию кассы - у тебя вгружается одна DLL и никаких зависимостей не надо
В таком случае если ты поменял код формы, тебе нужно перекомпилировать весь проет
fixin (11:18:38 5/03/2007)
проект
ООП кодер (11:18:49 5/03/2007)
QT для программера монопенисуальна в винже и никсах
fixin (11:19:01 5/03/2007)
QT - это к дельфи или к С++
fixin (11:19:03 5/03/2007)
???
ООП кодер (11:19:16 5/03/2007)
это к чему угодно но сама она на C++
ООП кодер (11:19:34 5/03/2007)
4500 евро за рабочее место разработчика - это так, к слову
ООП кодер (11:19:47 5/03/2007)
если хочешь Qt прогу продавать
fixin (11:19:49 5/03/2007)
можно конечно весь код сделать в виде одной DLL а exe файл так:
A=New Class MainDLL::Application
A.Init();
fixin (11:19:57 5/03/2007)
но тогда перекомпилировать все придется
fixin (11:20:04 5/03/2007)
и вопрос с X.Print() еще нужно решить
fixin (11:20:22 5/03/2007)
окуеть, а со свободным кодом нет?
ООП кодер (11:20:59 5/03/2007)
все почти проги со свободным кодом GPL
fixin (11:21:18 5/03/2007)
= все почти проги со свободным кодом GPL
а причем тогда 4500 баксов?
ООП кодер (11:21:28 5/03/2007)
то есть программишь на их основе - значит обязан свой код отдать задаром
fixin (11:21:38 5/03/2007)
а причем тогда 4500 баксов?
ООП кодер (11:21:38 5/03/2007)
на QT тоже самое
fixin (11:21:41 5/03/2007)
а причем тогда 4500 баксов?
ООП кодер (11:22:08 5/03/2007)
просто двойная лицензия - если ты пишешь бесплатный софт - берешь беспоатную Qt за 0 баксов
fixin (11:22:18 5/03/2007)
ну дык я бесплатный пишу
fixin (11:22:25 5/03/2007)
а причем тогда 4500 баксов?
ООП кодер (11:22:31 5/03/2007)
тогда бери халявный Qt
fixin (11:22:58 5/03/2007)
это библиотека или визуальная среда, это че?
fixin (11:23:45 5/03/2007)
хорошо, а препроцессором я могу вытащить все x.print() и заменить их на соответствие адресов?
ООП кодер (11:24:38 5/03/2007)
адреса уже 100 лет как динамические
fixin (11:24:43 5/03/2007)
мне интересно, а кому платить 4500, если не бесплатный софт???
fixin (11:24:50 5/03/2007)
(так из любопытцтва)
fixin (11:25:07 5/03/2007)
бля, серега, речь о том, чтобы x.print() проходил компиляцию
ООП кодер (11:25:11 5/03/2007)
есть указатели на классы и функции
fixin (11:25:13 5/03/2007)
я тебе выслал, как это делается
fixin (11:25:31 5/03/2007)
хорошо, как мне реализовать базовый класс, чтобы x.print() проходило
ООП кодер (11:25:32 5/03/2007)
они могут указывать на неопределенный класс ибо они - указатели
fixin (11:25:37 5/03/2007)
может через перегрузку операции .
fixin (11:25:42 5/03/2007)
в С++?
fixin (11:25:56 5/03/2007)
я в курсе, давай конкретно о x.print()
ООП кодер (11:26:11 5/03/2007)
но вот если у того класса куда указывает твой указатель не окажется метода print - писец твое проге и BSOD
fixin (11:26:59 5/03/2007)
читай еще раз - на этом месте затычка NoMethod
fixin (11:27:12 5/03/2007)
или тебе стереотипы мешают
fixin (11:27:16 5/03/2007)
еще раз кину
fixin (11:27:21 5/03/2007)
Вопрос по вызовам методов.
Если программист пишет в коде:
Y="Print";
X[Y]();
То понятно, что на этапе компиляции мы не можем определить, какой метод объекта X хочет вызвать программист, и должны искать соответствие по таблице методов. Единственное, в этой точке кода мы можем сделать хеширование, чтобы проверять, если в очередной раз название требуемого метода соответствует предыдущему, не искать, а выдавать готовый метод (например, в циклах).
Но такая формулировка встречается очень редко.
Обычно программист пишет: X.Print();
Тогда можно завести глобальный двумерный массив, где перечислены все методы (Print, Copy, Paste, Run и т.д….) для всех классов.
Каждый экземпляр класса (например в Delphy) обычно содержит информацию о своем типе, поэтому можно обратиться к этому двумерному массиву и определить, по какому адресу расположен нужный метод у нужного объекта.
Если метода нет, можно в этой двумерной таблице проставлять ссылку на метод NoMethod соответствующего класса - метод, который обрабатывает случай, когда запрашивают метод, которого нет (чтобы не вводить дополнительную проверку, существует ли сооветствующий метод у класса).
fixin (11:27:36 5/03/2007)
Тогда можно завести глобальный двумерный массив, где перечислены все методы (Print, Copy, Paste, Run и т.д….) для всех классов.
fixin (11:27:40 5/03/2007)
секешь?
fixin (11:28:53 5/03/2007)
то бишь вместо x.print("Hello") компилятор должен вставлять
ClassesMethods[GetTypeOfObject(X)][CONST_METHOD_PRINT]("Hello")
fixin (11:29:25 5/03/2007)
GetTypeOfObject(X) - номер класса в сборке
fixin (11:29:41 5/03/2007)
CONST_METHOD_PRINT - порядковый номер метода
fixin (11:29:49 5/03/2007)
ClassesMethods - двумерный массив
ООП кодер (11:37:15 5/03/2007)
на самом деле для финансово-бухгалтерско-торгового софта это нах не надо
ООП кодер (11:37:39 5/03/2007)
на рабочие места - тонкий клиент, вся функциональность - на сервер приложений
fixin (11:38:32 5/03/2007)
ну это твое имхо
fixin (11:38:47 5/03/2007)
в навижне например все на клиенте, так что не гони
fixin (11:38:56 5/03/2007)
и ничего, все работает
fixin (11:38:58 5/03/2007)
даже без СКЛ
fixin (11:38:59 5/03/2007)
гыгыгы
ООП кодер (11:39:08 5/03/2007)
поэтому навижн как был гуано так им и остался
ООП кодер (11:39:18 5/03/2007)
8-ка уже трехуровневая
fixin (11:39:25 5/03/2007)
для Торговли и склада подошел бы и навижн
fixin (11:39:34 5/03/2007)
не лечи меня про трехуровенвость 8-ки
fixin (11:39:36 5/03/2007)
гыгыгы...
fixin (11:39:38 5/03/2007)
ООП кодер (11:40:04 5/03/2007)
единственное что пока не реализовано - это географическое разделение 3-х уровневых серверов
fixin (11:40:06 5/03/2007)
вот акса видимо трехуровневая, тк. сама определяет, что на клиенте выполнять, что на сервере, а 1с это надо указывать
ООП кодер (11:40:53 5/03/2007)
скажем есть у тебя сеть магазинов - и надо оперировать с одной стороны каждым магазином с другой стороны консолидировать инфу для планирования и фин. отчетности
ООП кодер (11:41:34 5/03/2007)
вот это по человечески ни одна существующая система делать не умеет
fixin (11:41:56 5/03/2007)
УРБД?
ООП кодер (11:42:13 5/03/2007)
не поможет
ООП кодер (11:43:20 5/03/2007)
это именно система должна делать - с одной стороны сохранять максимальную автономность каждого бизнес-юнита - то есть магазин должен работать даже если канал с центральным офисом умер
ООП кодер (11:43:42 5/03/2007)
с другой продажи должны максимально оперативно в этот центр передаваться
fixin (11:43:45 5/03/2007)
почему УРБД не поможет , не гони
fixin (11:43:54 5/03/2007)
Ставь Обмен с частотой 10 минут
fixin (11:43:59 5/03/2007)
и все будет заебись
ООП кодер (11:44:10 5/03/2007)
а если канал упал,
ООП кодер (11:44:12 5/03/2007)
?
fixin (11:44:26 5/03/2007)
а если канал упал, то они будут раздельно работать до встатия кнала
ООП кодер (11:44:35 5/03/2007)
а когда встал?
fixin (11:44:37 5/03/2007)
типо если канал упал, то ты по другому что-то можешь сделать
fixin (11:44:48 5/03/2007)
произойдет обмен данными и все будет опять заебись
fixin (11:45:12 5/03/2007)
например, если не было обмена более 5 минут, запретить операм заводить новые товары
fixin (11:45:18 5/03/2007)
и все, никаких дублей сверх обычного
ООП кодер (11:45:19 5/03/2007)
ага - там пара перцев что-то в одной записи ковырнули, тут тоже ковырнули - кнала нет, локов нет
ООП кодер (11:45:27 5/03/2007)
потом всему п-ц
fixin (11:45:32 5/03/2007)
а надо делать так, чтобы не ковыряли
fixin (11:45:43 5/03/2007)
как это делать - поищи по слову коллизия на мисте
ООП кодер (11:45:55 5/03/2007)
ну это то как работают существующие системы
fixin (11:46:10 5/03/2007)
или вот - если не было обмена более 5 минут, разрешить работать только филиалу или только центру, секешь?
fixin (11:46:20 5/03/2007)
= ну это то как работают существующие системы
не оправдывай кривые руки...
fixin (11:46:25 5/03/2007)
если не было обмена более 5 минут, разрешить работать только филиалу или только центру, секешь?
ООП кодер (11:46:32 5/03/2007)
не катит
fixin (11:46:33 5/03/2007)
по документам филиала
fixin (11:46:39 5/03/2007)
катит и еще как!
fixin (11:46:43 5/03/2007)
обоснуй
ООП кодер (11:46:59 5/03/2007)
там простой - бабло, тут простой- бабло
fixin (11:47:23 5/03/2007)
бля, никакого простоя
fixin (11:47:34 5/03/2007)
дык по любому если у тя канал упал, по другому ты и не сделаешь
fixin (11:47:41 5/03/2007)
понимаешь, по другому - никак!
fixin (11:47:56 5/03/2007)
по другому - никак! по другому - никак! по другому - никак! по другому - никак! по другому - никак!
fixin (11:48:14 5/03/2007)
нужно просто грамотно расписать регламент работы юзверей в случае обрыва канала
fixin (11:48:32 5/03/2007)
например, юзвери в филиале могут выписывать товарные доки по -прежнему, а в центре их не могут править
ООП кодер (11:48:53 5/03/2007)
нужно разделение стратегических и тактических операций - мозгом, а не УРБД
fixin (11:49:07 5/03/2007)
нужно разделение стратегических и тактических операций - мозгом, а не УРБД - конечно, а по другому и не сделаешь....
fixin (11:49:12 5/03/2007)
так что УРБД рулит
ООП кодер (11:49:12 5/03/2007)
а этого никто не сдела еще - попытки были но очень дорого
fixin (11:49:26 5/03/2007)
вот и я тебе говорю - такое в принципе невозможно
ООП кодер (11:49:48 5/03/2007)
возможно но на западе это не надо - там хорошие каналы
fixin (11:49:54 5/03/2007)
хотя этот механизм называется - разрешение колизий.
можешь посадить опера и он будет решать, чьи изменения важнее
ООП кодер (11:50:16 5/03/2007)
так все и мыслят - потому как кругом программеры
ООП кодер (11:50:25 5/03/2007)
они разрешают коллизии
fixin (11:50:32 5/03/2007)
ладно, тут у тебя комплекс... лень спорить..
ООП кодер (11:50:58 5/03/2007)
а надо не коллизии разрешать на уровне байтов - а решать бизнес-процесс, а потом программировать модель
fixin (11:51:23 5/03/2007)
да ну, хуйня, из пушки по воробьям, проще регламент автономной работы расписать
fixin (11:51:24 5/03/2007)
не гони
ООП кодер (11:52:11 5/03/2007)
ну батенька вот поэтому я пользуюсь нокией 8800 Scirocco а не 3110
fixin (11:52:46 5/03/2007)
fixin (11:52:47 5/03/2007)
угу
fixin (11:53:04 5/03/2007)
так что насчет x.Print() - это действительно новое слово в компиляции?
ООП кодер (11:53:20 5/03/2007)
потому как программеров у нас много которые хорошо лабают на С, паскале-дельфях и прочем - а бизнес-архитекторов мало
ООП кодер (11:53:32 5/03/2007)
да есть там говорю указатели
fixin (11:53:33 5/03/2007)
воспринял это как понты
fixin (11:53:37 5/03/2007)
понтуйся-понтуйся
fixin (11:53:44 5/03/2007)
да есть там говорю указатели - пиздеж
ООП кодер (11:53:52 5/03/2007)
х - не класс а указатель на
fixin (11:54:11 5/03/2007)
x - объект, наследуемый от Basic
как организовать вызов x.print(), чтобы компилер не ругнулся
fixin (11:54:27 5/03/2007)
x - указатель, что дальше?
fixin (11:55:03 5/03/2007)
мне нужно вызвать (X as Comlex).Print() только чтобы as делалось неявно
fixin (11:55:17 5/03/2007)
(X as X.GetType()).Pritn()
ООП кодер (11:56:29 5/03/2007)
x - указатель
ООП кодер (11:56:51 5/03/2007)
указал с помощью х на комплексный у
ООП кодер (11:56:57 5/03/2007)
вызвал
fixin (11:57:23 5/03/2007)
ран-тайм
fixin (11:57:32 5/03/2007)
(X as X.GetType()).Pritn()
fixin (11:57:36 5/03/2007)
секешь?
ООП кодер (11:57:49 5/03/2007)
что такое Х?
fixin (11:58:06 5/03/2007)
это объект наследуемый от Basic
fixin (11:58:16 5/03/2007)
наприер complex, у comlex есть метод Print
ООП кодер (11:58:21 5/03/2007)
в рантайме нет наследуемых объектов
fixin (11:58:33 5/03/2007)
не, батенька, ты не понял
ООП кодер (11:58:36 5/03/2007)
в рантайме объект - это уже КОНКРЕТНЫЙ объект
ООП кодер (11:59:02 5/03/2007)
он должен быть уже СОЗДАН - иметь свое место в памяти , набор данных и процедур
fixin (11:59:04 5/03/2007)
comlex наследует от basic
second наследует от basic
у basic и second нет метода print, у comlex есть
fixin (11:59:13 5/03/2007)
x - это или complex или second
fixin (11:59:34 5/03/2007)
function test(X) {
X.print();
}
fixin (11:59:44 5/03/2007)
function test(X:basic) {
X.print();
}
fixin (11:59:50 5/03/2007)
вот так.
ООП кодер (12:00:08 5/03/2007)
какую то ботву ты несешь
fixin (12:00:17 5/03/2007)
можно конечно так:
function test(X:basic) {
X.callmethod("print", "Hello");
}
fixin (12:00:36 5/03/2007)
но мне надо
function test(X:basic) {
X.callmethod("Hello");
}
опять стереотипы мешают?
fixin (12:00:41 5/03/2007)
почему же ботву, обоснуй
ООП кодер (12:01:16 5/03/2007)
ты путаешь описание объекта в проге и конкрнетную инстанцию объекта в рантайме
fixin (12:01:30 5/03/2007)
пардон мне надо
function test(X:basic) {
X.callmethod("Hello");
}
fixin (12:01:35 5/03/2007)
да не хуя я не путаю
fixin (12:01:40 5/03/2007)
вот смотри, еще раз:
fixin (12:02:47 5/03/2007)
function test(X:basic) {
return X.print("Hello");
}
a=new Complex; //print есть
b=new Complex; //printа нет
r=print(a); //вернется true
r=print(b); //Вернется false
ООП кодер (12:03:23 5/03/2007)
если принта нет - вернется BSOD
fixin (12:03:37 5/03/2007)
дык такой код компилер не пропутит
fixin (12:03:43 5/03/2007)
ведь у басика нету print
fixin (12:03:49 5/03/2007)
понимаешь, а надо чтобы пропустил
fixin (12:04:00 5/03/2007)
и если метода нет, вызвался nomethod, сча напишу
ООП кодер (12:04:06 5/03/2007)
с указателями и плясками с бубном пропустит
ООП кодер (12:04:31 5/03/2007)
но эти шаманства специально требуют знаний - чтобы шаман знал что и зачем он делает
fixin (12:04:42 5/03/2007)
не понтуйся
ООП кодер (12:05:18 5/03/2007)
потому как если вдруг такой гений передаст запрос на принт классу, у которого принта нет в надежде получит false то будет BSOD
fixin (12:05:37 5/03/2007)
class Printable:Basic {
function Print(Msg) { ... ; return true;}
function NoMethod() {return false;}
}
class NoPrintable:Basic {
function Run() {}
}
function test(X:Basic) {
return X.print("Hello");
}
a=new Printable; //print есть
b=new NoPrintable; //printа нет
r1=print(a); //вернется true
r2=print(b); //вернется false
fixin (12:06:11 5/03/2007)
бля, вот тебе пример, а в самом начале я тебе написал, как разруливать компилеру такую ситуацию.
совсем мозги застыли?
fixin (12:06:51 5/03/2007)
class Printable:Basic {
function Print(Msg) { ... ; return true;}
function NoMethod() {return false;}
}
class NoPrintable:Basic {
function Run() {}
}
function test(X:Basic) {
return X.print("Hello");
}
a=new Printable; //print есть
b=new NoPrintable; //printа нет
r1=test(a); //вернется true
r2=test(b); //вернется false
fixin (12:06:56 5/03/2007)
вот так точнее
fixin (12:06:58 5/03/2007)
ООП кодер (12:07:02 5/03/2007)
просто последнее время заебали кривые глючные проги которые валятся и трут ценное инфо
ООП кодер (12:07:30 5/03/2007)
так что лучше уж пусть компилер очевидные потенциальные плюшки рубит на корню
ООП кодер (12:08:00 5/03/2007)
программят недучки-индусы за копейки
ООП кодер (12:08:34 5/03/2007)
все софтовые гиганты набирают их сотнями и сидят они в каком-нибудь бомбее и кодят...
ООП кодер (12:09:11 5/03/2007)
и так все глючит - а ты еще со своим "новым словом" в компиляции хочешь еще глюкавость повысить
fixin (12:09:50 5/03/2007)
хахаха, у меня был один знакомый такой, он стаким же жаром доказывал, что дискотеки - плохо
fixin (12:09:51 5/03/2007)
fixin (12:10:01 5/03/2007)
бля, все оле построено на нетипизированных объектах
ООП кодер (12:10:02 5/03/2007)
уж поверь не потому оно закрыто компилятором, что парни писавшие компилятор не знали как это сделать - а потому что некоторые вещи лучше закрыть
ООП кодер (12:10:12 5/03/2007)
дискотеки не выдерживаю
fixin (12:10:15 5/03/2007)
1с сделали интертрепатор, потому что не догнали до этого метода
fixin (12:10:24 5/03/2007)
а ты меня тут лечишь, гыгыгы
fixin (12:10:45 5/03/2007)
== уж поверь не потому оно закрыто компилятором, что парни писавшие компилятор не знали как это сделать - а потому что некоторые вещи лучше закрыть
не верю, назови тогда такой раздел программирования, где это описывается
ООП кодер (12:10:47 5/03/2007)
1с интерпретаор позаволяет юбыстро в онлайне програмить и отлаживать - а железо купят
fixin (12:10:51 5/03/2007)
пиздеж чистой водцы
fixin (12:11:19 5/03/2007)
гыгыгы.... такой компилер был бы не менее быстрым, тем более что 1с все равно нужно загружать конфу изменненную - суть компиляция.
fixin (12:11:30 5/03/2007)
да батенька, видимо вы заучились.
ООП кодер (12:11:53 5/03/2007)
еще нет
ООП кодер (12:12:04 5/03/2007)
хотя чую надо дисер писать
fixin (12:12:07 5/03/2007)
тогда признай что это новое слово и все будет заебись
fixin (12:12:08 5/03/2007)
ООП кодер (12:12:50 5/03/2007)
ты давай прогу пиши с этим новым словом
ООП кодер (12:13:15 5/03/2007)
а то давно не ржалЪ
fixin (12:13:30 5/03/2007)
дык надо понять сначала, как написать.
ООП кодер (12:13:43 5/03/2007)
хочется увидеть венду подыхающую в судорогах тысяч BSOD'ов
fixin (12:13:43 5/03/2007)
мдя, серега, по существу тебе сказать нечего, пошел понтоваться
fixin (12:13:44 5/03/2007)
гыгыгы
fixin (12:13:58 5/03/2007)
посмотри на ОЛЕ - там не подыхает
fixin (12:14:37 5/03/2007)
кстати, я нашу дискусию под другим именем (не твоим) опубликую, интересная получилась.
fixin (12:14:39 5/03/2007)
спасибо.
fixin (10:50:34 5/03/2007)
по дельфи силен?
ООП кодер (10:50:45 5/03/2007)
только по С
fixin (10:50:52 5/03/2007)
С++ ?
ООП кодер (10:51:12 5/03/2007)
С С++ - но не шарп
fixin (10:51:45 5/03/2007)
тогда вопрос, может в курсах
fixin (10:51:46 5/03/2007)
Известно, что в Windows можно использовать DLL, т.е. откомпилировать некий набор функций отдельно и сохранить его в виде DLL, чтобы по мере надобности загрузить в память.
В связи с этим вопрос - а можно ли откомпилировать отдельно класс (по аналогии с DLL), чтобы тоже подгружать его в память по мере необходимости:
1. Возможно ли это в принципе.
2. Возможно ли это, если есть все исходники базовых классов.
3. Возможно ли это, если базовые классы представлены только в компилированном виде.
Какой язык позволяет такую раздельную компиляцию? С теоретической точки зрения никаких проблем не вижу. Интерпретаторы не предлагать, речь именно о компиляторах.
В принципе, для такой динамической загрузке в память нужно всего лишь заменить после загрузки в память адреса вызовов базовых функций реальными адресами, где находятся эти функциями, или даже проще, нужно просто заменить адреса базовых классов на фактические адреса этих базовых адресов в памяти, а функции вызывать по относительной ссылке - на каком смещении от начала кода класса находится эта функция (смещение можно определить еще при компиляции из откомпилированного модуля базового класса). Все реально, вопрос в том, есть ли такое?
fixin (10:51:52 5/03/2007)
Вопрос по IDispatch.
Если у меня в коде встречается вызов
For i=1 to 100
X.Print();
Next i
То в интерфейсе IDispatch название метода Print будет искаться в таблице методов каждый раз в 100 проходах цикла или только при первом обращении?
И еще вопрос по IDispatch - если X обладает таким интерфейсом, то смогу я записать X.Print() или мне все же придется извращаться с X.CallIDispatch("Print", …)
fixin (10:51:56 5/03/2007)
Вопрос по вызовам методов.
Если программист пишет в коде:
Y="Print";
X[Y]();
То понятно, что на этапе компиляции мы не можем определить, какой метод объекта X хочет вызвать программист, и должны искать соответствие по таблице методов. Единственное, в этой точке кода мы можем сделать хеширование, чтобы проверять, если в очередной раз название требуемого метода соответствует предыдущему, не искать, а выдавать готовый метод (например, в циклах).
Но такая формулировка встречается очень редко.
Обычно программист пишет: X.Print();
Тогда можно завести глобальный двумерный массив, где перечислены все методы (Print, Copy, Paste, Run и т.д….) для всех классов.
Каждый экземпляр класса (например в Delphy) обычно содержит информацию о своем типе, поэтому можно обратиться к этому двумерному массиву и определить, по какому адресу расположен нужный метод у нужного объекта.
Если метода нет, можно в этой двумерной таблице проставлять ссылку на метод NoMethod соответствующего класса - метод, который обрабатывает случай, когда запрашивают метод, которого нет (чтобы не вводить дополнительную проверку, существует ли сооветствующий метод у класса).
ООП кодер (10:52:41 5/03/2007)
это скорее вопрос по нутру венды
fixin (10:52:58 5/03/2007)
нет, это вопрос о компиляторе
fixin (10:53:02 5/03/2007)
хочу такой язык
fixin (10:53:15 5/03/2007)
винда позволяет грузить DLL, значит такое возможно
fixin (10:53:21 5/03/2007)
потому что класс - суть набор функций
ООП кодер (10:55:37 5/03/2007)
ну вообще-то MFC так и сделано - библиотека классов скомпилена в отдельную DLL-ку и подгружается
ООП кодер (10:56:43 5/03/2007)
в принципе если взять исходники MFC - чего-то в них поковырять в реализации не меняя интерфейс и собрать - то можно подменить одну длл-ку другой с другой реализацией классов и все будет супер
ООП кодер (10:57:37 5/03/2007)
все виндовые движки тем - которые не просто цвет меняют а именно вид контролов - скажем интерфейс венды а-лф макос - именно на этом и построены
fixin (10:57:56 5/03/2007)
как называется технология???
ООП кодер (10:58:03 5/03/2007)
да ХЗ
ООП кодер (10:58:15 5/03/2007)
DLL оно и в африке DLL
fixin (10:58:36 5/03/2007)
мдя, это не ответ...
fixin (10:58:47 5/03/2007)
DLL - это набор функций, а я про набор классов
ООП кодер (10:58:59 5/03/2007)
а не по?
ООП кодер (10:59:10 5/03/2007)
функции, классы - один хуй
fixin (10:59:33 5/03/2007)
короче, серега, ты не в курсе.
fixin (10:59:34 5/03/2007)
ок
ООП кодер (11:00:43 5/03/2007)
надо просто собрать реализацию классов в виде DLL а в своем проекте использовать хедер с описаниями - в результате в твою прогу вкомпилируются только вызовы классов - а реализация классов - сами методы - будут доступны динамически
fixin (11:01:22 5/03/2007)
гы, а це идея
fixin (11:01:40 5/03/2007)
только как компилятор пропустит X.Print() если X - неопределенного класа
fixin (11:02:40 5/03/2007)
надо просто собрать реализацию классов в виде DLL а в своем проекте использовать хедер с описаниями - в результате в твою прогу вкомпилируются только вызовы классов - а реализация классов - сами методы - будут доступны динамически
не, облом.... ты предполагаешь что библиотека цельная, а мне надо каждый класс в отдельный юнит
fixin (11:02:43 5/03/2007)
секешь разницу?
ООП кодер (11:06:33 5/03/2007)
а у тебя ограничение на количество DLL?
ООП кодер (11:06:51 5/03/2007)
сделай по отдельной DLL на класс
ООП кодер (11:07:49 5/03/2007)
только с зависимостями будет труба - то есть твоя прога вызывает олин класс - тот в свою очередь обращается к другому и т.д.
fixin (11:08:02 5/03/2007)
вот именно суть в зависимостях
ООП кодер (11:08:06 5/03/2007)
то есть венда учитывая ее кривость умрет
fixin (11:08:20 5/03/2007)
я не хочу делать один EXE, я хочу чтобы DLL подргружалиьс по мере вызова
ООП кодер (11:08:34 5/03/2007)
нахухуа?
fixin (11:08:34 5/03/2007)
вот в 1с 80 загружаются все модули, ав 8.1. - только те что нужны
fixin (11:08:46 5/03/2007)
это вопрос не винды, а компилятора
fixin (11:09:07 5/03/2007)
чтобы не напрягать память!
ООП кодер (11:09:11 5/03/2007)
компилятор сделал ДЛЛ и умыл руки
ООП кодер (11:09:30 5/03/2007)
а потом начинается memory management на уровне ядра
fixin (11:09:31 5/03/2007)
читай выше, как компилятор должен уметь динамически загружать классы
ООП кодер (11:09:43 5/03/2007)
компилятор ничего не загружает
ООП кодер (11:09:55 5/03/2007)
загружает динамический линкер ядра венды
fixin (11:09:59 5/03/2007)
он компилирует с учетом динамической загрузки - выставляет нужные смещения
fixin (11:10:04 5/03/2007)
да я в курсе...
ООП кодер (11:10:05 5/03/2007)
он же выгружает
fixin (11:10:19 5/03/2007)
вопрос - кто из компилеров такое умеет?
ООП кодер (11:10:20 5/03/2007)
при этом образуется фрагментация памяти которая копится
fixin (11:10:43 5/03/2007)
серега, модули подгружаются по мере надобности и не выгружаются до конца программы, фрагментации нет
ООП кодер (11:10:55 5/03/2007)
смысл?
fixin (11:11:02 5/03/2007)
экономия памяти
fixin (11:11:17 5/03/2007)
например кассир может работать с 20 Мб памяти, а финменеджер - с 1 Гб
ООП кодер (11:11:28 5/03/2007)
ну делай DLL
ООП кодер (11:11:40 5/03/2007)
но это тупиковый путь
ООП кодер (11:12:01 5/03/2007)
на такой разброс надо писать отдельную прогу кассиру
fixin (11:12:05 5/03/2007)
Хорошо, вот еще вопрос, ты не ответил:
только как компилятор пропустит X.Print() если X - неопределенного класа
fixin (11:12:16 5/03/2007)
в 1с не пишется отдельная прога касиру
fixin (11:12:25 5/03/2007)
и здесь не нужна
ООП кодер (11:12:35 5/03/2007)
1С не работает на 20M даже для кассира
fixin (11:12:37 5/03/2007)
есть базовый класс аппликатион, форма кассира и т.п.
fixin (11:12:46 5/03/2007)
ну дык я ж не 1С пишу, а альтернативу
fixin (11:12:54 5/03/2007)
Хорошо, вот еще вопрос, ты не ответил:
только как компилятор пропустит X.Print() если X - неопределенного класа
ООП кодер (11:13:09 5/03/2007)
пошлет нахуй
fixin (11:13:23 5/03/2007)
вот и я про то же, а ведь это легко обыграть - я написал как
fixin (11:13:34 5/03/2007)
то бишь такие выражения можно не интерпретировать, а компилировать
fixin (11:13:41 5/03/2007)
что, никто не догадался что ли?
fixin (11:13:45 5/03/2007)
или очередной велосипед
ООП кодер (11:14:01 5/03/2007)
просто железо в наши дни стоит копейки
fixin (11:14:21 5/03/2007)
серега, не еби мозги с железом.. если бы было так, в 8.1 не сделали загрузку модулей по требованию
ООП кодер (11:15:00 5/03/2007)
и твои изъебы не нужны никому - потому как конкурент который не будет ебать мозги разделением классов на DLL а сфокусируется на удобстве юзера и скорости разработки выиграеи
ООП кодер (11:15:19 5/03/2007)
модуль - это не каждый класс в отдельной либе
fixin (11:15:29 5/03/2007)
ООП кодер, это не изъебы, это поиск эффективного способа программирования
ООП кодер (11:15:56 5/03/2007)
это людм напрягли мозги и разложили по кучкам те функции, которые нужны в кажлом конкретном случае
fixin (11:16:34 5/03/2007)
да ты темен в 8.1., там подружаются модули по требованию, ничего не разлагается...
fixin (11:16:39 5/03/2007)
автоматически
fixin (11:16:55 5/03/2007)
что такое QT, еще вопрос
ООП кодер (11:17:02 5/03/2007)
DLL всегда подгружается автоматически
fixin (11:17:05 5/03/2007)
какая то либа, одинаковая для вынь и линуха
fixin (11:17:32 5/03/2007)
ну я надеюсь ты понял, о чем я веду речь, так вот видимо это новое слово в програмировании, по карйней мере то что x.print() можно компилировать
fixin (11:17:38 5/03/2007)
а не интерпретировать
fixin (11:17:49 5/03/2007)
так что мое имя впишут рядом с бойсом и кодом
fixin (11:17:50 5/03/2007)
гыгыгы
fixin (11:17:59 5/03/2007)
рядом с кнутом т.е.
fixin (11:18:01 5/03/2007)
гыгыгы
ООП кодер (11:18:09 5/03/2007)
хитрость в том что уложив в оодну ДЛЛ все что нужно для модуля когда ты вызываешт скажем функцию кассы - у тебя вгружается одна DLL и никаких зависимостей не надо
fixin (11:18:36 5/03/2007)
== хитрость в том что уложив в оодну ДЛЛ все что нужно для модуля когда ты вызываешт скажем функцию кассы - у тебя вгружается одна DLL и никаких зависимостей не надо
В таком случае если ты поменял код формы, тебе нужно перекомпилировать весь проет
fixin (11:18:38 5/03/2007)
проект
ООП кодер (11:18:49 5/03/2007)
QT для программера монопенисуальна в винже и никсах
fixin (11:19:01 5/03/2007)
QT - это к дельфи или к С++
fixin (11:19:03 5/03/2007)
???
ООП кодер (11:19:16 5/03/2007)
это к чему угодно но сама она на C++
ООП кодер (11:19:34 5/03/2007)
4500 евро за рабочее место разработчика - это так, к слову
ООП кодер (11:19:47 5/03/2007)
если хочешь Qt прогу продавать
fixin (11:19:49 5/03/2007)
можно конечно весь код сделать в виде одной DLL а exe файл так:
A=New Class MainDLL::Application
A.Init();
fixin (11:19:57 5/03/2007)
но тогда перекомпилировать все придется
fixin (11:20:04 5/03/2007)
и вопрос с X.Print() еще нужно решить
fixin (11:20:22 5/03/2007)
окуеть, а со свободным кодом нет?
ООП кодер (11:20:59 5/03/2007)
все почти проги со свободным кодом GPL
fixin (11:21:18 5/03/2007)
= все почти проги со свободным кодом GPL
а причем тогда 4500 баксов?
ООП кодер (11:21:28 5/03/2007)
то есть программишь на их основе - значит обязан свой код отдать задаром
fixin (11:21:38 5/03/2007)
а причем тогда 4500 баксов?
ООП кодер (11:21:38 5/03/2007)
на QT тоже самое
fixin (11:21:41 5/03/2007)
а причем тогда 4500 баксов?
ООП кодер (11:22:08 5/03/2007)
просто двойная лицензия - если ты пишешь бесплатный софт - берешь беспоатную Qt за 0 баксов
fixin (11:22:18 5/03/2007)
ну дык я бесплатный пишу
fixin (11:22:25 5/03/2007)
а причем тогда 4500 баксов?
ООП кодер (11:22:31 5/03/2007)
тогда бери халявный Qt
fixin (11:22:58 5/03/2007)
это библиотека или визуальная среда, это че?
fixin (11:23:45 5/03/2007)
хорошо, а препроцессором я могу вытащить все x.print() и заменить их на соответствие адресов?
ООП кодер (11:24:38 5/03/2007)
адреса уже 100 лет как динамические
fixin (11:24:43 5/03/2007)
мне интересно, а кому платить 4500, если не бесплатный софт???
fixin (11:24:50 5/03/2007)
(так из любопытцтва)
fixin (11:25:07 5/03/2007)
бля, серега, речь о том, чтобы x.print() проходил компиляцию
ООП кодер (11:25:11 5/03/2007)
есть указатели на классы и функции
fixin (11:25:13 5/03/2007)
я тебе выслал, как это делается
fixin (11:25:31 5/03/2007)
хорошо, как мне реализовать базовый класс, чтобы x.print() проходило
ООП кодер (11:25:32 5/03/2007)
они могут указывать на неопределенный класс ибо они - указатели
fixin (11:25:37 5/03/2007)
может через перегрузку операции .
fixin (11:25:42 5/03/2007)
в С++?
fixin (11:25:56 5/03/2007)
я в курсе, давай конкретно о x.print()
ООП кодер (11:26:11 5/03/2007)
но вот если у того класса куда указывает твой указатель не окажется метода print - писец твое проге и BSOD
fixin (11:26:59 5/03/2007)
читай еще раз - на этом месте затычка NoMethod
fixin (11:27:12 5/03/2007)
или тебе стереотипы мешают
fixin (11:27:16 5/03/2007)
еще раз кину
fixin (11:27:21 5/03/2007)
Вопрос по вызовам методов.
Если программист пишет в коде:
Y="Print";
X[Y]();
То понятно, что на этапе компиляции мы не можем определить, какой метод объекта X хочет вызвать программист, и должны искать соответствие по таблице методов. Единственное, в этой точке кода мы можем сделать хеширование, чтобы проверять, если в очередной раз название требуемого метода соответствует предыдущему, не искать, а выдавать готовый метод (например, в циклах).
Но такая формулировка встречается очень редко.
Обычно программист пишет: X.Print();
Тогда можно завести глобальный двумерный массив, где перечислены все методы (Print, Copy, Paste, Run и т.д….) для всех классов.
Каждый экземпляр класса (например в Delphy) обычно содержит информацию о своем типе, поэтому можно обратиться к этому двумерному массиву и определить, по какому адресу расположен нужный метод у нужного объекта.
Если метода нет, можно в этой двумерной таблице проставлять ссылку на метод NoMethod соответствующего класса - метод, который обрабатывает случай, когда запрашивают метод, которого нет (чтобы не вводить дополнительную проверку, существует ли сооветствующий метод у класса).
fixin (11:27:36 5/03/2007)
Тогда можно завести глобальный двумерный массив, где перечислены все методы (Print, Copy, Paste, Run и т.д….) для всех классов.
fixin (11:27:40 5/03/2007)
секешь?
fixin (11:28:53 5/03/2007)
то бишь вместо x.print("Hello") компилятор должен вставлять
ClassesMethods[GetTypeOfObject(X)][CONST_METHOD_PRINT]("Hello")
fixin (11:29:25 5/03/2007)
GetTypeOfObject(X) - номер класса в сборке
fixin (11:29:41 5/03/2007)
CONST_METHOD_PRINT - порядковый номер метода
fixin (11:29:49 5/03/2007)
ClassesMethods - двумерный массив
ООП кодер (11:37:15 5/03/2007)
на самом деле для финансово-бухгалтерско-торгового софта это нах не надо
ООП кодер (11:37:39 5/03/2007)
на рабочие места - тонкий клиент, вся функциональность - на сервер приложений
fixin (11:38:32 5/03/2007)
ну это твое имхо
fixin (11:38:47 5/03/2007)
в навижне например все на клиенте, так что не гони
fixin (11:38:56 5/03/2007)
и ничего, все работает
fixin (11:38:58 5/03/2007)
даже без СКЛ
fixin (11:38:59 5/03/2007)
гыгыгы
ООП кодер (11:39:08 5/03/2007)
поэтому навижн как был гуано так им и остался
ООП кодер (11:39:18 5/03/2007)
8-ка уже трехуровневая
fixin (11:39:25 5/03/2007)
для Торговли и склада подошел бы и навижн
fixin (11:39:34 5/03/2007)
не лечи меня про трехуровенвость 8-ки
fixin (11:39:36 5/03/2007)
гыгыгы...
fixin (11:39:38 5/03/2007)
ООП кодер (11:40:04 5/03/2007)
единственное что пока не реализовано - это географическое разделение 3-х уровневых серверов
fixin (11:40:06 5/03/2007)
вот акса видимо трехуровневая, тк. сама определяет, что на клиенте выполнять, что на сервере, а 1с это надо указывать
ООП кодер (11:40:53 5/03/2007)
скажем есть у тебя сеть магазинов - и надо оперировать с одной стороны каждым магазином с другой стороны консолидировать инфу для планирования и фин. отчетности
ООП кодер (11:41:34 5/03/2007)
вот это по человечески ни одна существующая система делать не умеет
fixin (11:41:56 5/03/2007)
УРБД?
ООП кодер (11:42:13 5/03/2007)
не поможет
ООП кодер (11:43:20 5/03/2007)
это именно система должна делать - с одной стороны сохранять максимальную автономность каждого бизнес-юнита - то есть магазин должен работать даже если канал с центральным офисом умер
ООП кодер (11:43:42 5/03/2007)
с другой продажи должны максимально оперативно в этот центр передаваться
fixin (11:43:45 5/03/2007)
почему УРБД не поможет , не гони
fixin (11:43:54 5/03/2007)
Ставь Обмен с частотой 10 минут
fixin (11:43:59 5/03/2007)
и все будет заебись
ООП кодер (11:44:10 5/03/2007)
а если канал упал,
ООП кодер (11:44:12 5/03/2007)
?
fixin (11:44:26 5/03/2007)
а если канал упал, то они будут раздельно работать до встатия кнала
ООП кодер (11:44:35 5/03/2007)
а когда встал?
fixin (11:44:37 5/03/2007)
типо если канал упал, то ты по другому что-то можешь сделать
fixin (11:44:48 5/03/2007)
произойдет обмен данными и все будет опять заебись
fixin (11:45:12 5/03/2007)
например, если не было обмена более 5 минут, запретить операм заводить новые товары
fixin (11:45:18 5/03/2007)
и все, никаких дублей сверх обычного
ООП кодер (11:45:19 5/03/2007)
ага - там пара перцев что-то в одной записи ковырнули, тут тоже ковырнули - кнала нет, локов нет
ООП кодер (11:45:27 5/03/2007)
потом всему п-ц
fixin (11:45:32 5/03/2007)
а надо делать так, чтобы не ковыряли
fixin (11:45:43 5/03/2007)
как это делать - поищи по слову коллизия на мисте
ООП кодер (11:45:55 5/03/2007)
ну это то как работают существующие системы
fixin (11:46:10 5/03/2007)
или вот - если не было обмена более 5 минут, разрешить работать только филиалу или только центру, секешь?
fixin (11:46:20 5/03/2007)
= ну это то как работают существующие системы
не оправдывай кривые руки...
fixin (11:46:25 5/03/2007)
если не было обмена более 5 минут, разрешить работать только филиалу или только центру, секешь?
ООП кодер (11:46:32 5/03/2007)
не катит
fixin (11:46:33 5/03/2007)
по документам филиала
fixin (11:46:39 5/03/2007)
катит и еще как!
fixin (11:46:43 5/03/2007)
обоснуй
ООП кодер (11:46:59 5/03/2007)
там простой - бабло, тут простой- бабло
fixin (11:47:23 5/03/2007)
бля, никакого простоя
fixin (11:47:34 5/03/2007)
дык по любому если у тя канал упал, по другому ты и не сделаешь
fixin (11:47:41 5/03/2007)
понимаешь, по другому - никак!
fixin (11:47:56 5/03/2007)
по другому - никак! по другому - никак! по другому - никак! по другому - никак! по другому - никак!
fixin (11:48:14 5/03/2007)
нужно просто грамотно расписать регламент работы юзверей в случае обрыва канала
fixin (11:48:32 5/03/2007)
например, юзвери в филиале могут выписывать товарные доки по -прежнему, а в центре их не могут править
ООП кодер (11:48:53 5/03/2007)
нужно разделение стратегических и тактических операций - мозгом, а не УРБД
fixin (11:49:07 5/03/2007)
нужно разделение стратегических и тактических операций - мозгом, а не УРБД - конечно, а по другому и не сделаешь....
fixin (11:49:12 5/03/2007)
так что УРБД рулит
ООП кодер (11:49:12 5/03/2007)
а этого никто не сдела еще - попытки были но очень дорого
fixin (11:49:26 5/03/2007)
вот и я тебе говорю - такое в принципе невозможно
ООП кодер (11:49:48 5/03/2007)
возможно но на западе это не надо - там хорошие каналы
fixin (11:49:54 5/03/2007)
хотя этот механизм называется - разрешение колизий.
можешь посадить опера и он будет решать, чьи изменения важнее
ООП кодер (11:50:16 5/03/2007)
так все и мыслят - потому как кругом программеры
ООП кодер (11:50:25 5/03/2007)
они разрешают коллизии
fixin (11:50:32 5/03/2007)
ладно, тут у тебя комплекс... лень спорить..
ООП кодер (11:50:58 5/03/2007)
а надо не коллизии разрешать на уровне байтов - а решать бизнес-процесс, а потом программировать модель
fixin (11:51:23 5/03/2007)
да ну, хуйня, из пушки по воробьям, проще регламент автономной работы расписать
fixin (11:51:24 5/03/2007)
не гони
ООП кодер (11:52:11 5/03/2007)
ну батенька вот поэтому я пользуюсь нокией 8800 Scirocco а не 3110
fixin (11:52:46 5/03/2007)
fixin (11:52:47 5/03/2007)
угу
fixin (11:53:04 5/03/2007)
так что насчет x.Print() - это действительно новое слово в компиляции?
ООП кодер (11:53:20 5/03/2007)
потому как программеров у нас много которые хорошо лабают на С, паскале-дельфях и прочем - а бизнес-архитекторов мало
ООП кодер (11:53:32 5/03/2007)
да есть там говорю указатели
fixin (11:53:33 5/03/2007)
воспринял это как понты
fixin (11:53:37 5/03/2007)
понтуйся-понтуйся
fixin (11:53:44 5/03/2007)
да есть там говорю указатели - пиздеж
ООП кодер (11:53:52 5/03/2007)
х - не класс а указатель на
fixin (11:54:11 5/03/2007)
x - объект, наследуемый от Basic
как организовать вызов x.print(), чтобы компилер не ругнулся
fixin (11:54:27 5/03/2007)
x - указатель, что дальше?
fixin (11:55:03 5/03/2007)
мне нужно вызвать (X as Comlex).Print() только чтобы as делалось неявно
fixin (11:55:17 5/03/2007)
(X as X.GetType()).Pritn()
ООП кодер (11:56:29 5/03/2007)
x - указатель
ООП кодер (11:56:51 5/03/2007)
указал с помощью х на комплексный у
ООП кодер (11:56:57 5/03/2007)
вызвал
fixin (11:57:23 5/03/2007)
ран-тайм
fixin (11:57:32 5/03/2007)
(X as X.GetType()).Pritn()
fixin (11:57:36 5/03/2007)
секешь?
ООП кодер (11:57:49 5/03/2007)
что такое Х?
fixin (11:58:06 5/03/2007)
это объект наследуемый от Basic
fixin (11:58:16 5/03/2007)
наприер complex, у comlex есть метод Print
ООП кодер (11:58:21 5/03/2007)
в рантайме нет наследуемых объектов
fixin (11:58:33 5/03/2007)
не, батенька, ты не понял
ООП кодер (11:58:36 5/03/2007)
в рантайме объект - это уже КОНКРЕТНЫЙ объект
ООП кодер (11:59:02 5/03/2007)
он должен быть уже СОЗДАН - иметь свое место в памяти , набор данных и процедур
fixin (11:59:04 5/03/2007)
comlex наследует от basic
second наследует от basic
у basic и second нет метода print, у comlex есть
fixin (11:59:13 5/03/2007)
x - это или complex или second
fixin (11:59:34 5/03/2007)
function test(X) {
X.print();
}
fixin (11:59:44 5/03/2007)
function test(X:basic) {
X.print();
}
fixin (11:59:50 5/03/2007)
вот так.
ООП кодер (12:00:08 5/03/2007)
какую то ботву ты несешь
fixin (12:00:17 5/03/2007)
можно конечно так:
function test(X:basic) {
X.callmethod("print", "Hello");
}
fixin (12:00:36 5/03/2007)
но мне надо
function test(X:basic) {
X.callmethod("Hello");
}
опять стереотипы мешают?
fixin (12:00:41 5/03/2007)
почему же ботву, обоснуй
ООП кодер (12:01:16 5/03/2007)
ты путаешь описание объекта в проге и конкрнетную инстанцию объекта в рантайме
fixin (12:01:30 5/03/2007)
пардон мне надо
function test(X:basic) {
X.callmethod("Hello");
}
fixin (12:01:35 5/03/2007)
да не хуя я не путаю
fixin (12:01:40 5/03/2007)
вот смотри, еще раз:
fixin (12:02:47 5/03/2007)
function test(X:basic) {
return X.print("Hello");
}
a=new Complex; //print есть
b=new Complex; //printа нет
r=print(a); //вернется true
r=print(b); //Вернется false
ООП кодер (12:03:23 5/03/2007)
если принта нет - вернется BSOD
fixin (12:03:37 5/03/2007)
дык такой код компилер не пропутит
fixin (12:03:43 5/03/2007)
ведь у басика нету print
fixin (12:03:49 5/03/2007)
понимаешь, а надо чтобы пропустил
fixin (12:04:00 5/03/2007)
и если метода нет, вызвался nomethod, сча напишу
ООП кодер (12:04:06 5/03/2007)
с указателями и плясками с бубном пропустит
ООП кодер (12:04:31 5/03/2007)
но эти шаманства специально требуют знаний - чтобы шаман знал что и зачем он делает
fixin (12:04:42 5/03/2007)
не понтуйся
ООП кодер (12:05:18 5/03/2007)
потому как если вдруг такой гений передаст запрос на принт классу, у которого принта нет в надежде получит false то будет BSOD
fixin (12:05:37 5/03/2007)
class Printable:Basic {
function Print(Msg) { ... ; return true;}
function NoMethod() {return false;}
}
class NoPrintable:Basic {
function Run() {}
}
function test(X:Basic) {
return X.print("Hello");
}
a=new Printable; //print есть
b=new NoPrintable; //printа нет
r1=print(a); //вернется true
r2=print(b); //вернется false
fixin (12:06:11 5/03/2007)
бля, вот тебе пример, а в самом начале я тебе написал, как разруливать компилеру такую ситуацию.
совсем мозги застыли?
fixin (12:06:51 5/03/2007)
class Printable:Basic {
function Print(Msg) { ... ; return true;}
function NoMethod() {return false;}
}
class NoPrintable:Basic {
function Run() {}
}
function test(X:Basic) {
return X.print("Hello");
}
a=new Printable; //print есть
b=new NoPrintable; //printа нет
r1=test(a); //вернется true
r2=test(b); //вернется false
fixin (12:06:56 5/03/2007)
вот так точнее
fixin (12:06:58 5/03/2007)
ООП кодер (12:07:02 5/03/2007)
просто последнее время заебали кривые глючные проги которые валятся и трут ценное инфо
ООП кодер (12:07:30 5/03/2007)
так что лучше уж пусть компилер очевидные потенциальные плюшки рубит на корню
ООП кодер (12:08:00 5/03/2007)
программят недучки-индусы за копейки
ООП кодер (12:08:34 5/03/2007)
все софтовые гиганты набирают их сотнями и сидят они в каком-нибудь бомбее и кодят...
ООП кодер (12:09:11 5/03/2007)
и так все глючит - а ты еще со своим "новым словом" в компиляции хочешь еще глюкавость повысить
fixin (12:09:50 5/03/2007)
хахаха, у меня был один знакомый такой, он стаким же жаром доказывал, что дискотеки - плохо
fixin (12:09:51 5/03/2007)
fixin (12:10:01 5/03/2007)
бля, все оле построено на нетипизированных объектах
ООП кодер (12:10:02 5/03/2007)
уж поверь не потому оно закрыто компилятором, что парни писавшие компилятор не знали как это сделать - а потому что некоторые вещи лучше закрыть
ООП кодер (12:10:12 5/03/2007)
дискотеки не выдерживаю
fixin (12:10:15 5/03/2007)
1с сделали интертрепатор, потому что не догнали до этого метода
fixin (12:10:24 5/03/2007)
а ты меня тут лечишь, гыгыгы
fixin (12:10:45 5/03/2007)
== уж поверь не потому оно закрыто компилятором, что парни писавшие компилятор не знали как это сделать - а потому что некоторые вещи лучше закрыть
не верю, назови тогда такой раздел программирования, где это описывается
ООП кодер (12:10:47 5/03/2007)
1с интерпретаор позаволяет юбыстро в онлайне програмить и отлаживать - а железо купят
fixin (12:10:51 5/03/2007)
пиздеж чистой водцы
fixin (12:11:19 5/03/2007)
гыгыгы.... такой компилер был бы не менее быстрым, тем более что 1с все равно нужно загружать конфу изменненную - суть компиляция.
fixin (12:11:30 5/03/2007)
да батенька, видимо вы заучились.
ООП кодер (12:11:53 5/03/2007)
еще нет
ООП кодер (12:12:04 5/03/2007)
хотя чую надо дисер писать
fixin (12:12:07 5/03/2007)
тогда признай что это новое слово и все будет заебись
fixin (12:12:08 5/03/2007)
ООП кодер (12:12:50 5/03/2007)
ты давай прогу пиши с этим новым словом
ООП кодер (12:13:15 5/03/2007)
а то давно не ржалЪ
fixin (12:13:30 5/03/2007)
дык надо понять сначала, как написать.
ООП кодер (12:13:43 5/03/2007)
хочется увидеть венду подыхающую в судорогах тысяч BSOD'ов
fixin (12:13:43 5/03/2007)
мдя, серега, по существу тебе сказать нечего, пошел понтоваться
fixin (12:13:44 5/03/2007)
гыгыгы
fixin (12:13:58 5/03/2007)
посмотри на ОЛЕ - там не подыхает
fixin (12:14:37 5/03/2007)
кстати, я нашу дискусию под другим именем (не твоим) опубликую, интересная получилась.
fixin (12:14:39 5/03/2007)
спасибо.
вверх^
к полной версии
понравилось!
в evernote