Два года в /fg/. Войти !bnw Сегодня Клубы
УНЯНЯ. У нас есть немножечко инфы об этом пользователе. Мы знаем, что он понаписал, порекомендовал и даже и то и другое сразу. А ещё у нас есть RSS.
Теги: Клубы:

http://pascal.net.ru/Somatic
Создал страничку, выражающую своё видение Somatic Pascal и Somatic Runtime.

#5OAPDU (0) / @octagram / 3941 день назад

Позавчера пришла по почте та самая книга «Handbook of Object Technology». На почтовой обёртке эпично красуется Value $0.07. Для своих семи центов книга в потрясающем состоянии. Страницы белые, свежие, не засаленные, ничего подобного. Следы пребывания в библиотеке есть, но это просто пустяки. Штампы RIT LIBRARY и WITHDRAWN на внешних сторонах страниц, следы оторванного кармана для карточки, приклеенный скотчем к обложке штрих–код, который я не рискну срывать. Худшее — это пометки карандашом на страницах, но это полная ерунда.

Поразила толщина. Теперь это самая толста книга по программированию, которая у меня есть. По толщине чуть уступает большому энциклопедическому словарю. Страницы в книге нумеруются не по порядку, а по главам, так что я, когда читал публично доступные главы, не догадывался о суммарном размере.

Впечатляет охват материалов. В этой книге есть 3 главы, посвящённые SOM (если в книге про объектные технологии не указан SOM, то такая книга — кошачий корм). Есть главы посвящённые языкам программирования, в том числе Ada 95, Modula-3, Smalltalk. CLOS, правда, нет, но SOM–то круче. An overview of the C++ Programming Language Страуструпа, кстати, впервые было опубликовано именно в этой книге, а уже потом распространялось отдельно. В PDF есть указание на книгу–первоисточник.

Весьма неплохо. И если о том, что я перечислил, я уже имел представление, то о многих других вещах в этой толстой книге у меня такого же хорошего представления нет. Вот, например, Business Object Notation. И таких глав 58.

Теперь хочу обзавестись «Putting metaclasses to work». Оба автора имели непосредственное отношение к разработке SOM 3.0, а сама книга оказала влияние, например, на Python. Что касается метаклассов, это самая упоминаемая книга. В электронном виде я её так и не нашёл, а б/у на таких же условиях, как Handbook of Object Technology, её нет. На http://www.alibris.com/ есть только новые, минимум за $250

#GZG7UW (7) / @octagram / 4199 дней назад

