[12:50:07] <valexey > Жаба!
[12:52:36] <ilovb> написал задачку на форуме
[13:09:13] <valexey > угу
[13:11:00] <valexey > http://exler.ru/blog/item/11667/
[13:13:45] <ilovb> :)
[13:31:17] <valexey > ну, то есть я понимаю что там именование услуги само по себе древовидно небось. то есть карандаши относятся к канцтоварам например
[13:42:57] <ilovb> Дерево задано таблицей
[13:43:13] <ilovb> Родитель - > Подчиненный
[13:43:22] <ilovb> Номенклатура - > Затрата
[13:43:41] <ilovb> Стул - Спинка
[13:43:47] <ilovb> Стул - Ножка
[13:43:52] <ilovb> Ножка - Дерево
[13:44:01] <ilovb> Ножка - Лак
[13:44:10] <ilovb> Спинка - Ткань
[13:44:17] <ilovb> И т.д. и т.п.
[13:45:11] <ilovb> Имеем дерево изделия "Стул"
[13:47:31] <ilovb> Номенклатура и затрата - это одно и то же. Просто задано отношение подчинения
[13:53:39] <valexey > дык нам же данные по дереву где-то нужны. то есть нужна еще таблица с подчинением.
[13:54:22] <valexey > то есть где-то же должна быть информация о том, что у стула естьножки и прочие части тела
[13:54:40] <ilovb> Вся информация в этой таблице и есть
[13:55:14] <ilovb> В примере выше
[13:55:26] <ilovb> Стул состоит из Ножки и Спинки
[13:55:41] <ilovb> Ножка состоит из Дерева и Лака
[13:55:46] <ilovb> И так далее
[14:12:20] <ilovb> Некоторые вещи можно посмотреть тут
[14:12:23] <ilovb> http://infostart.ru/public/78285/
[14:12:26] <ilovb> и тут
[14:12:39] <ilovb> http://infostart.ru/public/78371/
[14:36:21] <valexey > о, да. пример бы сильно помог
[14:36:29] <valexey > пример таблицы/исходных данных
[14:45:32] <ilovb> Пример отчета по затратам http://i036.radikal.ru/1011/35/9b6544c4d048.jpg
[14:46:06] <ilovb> Правда там аналитика используется, которой у нас нет в задаче
[14:47:26] <ilovb> Т.е. у нас много проще :D
[14:52:26] <valexey > ААА!!! бухгалтерия, маздай, одинэс!!!1 УЖАС!
[14:52:30] <valexey > :-)
[14:56:21] <ilovb> :D
[14:56:47] <ilovb> Солянка для мазохистов :D
[16:54:14] <valexey > да. память в Go, а прежде всего стек, организован похоже существенно иначе чем у C++/Oberon'e
[16:54:25] <valexey > как именно - пока не скажу. но иначе
[17:11:38] <valexey > в Go кооперативная многозадачность
[17:11:54] <valexey > то есть нужно ручками дергать за шедулер
[17:12:02] <valexey > то есть yield'ить
[17:12:34] <valexey > ну или за IO-функции дергать, тогда оно yield'ит автоматом во время вызова
[17:12:51] <valexey > то есть вот такое вот:
[17:12:53] <valexey > j:=0
go func() {for {j++}; fmt.Println("ello")}()
fmt.Println("hello")
fmt.Println("foobar")

