LINUX.ORG.RU
ФорумTalks

[C] COS - CLOS for C

 


0

2

Небольшая библиотечка для C реализующая идеи из CLOS и ObjC:

* uniform object model (class, meta-class and property-metaclass)

* generic functions

* multi-methods

* delegation

* properties

* exceptions

* contracts

* closures

профит в том, что написана на C и для C. бенчмарки также хороши.

source:
http://arxiv.org/abs/1003.2547

http://cos.sourceforge.net/

PS: кто еще сомневается в том, что Цeпепе не нужен?

Ответ на: комментарий от CL-USER

http://ldeniau.web.cern.ch/ldeniau/cos.html

COS design is tuned to provide efficient portable implementation of these concepts, specially dynamic message dispatch (x1.7-x2.3 slower than an indirect function call and about x1.2-x1.5 faster than Objective-C) as well as generic message forwarding (as fast as message dispatch and about x40-x80 faster than Objective-C).

CL-USER
() автор топика

C++ Builder педалит и рулит, множественные наследования не нужны!

frame ★★★
()

Вот будет Go на gcc в первую очередь, и всё, пипец.
А вот то что COS пишется «под церном» - гуд.
Если бы занялся гугл - кул. Но гугл занялся Go, по сему возможно что ваши COS не возможны...
А в чём профит COS? Переосмысление OOP и добавление его в C? Как показывает опыт D1, «хорошая альтернатива» не является аргументом. А вот «хорошая замена с киллерфичами», как в D2, ещё может что-то сделать, если быстро выйдет.

tia
()

Интересная штука, обязательно поиграюсь.

mono ★★★★★
()
Ответ на: комментарий от CL-USER

> И правда, Цепепе он такой.

лисперы такие фантазеры и старательно пытаются не замечать, что на практике во всех областях «цепепе» значительно превосходит недолисп и по скорости и по качеству

lester ★★★★
()
Ответ на: комментарий от jtootf

это у них использование property:

void print_name(OBJ obj) {
useproperty(name);
gprint(ggetAt(obj, name));
}

вместо obj.name, пусть таким лиспе ежики пользуются

lester ★★★★
()
Ответ на: комментарий от CL-USER

> не слышал о такой реализации... может она и действительно сосет.

сотни их

lester ★★★★
()
Ответ на: комментарий от lester

а «useproperty( name );» что по твоему?

