Re[4]: Что мы потеряли?
От: _rasta  
Дата: 04.09.06 07:36
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

M>>В чем же отличие.. ах да.. "*" и "+" намного сложнее воспринимаются чем multiply и add. Но я думаю к этому можно привыкнуть

M>>Равно как и к замене <> на ()
LCR>Твои мысли удивительным образом пересекаются с
LCR>The Nature of Lisp

говорили мне что это все очередной баян... придумали баян и радуются, а я не верил...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Что мы потеряли?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.09.06 08:13
Оценка: 20 (1)
Здравствуйте, Геннадий Васильев

ГВ>Твой пример, кстати, иллюстрирует одну особенность REPL. Заменяется неактивный в данный момент объект. Обрати внимание на последовательность выделенных слов:


ГВ>

ГВ>Вначале вызываем метод hello у объекта t класса Test. Получаем то, что и было сразу реализовано в классе Test.
ГВ>Затем через eval расширяем класс (Стоп! В этот момент в нашем контексте нет активного обращения к t — Г.В.) Test и добавляем метод bye. Вызваем его у уже существующего объекта t. Получаем ожидаемый результат -- вызов нового метода.


Гена, ты не прав
Вот простейший пример модификации методом самого себя (из работающего проекта):
module So_4
    class LibraryMode
        include Singleton

        ...

        def static?
            static_mark_exists = File.exists?( '.so4.static' )
            MxxRu.show_brief( "detecting SObjectizer-4 library mode: " +
                    "#{static_mark_exists ? 'STATIC' : 'SHARED'}" )
            if static_mark_exists 
                Oess_1::LibraryMode.instance.force_static
            else
                Oess_1::LibraryMode.instance.force_shared
            end

            self.class.class_eval %Q{ def static?; #{static_mark_exists}; end }
            static_mark_exists
        end

        ...
    end
end

Метод static? должен отрабатывать только один раз -- когда его вызывают впервые. Он должен сделать свои действия, вычислить булевское значение, а затем возвращать его при последующих вызовах. В первый раз он делает именно это. А затем заменяет свое собственное тело для того, чтобы при последущих вызовах вообще ничего не делать.
Без модификации собственного кода потребовалось бы метод оформлять следующим образом:
def static?
  return @static_mark_exists if nil != @static_mark_exists
  ...bla-bla-bla...
  @static_mark_exists = ...bla-bla...
  @static_mark_exists
end

или в более традиционной записи:
def static?
  if nil == @static_mark_exists
    ...bla-bla-bla...
    @static_mark_exists = ...bla-bla...
  end
  @static_mark_exists
end


А вот модификация приводившегося мной ранее примера. Только теперь объект t задействован на отдельной нити, которая в бесконечном цикле дергает его метод long_play:
require 'thread'

class Test
    def initialize
        @restart = false
    end

    def hello
        puts "Test#hello"
    end

    def restart
        @restart = true
    end

    def long_play
        puts "Entering long play"
        puts "calling hello..."
        hello

        until @restart
            sleep 0.1
        end
        @restart = false
        puts "Leaving long play"
    end
end

REQUIRE_REGEX = /require [\'\"]([^\'\"]+)[\'\"]/
CALL_METHOD_REGEX = /call ([[:alnum:]]+)/
EVAL_REGEX = /eval (.+)/
RESTART_LONG_PLAY_REGEX = /restart/

def exception_guard
    begin
        yield
    rescue StandardError => x
        puts x
    end
end

t = Test.new

Thread.new do
    while true
        t.long_play
    end
end

print "=>"
while line = gets.chop
    if "quit" == line
        break
    elsif line =~ REQUIRE_REGEX
        exception_guard do
            require REQUIRE_REGEX.match( line )[ 1 ]
        end
    elsif line =~ CALL_METHOD_REGEX
        exception_guard do
            m = t.method( CALL_METHOD_REGEX.match( line )[ 1 ] )
            m.call
        end
    elsif line =~ EVAL_REGEX
        exception_guard do 
            eval EVAL_REGEX.match( line )[ 1 ]
        end
    elsif line =~ RESTART_LONG_PLAY_REGEX
        t.restart
    end

    print "=>"
end


А вот результат работы (жирным я выделил наиболее важные моменты):
Entering long play
calling hello...
Test#hello
=>eval t.restart
=>Leaving long play
Entering long play
calling hello...
Test#hello                # <= здесь отработал старый вариант t.hello
require 'test_modification'      # <= обновление Test#hello
=>restart
=>Leaving long play
Entering long play
calling hello...
updated Test#hello
Test#hello                   # <= отработал новый вариант t.hello
require 'test_modification_long_play'  # <= теперь заменяем сам Test#long_play
=>restart
=>Leaving long play                    # <= это конец старого метода.
*** This is new long_play  method! *** # <= а вот это уже новый метод.
restart
=>*** Bye! ***
*** This is new long_play  method! ***
eval class Test; def long_play; until @restart; sleep 0.1; end; @restart = false; end; end
=>restart
=>*** Bye! ***                         # <= после очередной замены доработал старый метод
restart                                # <= а вот новый метод ничего не делает.


Содержимое файла test_modification.rb:
module Sample
    def something; puts "Sample#something"; end
end

class Test
    alias :old_hello :hello
    def hello
        puts "updated Test#hello"
        old_hello
    end

    include Sample
end


Содержимое файла test_modification_long_play.rb
class Test
    def long_play
        puts "*** This is new long_play  method! ***"
        until @restart
            sleep 0.1
        end
        @restart = false

        puts "*** Bye! ***"
    end
end


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Что мы потеряли?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.09.06 09:50
Оценка: 27 (2) +2
Здравствуйте, LaptevVV, Вы писали:

LVV>Позволю себе не согласиться...


Да это сколько угодно
Я ведь свое впечатление высказал, не претендуя на истину в последней инстанции.

LVV>Дело не в способностях... Способности как раз практически одинаковые... Те самые — интеллектуальные... Но вот обучение в детстве, очевидно, происходило по-разному... Поэтому и СТИЛЬ МЫШЛЕНИЯ — разный...


Очень может быть. Да вот только меня 10-ть лет в школе учили русскому языку, а научить писать правильно так и не смогли (хотя иногда брались за меня в усиленном порядке). А вот C++-у никто не учил, а получается

Ну да не в этом суть. Не важно по каким причинам, но в каждой из областей есть выдающиеся личности. В программировании это, например, Дейкстра, МакКарти, Флойд, Вирт, Кей, Томпсон, Ричи, Страуструп, Гослинг, Джой, Столман, Уолл, ван Россум, Мацумото, Хальсенберг, Торвальдс, ... Имхо, иначе как элитой программистов их не назовешь. Лего считать "мы все в г..., а есть элита, которая вся в белом" старой банальностью, но лично моей фамилии в данном списке нет и не будет. Даже если я и не понят современниками

А что элитарности, то опять же, личные впечатления. Когда я учился в начале 90-x, то у профессии был некий ореол элитарности: "Ты на кого учишся?" -- "На программиста" -- "О, а это что, что-то по компьютерам?"
Даже в нашей среде термины "исскуственный интеллект", "экспертные системы", "распознавание образов" выглядели как "заумные" и люди, знавшие Lisp или Prolog вызывали уважение (хотя бы потому, что книг и документации по этим вещам не было, приходилось людям как-то выкручиваться и выискивать). И, что интересно, экспертные системы и системы распознавания образов (на Prolog-е с использованием Pascal и C++) в те времена писались и даже внедрялись (например, в некоторые наши больницы и институт радиоционной медицины), т.е. были реально восстребованы. Поэтому у нас, у студентов, был некий пиетет перед "матерыми программистами", поскольку мы с ними сталкивались (вели они у нас спец-курсы) и знали их профессиональный уровень.

Сейчас же практически все знают, что такое "программист". Компьютеры не диковенка. Экспертные системы сейчас кому-нибудь вообще нужны? (Здесь об этом Геннадий Васильев, кажется упоминал). Участь многих выпускников сейчас -- попасть в крупную оффшорную шарагу на сопровождение какой-нибудь корпоративной информационной системы, где придется Web-формочки править или SQL-запросы профилировать. Какая уж тут элитарность? Обычная работа, как раньше инженер у кульмана.

ИМХО, естественно.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Что мы потеряли?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.09.06 10:25
Оценка:
Здравствуйте, FR, Вы писали:

[...]

FR>Возможно, и именно так и работает:


[...]

FR>Он подключится в момент присваивания, но старый метод (активный) не выгрузится пока из него не вернется управление, при этом если в этом старом есть рекурсия то будет вызыватся уже новый метод.


Да, я именно это и имел ввиду.
<< Под музыку: Blackmoore's Night — Greensleeves >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[10]: Что мы потеряли?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.09.06 11:13
Оценка:
Здравствуйте, eao197, Вы писали:

E>Гена, ты не прав

E>Вот простейший пример модификации методом самого себя (из работающего проекта):

Да, согласен и свою неточность уже признал.

Но в сущности, ты показал как раз то, что я ожидал увидеть: чудес не бывает. Сначала управление должно покинуть старые методы, и лишь потом оно сможет попасть в новые.

Понимаешь, изменить ссылку на метод можно без особых проблем. Даже в C++. Сложно обеспечить непротиворечивость системы в переходный момент, если, скажем, перезагружается модуль с некотОрым количеством разных методов внутри. В идеале в это время управление не должно находиться в теле замещаемых методов. Вот это-то как раз самое трудное в горячей замене. Особенно, если модифицируемая система — не stateless.
<< Под музыку: Blackmoore's Night — Play, Minstrel, play >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[10]: Что мы потеряли?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.09.06 11:57
Оценка: 1 (1) +1
Здравствуйте, Дарней, Вы писали:

ГВ>>Речь была не об основаниях, которые позволяют отнести себя к элите, а об её, элиты, взаимоотношениях с окружающими и сопутствующих тараканах.


Д>Для начала надо определиться, кто к этой группе относится. А потом уже думать об их взаимоотношениях


Так eao197 вполне ясно определил
Автор: eao197
Дата: 24.08.06
:

Так вот, люди, которые понимают сложные вещи в своей предметной области и составляют элиту.


Вполне возможно, что их кто-то не понимает. Хотя бывают многочисленные вариации на эту тему.
<< Под музыку: Blackmoore's Night — Magical World >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: Что мы потеряли?
От: Дарней Россия  
Дата: 04.09.06 12:25
Оценка: +1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>

ГВ>Так вот, люди, которые понимают сложные вещи в своей предметной области и составляют элиту.


Ну так я еще раз тебе скажу, что это определение крайне далеко от действительности. Программирование — это работа человека, который создает, а не что-то там "понимает"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[12]: Что мы потеряли?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.09.06 12:28
Оценка: +2 :)
Здравствуйте, Дарней, Вы писали:

ГВ>>

ГВ>>Так вот, люди, которые понимают сложные вещи в своей предметной области и составляют элиту.


Д>Ну так я еще раз тебе скажу, что это определение крайне далеко от действительности. Программирование — это работа человека, который создает, а не что-то там "понимает"




А он хоть понимает, что создает? Или хотя бы осознает, что он делает?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Что мы потеряли?
От: Курилка Россия http://kirya.narod.ru/
Дата: 04.09.06 12:31
Оценка: +3 -1 :))) :))
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>

