Перейти к содержимому

swg2you

Пользователи
  • Публикации

    219
  • Зарегистрирован

  • Посещение

  • Победитель дней

    20

Сообщения, опубликованные пользователем swg2you


  1. А если взять голопроекторы, то память эффектней и эффективней +понтов больше

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

  2. Мой первый пост был именно о проблеме нулевого. Я и на вопрос ответил.

    Вопрос не в том, что выведет, это легко проверить запустив,а скорее в том, почему так происходит.

     

    Тут явно происки нечистой силы )

     

    А "костыли" действительно вовсе не костыли. Просто "a and b or c" подобен классическому тернарному оператору, но не является им. Его логика сложнее.


  3. О, какое же это удовольствие, указать более опытному программисту что он не прав.

    Ты не прав! Пруф: http://ideone.com/VGZGSo   :P

     

    В луа выражение "а and b or c" является заменой строчного условного оператора "a ? b : c" в других языках, например С++, за исключением случая, описанного мной.

    Заставил меня бежать и проверять )

     

    Действительно, я перемудрил с возвратом А, правильное прочтение конструкции A and B or C будет:  "Если А истинно, то вернуть B или С, иначе вернуть С"

     

    Эквивалентная конструкция:

    if A then
      if B then
        B
      else
        C
      end
    else
      C   --!
    end
    

    Поэтому, A and B or C ну никак не замена  "a ? b : c"

     

    И как верно подметил, eu_tomat, при расстановке скобочек поведение становится более очевидным.

     

    Перефразирую короче. Выражение (a and b or c) следует читать как ((a and b) or c)

    Очевидно, что в этом случае при b==false и b==nil всегда будет возвращаться c

    Но повторюсь, ошибка возникает не из-за игнорирования правил приоритета а из-за неверного прочтения конструкции.

     

    upd:

    Исправил пост, по вашим замечаниям.

     

    Надеюсь с псевдо-булями разобрались ) Но у нас почему-то ни слова о проблеме указанной в первом посте )


  4. Прошу обосновать это утверждение.

    And стоит перед or. Он и так выполняется первым. Правила приоритета не применяются и никак не влияют на результат.

     

    Ошибка заключается в "неверном чтении" конструкции.

     

    И это, действительно, как выразился @Krutoy, - Подводный камень.


  5. Этот камень очень даже надводный. Во всех известных мне языках программирования операция and имеет приоритет над or. Соответственно, (true and b)==b, а учитывая твои условия, (true and b or c)==c.

    Приоритет здесь не при чем.


  6. Я даже без тестов в интерпритаторе знаю, последний вариант выдаст 1, 4.

    Не помню, но кажется даже в документации где то написано, что ... можно писать только после последней запятой. Хотя я это узнал на собственном опыте.

    Это да, синтаксис языка определяет список параметров функции:

    • parlist ::= namelist [‘,’ ‘...’] | ‘...’

    Но при чем здесь ‘...’ ? о_О

     

    У меня его нет нигде, разве что в названии темы )

    Кроме названия темы конечно )

    А еще, вот какой есть подводный камень:

    return a and b or c
    Казалось бы, "если а то вернуть b иначе c", но при этом если b == nil или false то всегда возвращает с.

     

    Так нельзя читать. Нужно читать "Если А истинно, то вернуть B или С, иначе вернуть С" --!

     

    Конструкция A and B or C является заменой сложного условия:

    if A then
      if B then
        B
      else
        C
      end
    else
      C   --!
    end
    

    Запомнить логику этих псевдо-булевых операторов можно на простых примерах:

    print(1 and 2)        -->2
    print(false and nil)  -->false
    
    print(1 or 2)         -->1
    print(false or nil)   -->nil

    И не забывать про короткие вычисления, когда в качестве операндов пишем функции.

     

    upd: --! исправлено по замечаниям Krutoy и eu_tomat


  7. Всё-таки не только Кузнец, но и - Путешественник (Бродяга). :smile9: :)

    П.С. Перешёл по ссылке на Ттюх, почитал. Хотел откоментить, а - немогу. :blink:  А потом глядь, а то :facepalm:  архив :D .

    Ттюх пережил упадок и раскол, и сейчас далеко не лучшие времена. Но остался в сердце ) Много гигантских проектов делали там. Целые города возводили.

     

    Часть ребят ушла и создала новый проект GameComa, сути распада не знаю, я тогда в ТФК общины возводил, но намного позже, меня старый знакомый обратно потянул и на Lif подсадил, правда хватило всего на пару недель. Да и то, в основном в движке Torque 3D ковырялся да скрипты писал.

     

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


  8. Да рассказик с астронавтами, ну просто, почти "Шекли" :)

    Оу! Спасибо за сравнение с таким мэтром, но мне до него далеко.

     

    Да и непостоянно это, непрофессионально. Бывает увлекаюсь чем-то и проявляется графоманский зуд, тогда и пишу, а публикуюсь на форумах проектов которыми увлечен.

     

    Немножко в теме по созданной общине RedMiner писал, при создании и дальше по всей теме, потом после вайпа был рассказик в продолжение той же темы. Потом увлекся TFK и уже на другом сервере реинкарнировал общину, с соответствующими зарисовками в прозе. Затем увлекся LiF, мод писал и немножко вел свой раздел по скриптингу, иногда графоманя, а сейчас вот на Lua подсел, и сюда перебрался. Поближе к единомышленникам.

     

    Есть еще отдельный сайт, http://drabont.net/ посвященный размышлению о будущем человечества с прозовым изложением идеи. И личный блог, с философской поэзией и прозой, но он для близких людей.

     

    Еще раз благодарю за сравнение с мэтром. Мне очень приятно.

    • Нравится 1

  9. Может вообще замутить память на редстоун-ячейках памяти? Вон один Кулибин строил схему с 1кб, мы пойдём дальше, залагодромим весь сервер и построим 128кб.

    Злой ты.

    А на редстоуне и процессор можно замутить если захотеть. Но нужно ли?


  10. Способ хранения и обработки информации, в условиях отсутствия жесткого диска.  :)

    Отличный способ ) Можно еще проще, на бумажке писать и там-же вычислять. 

    Беда в том, что время ограничено, а вычисления очень трудоемкие. Не успеют вручную обсчитать.

    Ну, точно же! Робот с булыжником в инвентаре и геосканер. Будем хранить инфу в толще породы.

    Можно и без геосканера обойтись. Только скорость чтения сильно упадет.

    Идея отличная, но нет робота, и булыжника нет. )

    Из компьютерной техники только системник без винта, монитор, клавиатура и дискетка OpenOS. И ресурсы для крафта.

    А нужно 100 000 байт энергонезависимой памяти.


  11. А что, идея классная! Если заделаешь файловую систему на мониторе, или еще лучше, расширитель для текущей файловой системы, прославишься.

    Еще, мониторы можно красить и ставить впритык. Итого до ~12 мониторов на один комп, что почти 300кб. 

    Ну, это не идея а гипотетическая возможность увиденная в процессе изучения работы монитора. )

     

    Комикс хороший, но я не понял как он относится к теме.


  12. Жаль, что на практике не применимо, дискета дешевле и объем больше.

    А так, идея классная.

    Применимо-применимо )

     

    Пролог:

    • Команда астронавтов под руководством офицера по кличке "Йошкин Кот", взяв с собой очень много различных ресурсов отправилась на луну для постройки большой суперсовременной базы.
    • Вы, молодой но опытный программист Василий, летите с командой в качестве главного программиста.
    • Для проведения расчетов при постройке базы, и расчетов обратной траектории полета вы взяли с собой рабочий компьютер.
    • Компьютер отличный: корпус Т3 со встроенным дисководом, большой монитор Т3 и удобная клавиатура. Правда еще в прошлом месяце вы втихаря сняли с него емкую планку памяти поставив взамен две Т1, но рабочим программам столько не нужно было, а дома у вас не запускалась новая игра.

    Прилетаете вы на луну, при посадке случается небольшое ЧП - ломается радио-модуль и связи с землей нет, но это не беда, команда вполне автономна, и успешно разворачивает небольшую временную базу с солнечными панелями, складом-мастерской, регенераторами кислорода, санитарно-кухонным блоком и спальней.

     

    Команда приступает к постройке основной базы, а вы начинаете распаковывать свой компьютер и с ужасом вспоминаете, что перед отлетом, сняли винчестер, чтобы скопировать домой скачанную на работе коллекцию интересного видео, и в суматохе забыли поставить его обратно.

     

    Заметив замешательство на вашем лице, к вам подходит командир миссии.

    - Что случилось, Василий?

    - Гм... Я это, я винт забыл...

    - Так возьми на складе, мы с запасом набрали, винтов, болтов, гаек, чего душе угодно.

    - Эм-м... Не такой винт... Винчестер в смысле, накопитель. Жесткий магнитный диск.

    - Винт, диск, жесткий, мягкий не морочь мне голову своими штучками, скажи что это значит.

    - Это значит, что я не смогу сделать расчеты для постройки реактора, - Василий замялся,- и рассчитать обратную траекторию полета тоже не смогу...

    Лицо Йошкина кота потемнело.

    - Получается мы не сможем вернуться?

    - Получается да.

    - И реактор не сможем поставить?

    - Угу.

    - И энергия на регенерацию у нас есть только до захода солнца, выходит?

    - Выходит что так... 

    - А после погибнем?

    - Да.

    - Из-за того, что ты забыл какую-то свою железку, погибнет вся экспедиция?

    Василий потупил взгляд и переминался с ноги на ногу, затем встрепенулся и выпалил, - Идея!

    - Я дискетку сделаю, а софт для расчетов весь напишу. Он не сложный. Благо дискетка с осью, ну, в смысле с операционной системой, у меня всегда с собой на всякий пожарный.

    - Это как-раз пожарный. Даже очень пожарный... Жизненно... Что тебе для этого нужно?

    - Да мелочь: кусочки железа, бумага, дерево и булыжник.

    - Булыжник?

    - Ну да, булыжник... а что?

    - У нас всего полно, но лунные базы из булыжника не строят. Металл любой есть, стекло, алмазы, дерево, бумага, все что хочешь, даже взрывоустойчивый обсидиан есть, но булыжника и глины нет!

    - Гмм... Что же делать? Весь софт для расчетов занимает ровно 100 000 байт, и такой хитрый что никак не сжимается. А дискетка с осью - ридонли... Может в памяти виртуальный диск создать, главное компьютер не выключать, а я за сотню часов все напишу - программист вспомнил про снятую планку, и начал прикидывать, сколько сможет выделить на виртуальный диск.

    - Не выключать не выйдет. Ты учти, что солнечные панели дают мало, а регенераторы кислорода берут много. Каждых 4 часа, как запускаются, вся энергия на них. В базе даже свет тухнет. 

    - Я что нибудь придумаю. Обязательно!

    Командир хмуро посморел на Василия.

    - Сейчас у нас утро, так что у тебя есть пару недель до захода солнца. Пока есть время - думай!

    И на этих словах Йошкин Кот, повернулся и пошел к шлюзовому отсеку. Перед выходом обернулся и сказал, - Команде об этом ни слова. Пусть спокойно работают.

    --==--

     

    Решений несколько, но эта экспромт-задачка для тру кодеров)

    • Нравится 5

  13. Хм... Это теория, хочу увидеть на примере. В каких случаях монитор очищается? Пререподключение gpu стирает же все или нет?

    Не стирает )

    Если сделать:

    prn('Hello')`
    gpu.bind(component.list("screen")())
    

    наше хелло останется на экране.

     

    upd:

    Правда с utf-8 я погорячился. С "узкими" символами (например unicode.char(0x1F00)) все в порядке, но при выводе "широкого" символа (например unicode.char(0x1000)) следующее знакоместо затирается пробелом.

    Т.е. Если вы сделаете:

    gpu.set(2, 1, '!')
    gpu.set(1, 1, unicode.char(0x1000))
    
    c=gpu.get(2,1)
    prn(c,string.byte(c))
    

    то вопреки ожидаемому выводу "! 33" мы получим "  32", пробел и код пробела.

     

    Довольно важная но недокументированная особенность!


  14. Монитор хранит символы, пока их не перезапишут или не разрушат блок. Чем не стационарный накопитель?!
     
    Пример:

    • монитор 3-го уровня имеет 150*50=8000 знакомест. 
    • а если еще вспомнить, что он умеет двухбайтовый utf-8...
    • а если еще вспомнить, что знакоместо имеет 2 цвета...

    Получается:

    • монитор 3-го уровня - 8000*(2+2) = 32 000 байт
    • монитор 2-го уровня - 2000*(2+1)=6 000 байт
    • монитор 1-го уровня - 800*2+800*2/8=1800 байт

    Вывод:

    • Выбрасывайте винты, юзайте мониторы crazy.gif
    • Нравится 7

  15. Чего не поверим? Поверим!   Это называется юношеское желание максимально переменить мир и создать что-то архиграндиозное  -  объять необъятное.

    ...cut...

    Ну и фраза: "Но потом господин сябро решил написать OS на луа"  как-то устрашающе звучит. Правильнее не решил НАписать, а скорее решил писать, а еще правильнее - решил создать тему о намерении писать "свой ОС". :D 

    Ы

    Предлагаю учредить "орден имени Сябро"

    • Нравится 1

  16. На практике, большинство затей "а давайте свою СуперОС напишем, и чтоб она лучше всех была!!!111" начинаются и заканчиваются на стадии рисования самой_лучшей_загрузочной_заставки, единицы добираются до кнопки "пуск" копируя угловатые стереотипы.

     

    Но черт возьми. Ребята! Мы же здесь кажется в кубики играем, разве нет? )


  17.  

    Да, это выполнялось в самом чистом Луа, который мне удалось найти.

    А что если сделать как-то так:

    a=1
    e={print=print, a=2}
    e.load=function(str) return load(str,nil,nil,e) end
    load(" print(a) load('print(a)')()",nil,nil,e)() 

    именно так. но чуть менее грубо.

    e.load=function(c,s,m,g)
      return load(c,s,m,g or e)
    end

    чтобы все параметры обрабатывались, а среда по умолчанию бралась из среды выполнения.

     

    там еще вроде с _ENV можно сыграть, но я в нем пока не разобрался.

×
×
  • Создать...