Резюмирая полгода молчания про SOM:
При портировании SOMObjects Toolkit на Borland C++ Free узнал заодно кучу интересных вещей о C как таковом (большинство примеров для него). Во–первых, есть такая очень весёлая проблема с разным манглингом в разных компиляторах. Символы в DLL можно импортировать двумя способами: через __declspec(dllexport) и __declspec(dllimport), а можно через .def файлы. Если через __declspec, то при экспорте компилятор сам выбирает имя, а это не всегда подходит. Разные компиляторы делают разный манглинг, и вообще, у SOM есть свои требования к именованию в таблице экспорта. Так что только .def. .def файл, похоже, под каждый компилятор нужно писать свой, потому что .def файл сопоставляет имя в таблице экспорта DLL с именем, как его манглит компилятор, когда читает заголовочный файл. Вот Borland, например, добавляет _ в начало cdecl функций и переменных, но никак не уродует stdcall функции, а GNU, я так понял, норовит добавить @размерстека. А VisualAge, под который было всё заточено, добавляет _ в начало и @размерстека в конец. Эта проблема худо–бедно решалась coff2omf, implib и тому подобными утилитами, которые все имена из одного уродства превращают в другое по одному алгоритму. Варьируя командную строку, обычно можно добиться результата. С SOM такое не прокатывает, потому что stdcall там перемешан с cdecl и переменными, и алгоритм должен быть для них разный. Запарился, в конечном итоге просто написал .def файлы руками, во всём SOM 3.0 около 1000 вызовов, не так уж много. Делая это, как не вспомнить импорт/экспорт в Delphi. function такая–то с соглашением таким–то, external оттуда–то с name таким–то. И не надо думать, какой манглинг получится в этом компиляторе для такого–то соглашения. Чётко и конкретно. Правда, нет импорта/экспорта переменных.
В somplatf.h по дефолту делается __declspec(dllexport) для Microsoft C. Как там происходит в MS, не знаю, но если в Borland я оставляю этот __declspec, то этот символ начинает торчать из DLL с тем манглингом, который мне не подходит наряду с нужным манглингом. Так что для Borland я дефайн поменял на пустой. Но если это так, то, может быть, и __declspec(dllimport) не нужен, ведь есть .lib, скомпилированный из .def? Ответ неверный. Для обычных функций генерится код вызова call туда–то, а для импортируемых функций — call dword ptr [там–то], плюс, генерятся трамплины, и, если подключить .lib, но в хедерах не использовать __declspec(dllimport), то компилятор создаёт неправильные вызовы, и всё крашится.
Ещё один источник радости — выбор рантайма в DLL. Так как программы на SOM в любом случае используют som.dll, то не будет лишним использовать и cc3250mt.dll. Всё компилится, даже что–то работает, но какие–то программы крашатся. Позже выясняется, что программы, выводящие на экран через somPrintf, работают, а через fprintf — нет. При отладке выясняется, что stdout не тот, который нужен. У cc3250mt.dll свой stdout, и только через него нужно делать fprintf, а, если не использовать /tWR, то stdout получается в .exe'шнике и не канает. Крашится, то есть. Реализация fprintf отнимает от адреса параметра FILE * адрес начала _streams и делит на sizeof(FILE). Если _streams в cc3250mt.dll, а stdout в .exe, получается дробное отрицательное число, и ничем хорошим это не кончается. По идее, у того, кто bcc32 сразу и компилит, и линкует, такого не происходит, но в нашем случае система сборки разделяет компилятор и компоновщик, поэтому может получаться такое рассогласование. В целом, с Borland вроде бы разобрался. Непроверенными остаются только нюансы с .dll, которые в примерах SOM используются только в DSOM, но DSOM службу я не поднимал. Я вижу, что всё компилится, я вижу, что импорты и экспорты без подчёркиваний, но для проверки надо поднять службу DSOM.
С .def файлами вообще весело. Я не знаю, это фишка Borland или в чём дело, мне .def для компиляции .dll и .def для создании библиотеки импорта (.lib) приходится генерить разные, хотя было бы логично, если в пределах одного компилятора как экспортировали, так и импортируем. То есть, в .def для .dll я пишу dAnimalClassData=_dAnimalClassData, а в .def для .lib — _dAnimalClassData=dAnimalClassData. Не знаю, можь это с переменными только такая петрушка.

Пока что завален рефератами. Из 6 рефератов в год удалось отвертеться от 4х и защитить 1. Надо защитить ещё один, плюс на работе проект важный. Летом, как освобожусь, надо продолжить. Есть желание сделать такой пакет Borland+SOM, чтобы студентоте в качестве Borland C++ подходил, работал без шаманства, в отличие от оф. версии. Оф. версия требует прописывания путей в bcc32.cfg и ilink32.cfg, плюс, не находит их, если путь к .exe'шнику bcc32 или ilink32 содержат в себе пробел. Всё это можно разрулить.
Ну а как бонус, там боеспособный SOM и демки к нему. Впечатляет, как мало весят .exe'шники и .dll'ки. Обычно, если используется ООП, всё быстро разбухает, несмотря на рантайм в отдельных .dll, а тут классы конструируются в рантайме, а в .exe'шниках и .dll'ках только метаинформация со ссылками только на переопределённые методы.