[17:13:19] <valexey > на печать отправит только hello а затем повиснет навеки не напечатав ни строчки
[17:13:48] <valexey > дас, это вам не ерланг.
[18:33:00] <vlad2> А нормальная многопоточность там есть?
[18:35:03] <valexey > ну, осевые потоки доступны в принципе
[18:35:08] <valexey > то есть тяжелые
[18:36:03] <valexey > там как - там есть системный поток, на его садится N этих goroutin'ов, которые между собой работают в кооперативном режиме
[18:36:19] <valexey > по умолчанию используется один системный поток.
[18:39:16] <vlad2> А примитивы синхронизаци?
[18:39:36] <vlad2> И как там GC - расчитан на многопоточку?
[18:39:48] <vlad2> Объекты шарятся между потоками?
[18:40:13] <valexey >
[18:40:24] <valexey > смотри
[18:40:54] <valexey > можно сделать как - можно сказать рантайму чтобы завел N системных потоков
[18:41:08] <valexey > затем некоторые горутины приклеить к конкретным системным потокам
[18:41:43] <valexey > таким образом некоторые для некоторых горутин будет верно что одна горутина на один поток
[18:41:55] <valexey > в этом случае общение с ними будет как обычно - через каналы
[18:42:05] <valexey > то есть никаких мьютексов и никаких шареных объектов
[18:42:37] <valexey > либо можно тупо напрямую работать с системными потоками. тогда велком ту позикс/маздай абстракции - мьютексы и прочее
[18:43:41] <valexey > сборщик мусора там вполне дружит с несколькими системными потоками, иначе горутины не работали бы, ведь они сидят (кучками) по системным потокам
[18:44:12] <valexey > http://golang.org/pkg/runtime/#LockOSThread
[18:44:14] <vlad2> Ну если объекты не шарятся, то там все хорошо должно быть.
[18:44:18] <valexey > вот этим приклеивать
[18:44:36] <valexey > объекты там можно шарить, сколь я понимаю.
[18:45:34] <valexey > для синхронизации шаренного состояния есть вот это: http://golang.org/pkg/sync/
[18:45:45] <valexey > но, как понимаешь, лучше каналами :-)
[18:46:42] <valexey > vlad2: кстати, я покурил алгоритм сборщика мусора из Проекта Оберон - он таков, что гарантированно исключает многопоточность
[18:47:00] <valexey > то есть его в параллель работающей программе категорически нельзя запускать.
[18:47:05] <vlad2> Хе-хе :)
[18:47:27] <valexey > просто потому, что во время работы он меняет объекты. точнее - он химичит со ссылками. меняет их местами
[18:47:37] <vlad2> Да, и запускается он только в самом верху :)
[18:48:00] <valexey > то есть если у тебя A указывало на Б, то во время работы сборщика в некий момент может случиться так, что уже Б будет указывать на А
[18:48:46] <valexey > причем с наплеванием на типы указателей :-)
[18:48:54] <vlad2> А нафига?
[18:49:17] <valexey > ну, это алгоритм обхода графа такой. он работает на O(1) памяти
[18:50:58] <vlad2> А.
[18:51:53] <valexey > в общем та ОС Оберон очень жестко завазана на однопроцессорность и отсутствие любой многозадачности (в том числе кооперативной).
[18:52:58] <valexey > зато система реально простая :-)
[18:53:46] <vlad2> Т.е. какой-нибудь сервак в принуипе не сделать?
[18:53:58] <valexey > я вот долго думал что мне ББ напоминает… Сейчас понял - он мне напоминает MacOS 9, или там Windows Me. То есть когда систему со старой архитектурой (которая во время создания была полностью оправдана) пытаются натянуть на современные требования.
[18:54:16] <valexey > vlad2: ну, веб-сервер можно.
[18:54:32] <valexey > скажем для форума
[18:54:47] <valexey > то есть такой, к которому не бывает долгоиграющих запросов
[18:55:59] <valexey > а вот какой-нибудь сервер с длинными вычислениями, ну, скажем сервер который видеоконференцию организовывает (то есть там в фоне тяжелый процесс микширования видео идет постоянно) - уже не сделать без жуткого количества костылей и извращений
[18:56:11] <vlad2> Ну а если есть еще кто-то (SQL)? который может тормозить?
[18:56:26] <valexey > ну, собственно Вирт об этом и писал, что мол Оберон ОС она для клиентов а не для серверов. И работает в паре с такими серверами всегда
[18:56:43] <valexey > vlad2:  а SQL на отдельном сервере :-)
[18:56:53] <valexey > то есть как фронтенд - потянет
[18:57:15] <vlad2> Да, но вот он послал туда запрос - и ждет. Хотя мог бы пока обработать следующего клиента.
[18:57:26] <valexey > ну, то есть из Оберон ОС сервер получится чуть хуже чем из браузера.
[18:57:45] <vlad2> В браузере есть табки ;)
[18:58:17] <valexey > vlad2: а зачем он ждет? не нужно ему ждать. ждет сетевой драйвер который сидит на прерываниях. и когда по сети свалится ответ - драйвер его забуфферизует
[18:58:39] <valexey > иначе ОС Оберон не могла бы работать с серверами по сети. А оно работало
[18:58:48] <valexey > Да и с клавой-мышкой тоже не смогла бы работать :-)
[18:59:22] <vlad2> В смысле в случае потоков было бы удобнее - пока один поток ждет ответа от SQL, другой делает что-то полезное. Понятно, что можно елдить, но уэто уже "не проще".
[18:59:48] <vlad2> Кстати, у нас в конторе есть очень старая (но легендарная) байка на эту тему.
[19:00:21] <vlad2> Когда-тоочень давно, наш сервер работал на Маке и ОС9 (если не 8).
[19:00:25] <valexey > зачем йелдить? обычное асинхронное io будет. то есть как без фиберов и потоков в позиксе. select во все щели
[19:00:53] <vlad2> Прикол был в том, что сервер останавливался (не приниал запросы), если кто-то на маке тыкал в менюшку ;)
[19:01:10] <valexey > :-)
[19:01:33] <valexey > буфер кончался?
[19:01:57] <vlad2> Нет, просто система замораживала все остальное, пока трэкала менюшку :)
[19:03:05] <valexey > прерывания от железяк оно не могло морозить. то есть пришедший запрос клался в буфер. ясное дело что сервак не ответит пока терзать не перестанут, но запрос не потеряется (если туда не приедет еще куча запросов)
[19:03:27] <valexey > ну, собственно наналогичное было и на WinCE несколько лет назад.
[19:03:38] <vlad2> Я не знаю подробностей :) Короче там вешали бумажку типа "мышку не трогать" :)
[19:03:52] <valexey > ну, блин. нашли на чем сервер делать :-)
[19:04:05] <valexey > мышка на сервере
[19:07:20] <valexey > гм-гм. в принципе кооперативную многозадачность в ОС Оберон можно бы вкорячить. Драйвером отдельным. И оно даже работать небось будет. Скорости это конечно не добавит и функциональности, но в случае асинхронного программизма снизит коликчество УГ-кода и число ошибок.
[19:07:29] <valexey > Хотя-я… Где-то я уже такое решение видел…
[19:07:41] <valexey > А! В MacOS классике вроде бы так была кооперативка сделана :-)
[19:08:12] <valexey > Причем изначально она была сделана так сторонними умельцами. И лишь затем выпустили макоську где это было искаропки.
[19:09:46] <valexey > кстати, на Цересе (целевая машинка для ОС Оберон) был MMU. И оно им таки пользовалось.
[19:09:58] <valexey > Но не для изоляции приложений.
[19:10:21] <valexey > Правда на Цересе-3 MMU выпилили. Пришлось воткнуть пару костылей.