ГВ>>Так вот, люди, которые понимают сложные вещи в своей предметной области и составляют элиту.


Д>Ну так я еще раз тебе скажу, что это определение крайне далеко от действительности. Программирование — это работа человека, который создает, а не что-то там "понимает"


Конечно, у него же есть чёткая инструкция, по которой он всё создаёт, а думать и тем более понимать — ну нафиг не надо
Re[13]: Что мы потеряли?
От: Дарней Россия  
Дата: 04.09.06 12:44
Оценка: -1
Здравствуйте, eao197, Вы писали:

E>А он хоть понимает, что создает? Или хотя бы осознает, что он делает?


понимание — это условие необходимое, но не достаточное
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[12]: Что мы потеряли?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.09.06 13:24
Оценка: +1
Здравствуйте, Дарней, Вы писали:

ГВ>>

ГВ>>Так вот, люди, которые понимают сложные вещи в своей предметной области и составляют элиту.


Д>Ну так я еще раз тебе скажу, что это определение крайне далеко от действительности. Программирование — это работа человека, который создает, а не что-то там "понимает"


Понимание прокладывает дорогу действиям. Как бы, никто и не сомневается, что создавать — необходимо. Беспокоят обычно другие вопросы: зачем, что и как. А ключ к ответу на них — понимание.
<< Под музыку: Blackmoore's Night — Magical World >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[14]: Что мы потеряли?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.09.06 13:24
Оценка:
Здравствуйте, Дарней, Вы писали:

