Я понял что голое Lua стало меня в некоторой степени раздражать ...

May 08, 2010 12:16


mr_aleph: Я понял что голое Lua стало меня в некоторой степени раздражать ...

Я, как человек, которого голое Lua раздражало с первого дня не мог не ответить :)
Read more... )

Leave a comment

Comments 9

mr_aleph May 8 2010, 08:24:27 UTC
на comprehensions make_label все-таки читабельней, мне кажется =)

По моему это чисто библиотечная проблема, в PIL написано даже как операторы для множеств переопределить.

не совсем. я еще хочу синтаксис для множеств специальный.

а на haxe я посмотрю обязательно, спасибо.

Reply

zoonior May 8 2010, 08:50:20 UTC
Мне кажется пристойный синтаксис типа x in s даже в рамках metalua можно получить:

-- Set is a `Set{...}
-- 'in' - reserved word :(

local fun contains
| set@`Set{...}, val -> set:contains(val)
| _,_ -> false -- ???
end

-- using our pseudo operator:
if someset `contains` val then
...
end

Итерацию, конечно, нужно делать не через pairs, а как-то:

for x in someset:iter() do
...
end

Reply


thedeemon May 11 2010, 14:55:31 UTC
> быстрый PEG-parser

Речь про LPEG? Не подскажете, как его в винде приготовить (без cygwin'a, если возможно)?

Reply

zoonior May 11 2010, 15:46:37 UTC
Проще всего скачать Lua For Windows:
http://code.google.com/p/luaforwindows/
... но там 18 мегабайт всякого барахла.

Если вам для того теста парсинга OSM то вот :)
http://dl.dropbox.com/u/5738262/lua-lpeg-test.zip
... просто распаковать в любую директорию и запустить:
> lua.exe parse-osm.lua

Reply

thedeemon May 11 2010, 16:32:47 UTC
О, спасибо огромное!
У меня получилось 20.2 MB/s - на несколько процентов быстрее Boost.Spirit'a.

Reply

zoonior May 11 2010, 17:05:57 UTC
По моему очень неплохо (А уж скорость компиляции неудобно даже сравнивать) :)

Reply


udpn November 29 2010, 11:26:37 UTC
Какая порнография!

local fun Drag
| button@{| onDrag=handler:'fun' |}, x,y -> handler(button,x,y)
| _,_,_ -> --NOOP
end
Вы называете вот это синтаксическим сахаром? По-моему это синтаксический шум.

Reply

zoonior November 29 2010, 12:31:59 UTC
Предложите лучше :)

Сахаром тут является конретно

{| onDrag = handler:'fun'|}

Что означает: есть некий объект (lua-table или userdata), в котором точно есть поле (для которого мы вводим переменную 'handler') с именем "onDrag" и типом "function".

Да, я считаю, что это сахар по сравнению с тем, чтобы каждый раз писать довольно неочевидное

if (type(button)=='table' or (getmetatable(button) and
getmetatable(button).__index)) and button.onDrag~=nil and
type(button.onDrag)=='function'
then
...

button@ - это Scala/Haskell, мне нравится больше, чем окамловое 'as button'.
'_,_,_ -> ' - это чтобы не вводить весь институт 'partial functions' как в Scala - (что не исключено, просто не очень было надо) и в некотором роде отражает тот факт, что туплы в луа не первоклассная сущность.

Reply

udpn November 29 2010, 15:28:33 UTC
Да это все понятно, просто сравнение с образцом в данном случае перестает выполнять свои изначальные функции и становится банальным duck typing. А утиная фигня это всегда фигня. onDrag может не отвечать требованиям, которые мы подразумеваем. Теряется строгость, причем с совершенно неочевидными для логики последствиями. И первый же onDrag с какими-нить дополнительными устрашениями из другой библиотеки доведет отлаживающего до ручки.
Впрочем, в динамических языках за строгостью обычно не следят. По понятным причинам.

Reply


Leave a comment

Up