Автор Тема: [C99] High level programming in C.  (Прочитано 4203 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
[C99] High level programming in C.
« : Июль 28, 2013, 01:48:39 pm »
Услышал недавно о замечательной библиотеке для С99: http://libcello.org/ . Привносит в Си элементы современных языков с приятным сахарком. Да, это именно либа, это не внешний препроцессор или какая-то еще тулза.

Пример кода:
/* Example libCello Program */

#include "Cello.h"

int main(int argc, char** argv) {

  /* Stack objects are created using "$" */
  var int_item = $(Int, 5);
  var float_item = $(Real, 2.4);
  var string_item = $(String, "Hello");

  /* Heap objects are created using "new" */
  var items = new(Array, 3, int_item, float_item, string_item);

  /* Collections can be looped over */
  foreach (item in items) {
    /* Types are also objects */
    var type = type_of(item);
    print("Object %$ has type %$\n", item, type);
  }

  /* Heap objects destroyed with "delete" */
  delete(items);
}
Y = λf.(λx.f (x x)) (λx.f (x x))

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
Re: [C99] High level programming in C.
« Ответ #1 : Июль 28, 2013, 02:45:43 pm »
Выглядит как JavaScript...
Не знаю... нужен ли такой сахар.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [C99] High level programming in C.
« Ответ #2 : Июль 28, 2013, 03:17:00 pm »
Выглядит как JavaScript...
Не знаю... нужен ли такой сахар.
В смысле синтаксиса или в плане семантики? Смущает var?
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [C99] High level programming in C.
« Ответ #3 : Июль 30, 2013, 08:09:54 am »
Сомневаюсь, что эта либа будет реально использоваться в сишных проектах:

во-первых, большинство таких проектов тянутся с тех пор ещё, когда си был в лучшем случае версии C89;

во-вторых, вечный аргумент оберонщиков -- неизвестно, какой код и какие накладные расходы даст эта библиотека, а это очень важно для сишных проектов, иначе зачем их делать на сях?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [C99] High level programming in C.
« Ответ #4 : Июль 30, 2013, 08:21:20 am »
Сомневаюсь, что эта либа будет реально использоваться в сишных проектах:

во-первых, большинство таких проектов тянутся с тех пор ещё, когда си был в лучшем случае версии C89;

Понятно что это для новых проектов.

Цитировать
во-вторых, вечный аргумент оберонщиков -- неизвестно, какой код и какие накладные расходы даст эта библиотека, а это очень важно для сишных проектов, иначе зачем их делать на сях?
Фигня там кода мало и он весь элементарный. В плане накладных расходов библиотека абсолютно прозрачна.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [C99] High level programming in C.
« Ответ #5 : Июль 30, 2013, 05:00:09 pm »
http://libcello.org/documentation/types

Цитировать
Classes

A Class in Cello is a typeclass - better known as an interface.

These are defined to allow for overloaded or generic functions which can work on multiple data types.

Цитировать
Types

A Type is an object which implements a number of Classes.

Классы типов в сях? о_О Уже интересно...
Жаль что документация не полная -- есть места "Coming Soon..."
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [C99] High level programming in C.
« Ответ #6 : Июль 30, 2013, 06:13:52 pm »
На счет типов классов и проч советую не обольщаться - у меня ощущение сложилось, что там преимущественно динамическая типизация.
Y = λf.(λx.f (x x)) (λx.f (x x))