E>>А он хоть понимает, что создает? Или хотя бы осознает, что он делает?

Д>понимание — это условие необходимое, но не достаточное

Угу. Ещё есть хотение. По-научному — мотивация.
<< Под музыку: Blackmoore's Night — Magical World >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[13]: Что мы потеряли?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.09.06 13:28
Оценка:
Здравствуйте, Курилка, Вы писали:

Д>>Ну так я еще раз тебе скажу, что это определение крайне далеко от действительности. Программирование — это работа человека, который создает, а не что-то там "понимает"


К>Конечно, у него же есть чёткая инструкция, по которой он всё создаёт, а думать и тем более понимать — ну нафиг не надо


Угу, песня программиста:

Не надо думать — с нами тот,
Кто все за нас решит.

Веселые — не хмурые —
Вернемся по домам...

<< Под музыку: Cruachan — Spancil Hill >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: Что мы потеряли?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.09.06 13:32
Оценка: 2 (2)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Понимаешь, изменить ссылку на метод можно без особых проблем. Даже в C++. Сложно обеспечить непротиворечивость системы в переходный момент, если, скажем, перезагружается модуль с некотОрым количеством разных методов внутри. В идеале в это время управление не должно находиться в теле замещаемых методов. Вот это-то как раз самое трудное в горячей замене. Особенно, если модифицируемая система — не stateless.


