𝄢 Cello

Попробовал попрограммировать с использованием библиотеки «libCello» — это набор макросов к Си, вводящих в язык кучу комплексных типов, простую работу с выделением и освобождением памяти под них, лямбда-функции, классы и так далее.

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

Пример ошибки в документации — функции в «стиле Си» не могут быть заданы внутри функции main, хотя на сайте указан пример, в котором утверждается обратное (и он не компилируется).

По идее, библиотека должна упрощать программирование, но в моём случае (я понимаю, «песня про пиво» не совсем та программа, в которой раскрывается эта библиотека) всё было ровно наоборот — на чистом Си я справился бы значительно быстрее.

Если бы её дописать и достойно задокументировать, вышло бы что-то интересное, пока же я пас — надо знать в деталях каждый макрос (а их там очень много) чтобы понять из-за чего скомпилированное в очередной раз упало.
#include "Cello.h"

int main() {
	lambda(bottles, args) {
		var beer = cast(at(args, 0), Int);

		if_eq(beer, $(Int, 0)) {
			print("no bottles");
		} else {
			if_gt(beer, $(Int, 1)) {
				print("%d bottles", beer);
			} else {
				print("1 bottle");
			};			
		}

		return None;
	};

	for (var beer = $(Int, 99); gt(beer, $(Int, 0));) {
		call(bottles, beer);
		print(" on the wall, ");
		call(bottles, beer);
		println(".");

		print("Take one down and pass it around, ");
		sub(beer, $(Int, 1));
		call(bottles, beer);
		println(" of beer on the wall.\n");
	}

	println("No more bottles of beer on the wall, no more bottles of beer.");
	println("Go to the store and buy some more, 99 bottles of beer on the wall.");
}
Судя по репозиторию, автор интерес к своему детищу не потерял, будем надеяться, что когда-нибудь из этого получится что-то вроде гугловского «Гоу».
15 марта 2015 18:36

Илюша (инкогнито)
13 июля 2015, 21:08

Классная блогозапись, уважаю!

Батат (инкогнито)
14 июля 2015, 14:18

Я сладкий картофель.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)