• Авторизация


Беседа с ООП кодером. 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
Комментарии (4):
dimzon541 05-03-2007-22:14 удалить
Ой не могу. JIT изобретаешь
Баррабан 05-03-2007-22:39 удалить
Ахуеть...
кто нить в двух словах скажет, про что тут написано, стока букв читать лень...
Рейган 06-03-2007-06:47 удалить
Сося, у тебя бы лучше получилось с "очень стройной бомжой" обсуждать расценку на минет. Может, за умного бы сошел.
06-03-2007-17:34 удалить
Отсося как всегда нашел начинающего программиста-школьника и типа решил себя показать умным. Ты лучше с Хуссидманом поспорь, кто круче по жизни :)

Фиксинко, это уже все твои однокурсники давно прошли. В года так 23-25 насколько я помню по своему опыту. Ну а ты только сейчас пытаешься догнать ушедший поезд.

И ты, слюнявый, будешь утверждать, что ценнее доярки?

К Юрке, в Минск, на тракторный вахтером, олух!!! Не позорь универ, тормоз!


Комментарии (4): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Беседа с ООП кодером. | fixin - Дневник fixin | Лента друзей fixin / Полная версия Добавить в друзья Страницы: раньше»