Вообще-то проблем с заменой кода я особых не вижу. А вот замена структур данных, которая может производится в момент замены кода -- вот это да, тот еще подарочек. Поэтому мне кажется, что REPL хорошо использовать для bug fixing-а в on-line. А вот upgrade лучше выполнять рестартом -- проще и надежнее. И вообще, оказывается, что принцип "fail fast, restart quickly" замечательно работает для обновления систем 24x7 -- быстрый рестарт, в момент которого происходит переход на новую версию ПО, оказывается всего лишь частным случаем общей схемы поведения системы.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: Что мы потеряли?
От: Дарней Россия  
Дата: 04.09.06 13:33
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Угу. Ещё есть хотение. По-научному — мотивация.


а помимо хотения есть еще умение
простое "понимание" в программировании — это то же самое, что "глубокая теоретическая подготовка в области секса"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[16]: Что мы потеряли?
От: Курилка Россия http://kirya.narod.ru/
Дата: 04.09.06 13:41
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>Угу. Ещё есть хотение. По-научному — мотивация.


Д>а помимо хотения есть еще умение

Д>простое "понимание" в программировании — это то же самое, что "глубокая теоретическая подготовка в области секса"

В сексе думать (порой и теоретически) есть вещь далеко не маловажная, позволяющая достичь много большего
Re[16]: Что мы потеряли?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.09.06 13:43
Оценка: :))
Здравствуйте, Дарней, Вы писали:

ГВ>>Угу. Ещё есть хотение. По-научному — мотивация.

Д>а помимо хотения есть еще умение
Д>простое "понимание" в программировании — это то же самое, что "глубокая теоретическая подготовка в области секса"

Ты имеешь ввиду ловкость попадания по Ctrl-Esc? Таки да, умение почти как в сексе.
<< Под музыку: Cruachan — Ride On >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[16]: Что мы потеряли?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.09.06 13:51
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>простое "понимание" в программировании — это то же самое, что "глубокая теоретическая подготовка в области секса"


Интересно, выбор средств контрацепции к области секса относится?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Что мы потеряли?
От: Дарней Россия  
Дата: 04.09.06 14:45
Оценка:
Здравствуйте, eao197, Вы писали:

E>Интересно, выбор средств контрацепции к области секса относится?


примерно настолько же, насколько умение заливать каток относится к умению играть в хоккей
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[18]: Что мы потеряли?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.09.06 14:47
Оценка:
Здравствуйте, Дарней, Вы писали:

E>>Интересно, выбор средств контрацепции к области секса относится?


Д>примерно настолько же, насколько умение заливать каток относится к умению играть в хоккей


Попытка не защитана: заливают катки и играют в хокей разные люди.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.