#APUN84 (2+2) / @octagram / 4226 дней назад
https://sourceforge.net/projects/somfree/ Пока только для POSIX систем
#WM0EES (0) / @octagram / 4366 дней назад
som
Что удалось узнать про SOM. Отличия от COM выходят далеко за рамки наличия наследования. Например, в COM очень важна ссылочная непрозрачность. Есть ссылка, и всё. Куда она указывает, неведомо. В SOM, напротив, имеют значение values, а не только references, пусть даже структура этих value неизвестна. У объектов есть фиксированный для каждого класса размер, который можно узнать у класса вызовом somGetInstanceSize. Можно узнать размер, выделить памяти под 10 экземпляров и разместить их плотно друг за другом, инициализировав каждый методом somRenew. Есть присваивание и копирующий инициализатор. На уровне DLL всё держится на экспортируемых и импортируемых функциях НазваниеКлассаNewClass. SOM compiler из одного .idl обычно делает 3 файла: хедер для чужих, хедер для себя и заглушка, в которую программист вписывает реализации методов. Хедер для себя как раз и содержит сгенеренные по шаблону тела НазваниеКлассаNewClass. Эта функция для своей работы потребует классы–родители и метакласс, которые при необходимости будут созданы через аналогичные NewClass в тех .dll, где реализованы соответствующие классы. Так происходит почти со всеми классами, кроме основных (SOMObject, SOMClass, SOMClassMgr), которые создаются somEnvironmentNew. Когда создан класс, всё остальное происходит через штатные механизмы SOM. Создание объектов — метод somNew у объекта–класса. Или somRenew, если объект создаётся в уже выделенном участке памяти. При использовании C генерится уйма макросов, которые приукрашивают косвенный механизм вызова методов. Если без макросов, вызов обычно состоит из SOMResolve и собственно вызова. SOMResolve возвращает MethodPtr, который нужно привести к прототипу нужного метода и уже тогда вызвать с аргументами. Всё это и скрывается макросами. Обилие макросов чем–то напоминает GObject. По тексту Programming Guide периодически проскальзывает CORBA, и все эти макросы вроде бы как по спецификации CORBA генерятся. Моё личное мнение: SOM'у не помешал бы свой аналог Objective-C или Vala, в котором всё было бы красиво и без макросов. При использовании C++ в хедерах генерятся как бы классы, но объекты этих классов напрямую (на стеке) создавать нельзя, потому что размер неизвестен до инициализации класса. Нельзя наследоваться от таких классов средствами самого C++. Только через IDL и SOM compiler. Можно вызывать operator new и operator delete, которые перегружены так, чтобы вызывать somNew и somFree, соответственно. Если у SOM класса есть нестандартные инициализаторы, каждый из них становится доступен не только как метод, но и как конструктор. somDefaultAssign и somDefaultCopyInit превращаются в копирующий конструктор и operator =. По идее, можно ещё operator new (void*) перегрузить так, чтоб вызывал somRenew, но это не сделано. В февральской бете совместно с компилятором VisualAge была экспериментальная фича Direct2SOM. Компилятор C++, поддерживающий эту фичу, мог генерить по обычному C++ коду SOM–совместимые классы и .idl для них. В каком состоянии это было, неизвестно, в декабрьском релизе это решили вырезать и потом доделать.
#51QIYT (0+1) / @octagram / 4367 дней назад
c som
Мытарство с манглингом в Це кончилось тем, что я сгенерил два .lib: один — для stdcall функций, другой — для cdecl: coff2omf.exe -v -lib:st somtk.lib somtk_omf.lib coff2omf.exe -v somtk.lib somtk_omf2.lib И подключил оба именно в таком порядке. И животные наконец–то запустились. Прочие, в том числе однофайловые комбинации флагов coff2omf к успеху не привели. Попробую теперь склеить в один файл
#RJWXXI (0) / @octagram / 4371 день назад
С SOMobjects неизбежно возникли проблемы, но я всё, что пока встретил, решил, и мои модификации можно найти на BitBucket: https://bitbucket.org/OCTAGRAM/somobjects Сейчас оно пока привязано к VisualAge и именно им я и собирал примеры. Сколько я хорошего написал про SOM, столько плохого я теперь могу написать про смежную продукцию IBM. Фейл SOM случился, конечно, не из–за особенностей самого SOM. И не только из–за убийства OS/2, как я раньше думал. Были и другие выдающиеся своей нелепостью ходы IBM. Последняя версия SOMobjects рассчитана на VAC 3.6.5. В p2p такое сложно найти, зато есть 4.0. Так вот, в этом 4.0 нет компилятора командной строки! Уму непостижимо, но IBM так и сделал. http://old.os2.ru/articles/dev/pub/vac/v.....e.phtml.ru > Когда фирма Stardivision продала фирме SUN свой продукт Star Office, последняя отказалась выпускать вресию для OS/2 аргументируя тем, что преусловутый gcc-emx просто не позволяет нормально собрать и отладить код (и это совсем не удивительно), а VAC++ 4.0 не имеет коммандной строки... Есть только vacbld, который компилирует проекты в новом формате .icc. И есть make2cfg, который призван конвертить makefile в .icc, но samples из SOMobjects он не переварил, потому что там idl. Ради интереса посмотрел те samples, которые идут в комплекте с самим VisualAge — с использованием .idl ничего нет. Я на всякий случай не только iso'шник Win32 версии VAC 4.0 выкачал, но и OS/2, раза в полтора больше. Запустить не могу, но могу посмотреть. Не увидев примеров с .idl в Win, решил посмотреть на samples в OS/2 версии VisualAge. Как ни в чём ни бывало, их там тоже нет!!!! У меня просто слов нет. Фундамент WPS, ничем не заменённый, и инструментарий той же фирмы, что и OS, перестал его поддерживать. Это как если бы в Microsoft одно подразделение выпустило .NET 2.0, а другое подразделение изъяло поддержку всех .NET языков из новой визуалки, мол, ну если надо .NET, возьмите из прошлой визуалки для .NET 1.1 компилятор, в общем, как–нибудь разберётесь. Слышать ничего не хотим про .NET, это вон те парни зачем–то сделали, пусть теперь и компилятор делают, а нам это не надо. Как результат такого отношения к покупателям, VAC++ 5.0 состоялся только под AIX. Бедный SOM и бедные программисты, чьим трудом так бездарно распорядились! Ну, конечно, у SOM с такими хозяевами не было шансов.
#GPQLQP (0) / @octagram / 4375 дней назад
http://hobbes.nmsu.edu/h-viewer.php?dir=.....endc12.zip OpenDoc 1.2 (with sources) Для OS/2, однако, with sources, что может помочь разобраться, как что можно использовать. Среди сырцов даже Bento есть: opendc12.zip/od124os2.exe/od12osr1.exe/src/FileCtr.cpp
#QNAWU5 (0) / @octagram / 4382 дня назад
#ILWZ3J (0) / @octagram / 4383 дня назад
Интересно ведёт себя Google. Время от времени гуглю «SOMobjects», и вот недавно всплыл отнюдь не новый пост: http://www.unix.com/302104216-post.html Чувака удалось найти на другом форуме, обещал дать многострадальные бинарники, а ещё он делал открытый клон под названием somFree: http://forums.nekochan.net/viewtopic.php?t=16726016
#V8WI01 (0) / @octagram / 4391 день назад
http://habrahabr.ru/post/159139/ _IBM SOM: внешняя объектная система с поддержкой наследования_ Статья стала пропуском на хабрахабр, от кого, не понятно, но и так сойдёт.
#JOVL2S (0+1) / @octagram / 4415 дней назад
http://octagram.name/OM В качестве летней практики накатал сравнение объектных систем (см. теги)
#B693TU (0+1) / @octagram / 4426 дней назад
http://www.iis.sinica.edu.tw/~trc/languages.html Несколько кратких документов о SOM, которые, как мне показалось, неплохо обрисовывают, чем является SOM, что такое метаклассы, несовместимость метаклассов, бинарная совместимость. Спойлер: 1) Чувак в курсе про CLOS, ObjVLisp, SmallTalk и т. д. 2) В третьем документе презанятная табличка, сравнивающая SOM с другими средствами обеспечения бинарной совместимости между разными релизами. Оказывается, под SGI IRIX есть некий SGI Delta C++, который тоже много, чего умеет Конечная цель этих инструментов — сделать так, чтобы любые изменения не требующие изменения исходных кодов, не требовали перекомпиляции. То есть, если использовали библиотеку одной версии, и был в ней класс, от которого мы отнаследовались, а в следующей версии этот класс изменился сам и поменял цепочку наследования, SOM или Delta C++ должны избавлять от необходимости перекомпиляции зависимого кода
#3VT69Q (0) / @octagram / 4453 дня назад
http://svn.netlabs.org/v_nom Открытая кроссплатформенная альтернатива IBM SOM в стадии альфа — Netlabs Object Model. Но вот, что не нравится — так это > NOM uses garbage collected memory only. The GC will be statically linked to the NOM runtime. http://svn.netlabs.org/v_nom/wiki/BuildNomWindows
#491KDZ (2+1) / @octagram / 4510 дней назад
Тщетно пытаюсь найти в Интернете SOMobjects 3.0 Developer's Toolkit for NT. Чем это интересно, можно почитать по ссылкам http://www.pcweek.ru/themes/detail.php?ID=108316 https://www.linux.org.ru/news/opensource/2332319 Это далеко не первая пропаганда SOM в Интернете, и, насколько я знаком с устройством GObject, Objective-C и COM, вполне может быть не беспочвенной. При всём при этом, скачать что–то и оценить, невозможно. Забавно, что IBM просят предоставить исходные коды того, от чего и бинарников–то нет в наличии. Не, ну можно, конечно, озаботиться установкой eComStation или AIX на виртуалку, но там же ни одна современная библиотека работать не будет, да и мало, кто согласится. У меня вот нет места и оперативки для третьей виртуалки. А вот виндовая версия, пусть и в wine — это вещь.
#7DPNJ9 (0) / @octagram / 4595 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.