Как стать автором
Обновить
23
0
lenstr @LeNsTR

Пользователь

Отправить сообщение
QuakeJS is a port of ioquake3 to JavaScript with the help of Emscripten.

Насколько я понимаю, там всё же не wasm, а asm.js
Это просто компиляция скрипта на лету и запуск его тут же из классов.
И большое спасибо за перевод. Появилось сильное желание разобраться с теорией.
Как и было указано выше данная запись является укороченным вариантом более формальной записи:
VMS = μX: {coin, chock}•(coin → (choc → VMS))


Поправьте, пожайлуста, на:
VMS = μX: {coin, chock}•(coin → (choc → X))

Иначе сильно сбивает с толку :)
Ваша статья натолкнула меня на некоторые мысли в контексте Ruby.

В нем проблемы с пайпами как таковой нет:

my_function(sum(filter(lambda x: x % 3 == 1, [x for x in range(100)])))

записывается как:

my_function ((1..100) . to_a . keep_if {|x| x % 3 == 1 } . reduce(:+))

Но с генераторами вида:

def fib
  a, b = 0, 1
  loop do
    yield a
    a, b = b, a + b
  end
end

fib . take_while {|x| x < 10}

такое уже не проходит.

Приходится немножко извращаться:

def fib
  a, b = 0, 1
  res = []
  loop do
    return res unless yield a
    res << a
    a, b = b, a + b
  end
end

fib {|x| x < 10} # => [0, 1, 1, 2, 3, 5, 8]

Неплохо, но хочется-то предыдущий вариант! :)

Конечно, можно использовать Fiber, дополнив его методом take_while:

class Fiber
  def take_while
    res = []
    loop do
      val = self.resume
      return res unless yield val
      res << val
    end
  end
end

def fib
  Fiber.new do
    a, b = 0, 1
    loop do
      Fiber.yield a
      a, b = b, a + b
    end
  end
end

fib . take_while {|x| x < 10} # => [0, 1, 1, 2, 3, 5, 8]

Работает. Но что же это получается: каждую функцию, от которой требуется свойство бесконечного генератора, внутри оборачивать в Fiber? Noway! Я слишом ленив для такого.

И тут мой взор упал на декораторы питона: «Хорошая штука» — подумал я, сейчас возьму такую же в любимом руби и… внезапно в Ruby такого не оказалось.
«Вещь то полезная… надо реализовать!» — подумал небезызвестный Yehuda Katz и забацал поддержку декораторов для руби в 80 строчек кода.

Пишем свой декоратор:

class Generator < Decorator
  def call(this, *args)
    Fiber.new { loop { @method.bind(this).call(*args) { |x| Fiber.yield x } } }
  end
end

и класс для бесконечного генератора чисел фибоначчи с «чистым» методом fib:

class FibGen
  extend MethodDecorators

  Generator()
  def fib
    a, b = 0, 1
    loop do
      yield a
      a, b = b, a + b
    end
  end
end

FibGen.new.fib . take_while {|x| x < 10} # => [0, 1, 1, 2, 3, 5, 8]
FibGen.new.fib . take(7) . map {|x| x * 2} . reduce(:+) # => 40

Отлично! :)

Итого: добрая половина дня убита занятием вот этой замечательной фигней ^.^
def foo n
  numbers = [1]
  while numbers.last <= n
    puts (numbers.last.even? ? numbers.reverse : numbers).join '-'
    numbers << numbers.last.next
  end
end

foo 6


Извините, на говнокод меня уже не хватило (
Привязку питона к Qt разрабатывают авторы Qt, со всеми вытекающими. Аргумент?
Меня искренне поразило, как тонко вы обосрали художника Cannon Cadet.
Большое спасибо за наводку! :) Прикрутил к ruby, буду учить маленьких программистов :3
Подключив мышку с клавиатурой по usb, очевидно же ;)
Вот бы еще ведущему iPad в руки :D
А то так он с этим ноутом неловко смотрится…
Да, согласен, миграция потребует значительного времени.
Мацумото в своем докладе обещал к концу этого года.
А если на время моего комментария и появления того топика посмотреть?)
Странно, что первым делом не портировали на мак. В свете сегодняшнего запуска Mac App Store было бы очень кстати.
Что-то мне подсказывает, что нетбуков будет 65536 :)
> в Objective-C все методы public (точнее говоря, в нем вообще нет разделения методов по уровням доступа).

А как же @private, @protected, @public?
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва и Московская обл., Россия
Зарегистрирован
Активность