29 сент. 2007 г.

Клевер

Искорки

24 сент. 2007 г.

Март 2005





15 сент. 2007 г.

Использование декораторов в Lua

Дэвид Манура (David Manura) предложил интересную технику использования декораторов в Lua. (По крайней мере, его письмо — первое, в котором я её увидел.)

Рассмотрим простейший пример того, что можно сделать при помощи декораторов:
local foo =
print_start_end(printor 'begin foo', printor 'end foo')
..
function (buzz)
print ('FOO called with ' .. buzz)
end

foo('ARGUMENT')

Вывод:

begin foo
FOO called with ARGUMENT
end foo

Реализация:
function printor(msg)
return function() print(msg) end
end

function print_start_end(prologue, epilogue)
assert(type(prologue) == 'function'
and
type(epilogue) == 'function')
local M = {}
setmetatable(M, {
__concat = function(lhs, rhs)
assert(type(rhs) == 'function')
return function(...)
prologue()
local result = rhs(...)
epilogue()
return result
end
end;
})
return M
end

Главное достоинство такого метода — в «удобоваримом» синтаксисе без необходимости привлечения метамеханизмов.

Правда, используемый подход не позволяет пользоваться синтаксическим сахаром для объявления функций и методов, но это небольшая беда. Вот к такой записи не прикрутишь декоратор:
function bar(buzz)
print('BAR called with ' .. buzz)
end

foobar = {}
function foobar:buzz(foo)
print('foobar:buzz called with ' .. foo)
end

Один из вариантов применения такого декоратора — проверка входных и выходных параметров функции (и, шире, пред- и постусловий вообще).

Например (первое, что пришло в голову):
local string.rep =
docs
[[Returns a string that is the concatenation
of n copies of the string s.]] ..
args { 'string', optional 'number' } ..
rets { 'string' } ..
function (s, n)
n = n or 1
if n > 1 then
local t = {}
for i = 1, n do
t[i] = s
end
s = table.concat(t)
end
return s
end

Но об этом — в следующий раз.

11 сент. 2007 г.

Closing over context still not easy in mainstream languages?

"Lisp 1.5, complete with support for lexical closures, appeared in 1959. It’s 2007. That’s forty-eight years."

http://www.lshift.net/blog/2007/09/11/closing-over-context-still-not-easy-in-mainstream-languages-film-at-11

Use Lua, man, use Lua!..

7 сент. 2007 г.

It Was a Very Good Year

When I was seventeen
It was a very good year
It was a very good year for small town girls
And soft summer nights
Wed hide from the lights
On the village green
When I was seventeen

When I was twenty-one
It was a very good year
It was a very good year for city girls
Who lived up the stair
With all that perfumed hair
And it came undone
When I was twenty-one

When I was thirty-five
It was a very good year
It was a very good year for blue-blooded girls
Of independent means
Wed ride in limousines
Their chauffeurs would drive
When I was thirty-five

But now the days grow short
Im in the autumn of the year
And now I think of my life as vintage wine
>from fine old kegs
>from the brim to the dregs
And it poured sweet and clear
It was a very good year

It was a mess of good years


Одиннадцатого февраля 2006

Один из хороших дней.
А ведь уже почти два года прошло — как летит время!
Сегодня — тоже был хороший день. Очень хороший.
Дай Бог, чтобы хороших дней было больше.