LINUX.ORG.RU

Смотрите, какая интересная библиотека для си.

 , ,


5

2

http://libcello.org

Для Ъ, пример кода на сишечке:

/* Another Example Cello Program */

#include "Cello.h"

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

  /* Tables require "Eq" and "Hash" on key type */
  var prices = new(Table, String, Int);
  put(prices, $(String, "Apple"),  $(Int, 12)); 
  put(prices, $(String, "Banana"), $(Int,  6)); 
  put(prices, $(String, "Pear"),   $(Int, 55));

  /* Tables also supports iteration */
  foreach (key in prices) {
    var price = get(prices, key);
    print("Price of %$ is %$\n", key, price);
  }

  /* "with" automatically closes file at end of scope. */
  with (file in open($(File, NULL), "prices.bin", "wb")) {

    /* First class function object */
    lambda(write_pair, args) {

      /* Run time type-checking with "cast" */
      var key = cast(at(args, 0), String);
      var val = cast(get(prices, key), Int);

      try {
        print_to(file, 0, "%$ :: %$\n", key, val);
      } catch (e in IOError) {
        println("Could not write to file - got %$", e);
      }

      return None;
    };

    /* Higher order functions */
    map(prices, write_pair);
  }

  delete(prices);
}
★★★★★

А есть вариант исходника выше с развёрнутыми макросами?

tensai_cirno ★★★★★ ()

Да вроде нормальный костыль.

olibjerd ★★★★★ ()

Офигенно. Плюсанул карму.

anonymous ()

Не нужно. Это поделка из серии «А СМОТРИТЕ, КАК Я УМЕЮ!». А на деле, если ты в реальном проекте такое заюзаешь, то отлаживать потом эту ахинею из макросов тебе точно не захочется. Не удобно тебе писать на Си? Нужно красивое ООП? Ну и не пиши на Си, делов то.

DELIRIUM ☆☆☆☆☆ ()

«Most of all Cello is just a fun experiment to see what C would look like when hacked to its limits.»

Мда

dizza ★★★★★ ()
//
// Превед.cpp : Defines the entry point for the console application.
//

#include <iostream>
#include <locale.h>

//------------------------------------------------------------------
// The PREVED Language Kernel area. Do not touch! :)

#if !defined (_MSC_VER) || _MSC_VER < 1400
#error Wrong compiler! Use MSVS 8.0
#endif

#define НАЧЕЛ      {
#define КОНЧЕЛ     ;}
#define ТИПА       int
#define ВДРУГ      if (
#define ТАДА       )
#define НИХРИНА    else
#define ВЗАД       return
#define КАГДИЛА    (
#define ЙО         ;
#define ЖЖОШ(p,n)  for (; (p) <= (n); (p)++)

#define БАЗАР      std::cout << 
#define СЛЫШЬ      << 
#define СТОЙ       system ("echo. & pause");
#define БЛИН       _wsetlocale (LC_ALL, L"Russian_Russia.ACP");

#define ВРОДЕ      try 
#define ИБАНУЦЦО   throw
#define АПСТЕНУ    catch (const char* __чё__)

#define ПРЕВЕД     ТИПА main КАГДИЛА ТАДА
#define МЕДВЕД     ВЗАД 0; КОНЧЕЛ

// End of area
//------------------------------------------------------------------

ТИПА КРУТО КАГДИЛА ТИПА фигня ТАДА
    НАЧЕЛ
    БАЗАР "ВАЩЕ " ЙО
    ВДРУГ фигня == 8 ТАДА ИБАНУЦЦО "мля! " ЙО
    ВЗАД 0
    КОНЧЕЛ

ПРЕВЕД
    НАЧЕЛ
    БЛИН

    ВРОДЕ НАЧЕЛ

    ТИПА фишка = 0 ЙО

    ЖЖОШ (фишка, 10)
        НАЧЕЛ
        БАЗАР фишка СЛЫШЬ " "; 
        ВДРУГ фишка >= 5 ТАДА КРУТО (фишка) ЙО
        КОНЧЕЛ

    КОНЧЕЛ АПСТЕНУ НАЧЕЛ
        БАЗАР "ИБАНУЦЦО invoked: " СЛЫШЬ __чё__;
    КОНЧЕЛ

    СТОЙ
    МЕДВЕД
anonymous ()

Неплохо. Спасибо за ссылочку.

php-coder ★★★★★ ()

Это лучше boost, во всяком случае.

dmfd ()

Уж лучше vala

anonymous ()

Außerdem, кто сказал, что круто - говнокодеры.

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

Хотя я этот COS не пользовал и ща решил собрать для прикола. И знаешь что? Какие-то кривые мейкфайлы, использующие sed только для линукса (с его ключами). Разбираться не стал

panfutij ()

бег на костылях

=))) очень похожее сравнение

I-Love-Microsoft ★★★★★ ()

Это какое-то не PHP. Даже не Javascript.

Но кажется выразительным.

visual ★★★ ()

А мне попадались:

ooc-coding - макросы, библиотека.

ooc-lang - целый язык, который компилируется в C99! И с gtk работает:

    use gtk
    import gtk/[Gtk, Widget]

    Label: cover from GtkLabel* extends Widget {
        new: extern(gtk_label_new) static func (text: GChar*) -> This

        text: GChar* {
            set: extern(gtk_label_set_text)
            get: extern(gtk_label_get_text)
        }
    }

php-coder, panfutij

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

Это, конечно, полезнее будет, чем то, что попалось мне.

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

Может тогда уж сразу ATS?

fn fexpose
  {c:cls | c <= GtkDrawingArea} {l:agz}
  (darea: !gobjref (c, l), event: &GdkEvent): gboolean = let
  prval () = clstrans {c,GtkDrawingArea,GtkWidget} ()
  val (fpf_win | win) = gtk_widget_get_window (darea)
  val () = assert_errmsg (g_object_isnot_null (win), #LOCATION)
  val cr = gdk_cairo_create (win)
  prval () = minus_addback (fpf_win, win | darea)
  val (pf, fpf | p) = gtk_widget_getref_allocation (darea)
  val () = draw_main (cr, (int_of)p->width, (int_of)p->height)
  prval () = minus_addback (fpf, pf | darea)
  val () = cairo_destroy (cr)
in
  GFALSE // HX: what does this mean?
end // end of [fexpose]

Умеет почти всё, что умеет Хаскель, но при этом работает быстрее C++: http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=...

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

А вообще я невнимателен, думал, что это то же самое.

Ну а вообще такие языки уже есть, ещё один не нужен

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