без чтения документации этого уже не понять :(

jtootf ★★★★★
()
Ответ на: комментарий от tia

А в чём профит COS? Переосмысление OOP и добавление его в C?

Что значит «переосмысление ООП»? ООП было прекрасно осмыслено в CLOS, с которого COS и копировался.

mv ★★★★★
()

Любое Си-расширение, которое не имеет своего компилятора - угребищный костыль. Си просто нерасширяем.

tailgunner ★★★★★
()
Ответ на: комментарий от CL-USER

> (x1.7-x2.3 slower than an indirect function call and about x1.2-x1.5 faster than Objective-C)

Не верю, что там такие же мощьные возможности, что в obj-c. Ибо сделать это без поддержки компилятора сложно

а по другому оно и не надо.

namezys ★★★★
()
Ответ на: комментарий от namezys

Не верю, что там такие же мощьные возможности, что в obj-c. Ибо сделать это без поддержки компилятора сложно.

Простите, а для чего нужен компилятор для dynamic message dispatch?

mv ★★★★★
()
Ответ на: комментарий от tia

А в чём профит COS? Переосмысление OOP CLOS и добавление его в C?

В чём вообще может быть профит в сишной библиотеке, реализующей ООП? В том, что будет библиотека, реализующая ООП. А если уж и реализовывать ООП, то лучше это сделать, как в CLOS, а не как в C++ (hint: метаклассы, дженерики, мультиметоды).

mv ★★★★★
()
Ответ на: комментарий от mv

> Простите, а для чего нужен компилятор для dynamic message dispatch?

для оптимзиации того динамического безобразия, которое будет храниться в памяти

Что такое сообщение? Что такое приемник? Кто соответсвие типов проверяет? Как? Проверкой строковых констант?

А как они реализовали исключения?

namezys ★★★★
()
Ответ на: комментарий от namezys

для оптимзиации того динамического безобразия, которое будет храниться в памяти

Какое безобразие? Диспетчеру нужно выбрать метод с наиболее подходящей специализацией. Методы могут добавляться и удаляться в рантайме. Чем тут поможет компилятор?

Что такое сообщение? Что такое приемник? Кто соответсвие типов проверяет? Как? Проверкой строковых констант?

RTFM

А как они реализовали исключения?

Какие исключения? При чём здесь исключения и объектная система?

mv ★★★★★
()

Ухты, отлично, спасибо, надо будет посмотреть

yoghurt ★★★★★
()
Ответ на: комментарий от mv

> Какое безобразие? Диспетчеру нужно выбрать метод с наиболее подходящей специализацией. Методы могут добавляться и удаляться в рантайме. Чем тут поможет компилятор?

таблицами идентификации например. Прочти как obj-c работает и кэширует селекторы методов. Первый вызов может потребовать поиска. Второй уже нет. Это оптимзируется компилятором, иногда с учетом попыток статического анализа

Какие исключения? При чём здесь исключения и объектная система?

Это пример того, что можно сделать бесплатным (не тратящим процессорного времени) с помощью компилятора

namezys ★★★★
()
Ответ на: комментарий от namezys

таблицами идентификации например. Прочти как obj-c работает и кэширует селекторы методов.

Кэширование - это рантайм.

Первый вызов может потребовать поиска. Второй уже нет.

Поиск в динамически изменяемых данных - это рантайм.

Это оптимзируется компилятором, иногда с учетом попыток статического анализа

Ты можешь внятно сказать, что именно оптимизируется компилятором?

Это пример того, что можно сделать бесплатным (не тратящим процессорного времени) с помощью компилятора

Отлично, но какое это имеет отношение к данному треду?

mv ★★★★★
()
Ответ на: комментарий от mv

>(hint: метаклассы, дженерики, мультиметоды).
Вот этого я и пытался добиться.
Может, что ещё интересного расскажешь?
Может, я не знаю, целые куски нормального кода на «этом» кто даст?

tia
()

Пздц, как можно умудрится сделать так, чтобы страничка plain text тормозила при скроллинге?!

ps где примеры?

a3
()
Ответ на: комментарий от mv

> Кэширование - это рантайм.

С выдаст тебе строки. Компилятор подготовит более оптимальные данные

Поиск в динамически изменяемых данных - это рантайм.

Поиск строки - вещь не быстрая

Ты можешь внятно сказать, что именно оптимизируется компилятором?

хотя бы то, что в obj-c поиск метода происходит по цифровому идентификатору, а при написании ты работаешь с обычной записью

Отлично, но какое это имеет отношение к данному треду?

Это пример. Так же диспетчерезация вызова

namezys ★★★★
()
Ответ на: комментарий от namezys

я уж не говорю о случаях, когда на стадии компиляции достаточно данных для идентификации метода - тогда вообще можно выполнить простой вызов метода

namezys ★★★★
()
Ответ на: комментарий от namezys

я уж не говорю о случаях, когда на стадии компиляции достаточно данных для идентификации метода - тогда вообще можно выполнить простой вызов метода

Когда на стадии компиляции может быть достаточно данных о том, что случится в рантайме? Ну сделает компилятор прямой вызов подходящего, по его мнению, метода, а потом в рантайме этот метод удалится, либо добавится более подходящий.

mv ★★★★★
()
Ответ на: комментарий от elipse

Я посмотрел на тарболлы, но так и не решился открывать. Ибо лень. Уж больно странная позиция не давать экземплы на сайте..

tia
()
Ответ на: комментарий от tia

> Уж больно странная позиция не давать экземплы на сайте..

ибо нефиг. чeй не для школоты, с ее пистоном.

CL-USER
() автор топика
Ответ на: комментарий от mv

Когда на стадии компиляции может быть достаточно данных о том, что случится в рантайме?

NSPointer *pt = NSMakePointer(10, 20);
int w = [pt width]; 
namezys ★★★★
()
Ответ на: комментарий от CL-USER

там еще много букв на английском. Ой, как нехорошо, непонятно же совсем. плохие они.

CL-USER
() автор топика
Ответ на: комментарий от namezys

NSPointer *pt = NSMakePointer(10, 20);

Ну и какой тип у 10 и 20? char? int? long? signed? unsiged? Даже, допустим, у нас на момент компиляции есть только int, и компилятор делает «оптимизацию». Потом в рантайме подключается модуль, который удаляет метод с int. Что дальше?

mv ★★★★★
()
Ответ на: комментарий от mv

У нас всетаки С и не настолько он динамичен

Вообще хотя бы построить компилятором динамические структуры стоит заранее. Это раз. Два - посчитать хэши строк для поиска или пронумеровать структуры и символы - это два

namezys ★★★★
()
Ответ на: комментарий от namezys

оки. уел. но думаю с такой степенью динамичности не справится даже эта обертка

namezys ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.