Перейти к публикации
Форум - ComputerCraft
swg2you

bibi или удобство разработки eeprom-кода и операционных систем

Рекомендованные сообщения

Писать программы для eeprom - то еще занятие. Попробуем облегчить этот процесс.

  • в \config\OpenComputers.cfg устанавливаем bufferChanges=false
Это отключит буферизацию, и все изменения файлов в каталогах сохранения будут немедленно отображены внутри игры
  • Загружаем игру в сингл, строим себе базу, ставим там компьютер, и инсталлируем на него OpenOS.
После этого, в каталоге \saves\%save_name%\opencomputers\ появится UID нашего виртуального "винчестера", со всем содержимым
  • Записываем туда файл bibi
local gpu = component.proxy(component.list("gpu")())
gpu.bind(component.list("screen")()) 

local cy=1
prn=function(...)
  local t={...}  
  for i=1,#t do t[i]=tostring(t[i]) end
  gpu.set(1,cy,table.concat(t, ' '))
  cy=cy+1
end

local readfile=function(f)
  for addr in component.list("filesystem") do
    local fs=component.proxy(addr)
    local h=fs.open(f)
    if h then
      --костыль для init.lua
      computer.getBootAddress=function() return addr end
      local s,r='',''
      while r do
        r=fs.read(h,math.huge)
        s=s..(r or "")
      end
      fs.close(h) 
      return s,f
    end
  end
end

prn('bibi: press a key to force init.lua') computer.beep(440)
local s,f=readfile('boot.lua')
if ({computer.pullSignal(1)})[1]=='key_down' or not s then 
  s,f=readfile('init.lua')
end

if s then
  local r,e=load(s,f)
  if r then r,e=pcall(r) end
  prn('bibi:', r, e)
else
  prn('bibi: no file')
end

prn('bibi: press a key to reboot')
repeat until ({computer.pullSignal()})[1]=='key_down'
computer.shutdown(true) 
  • И файл boot.lua
prn('Hello world', nil~=false)
После чего в OpenOS делаем:
  • flash -q bibi bibi
  • reboot
h_1434835970_5235428_e2d021c481.png

 

Наблюдаем наш хелловорлд и убеждаемся, что nil и false - это две большие разницы:

 

h_1434837050_8115362_ab38e16a39.png

 

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

В одном окне блокнот с кодом, в другом - майнкрафт с нашим виртуальным компьютером. Написали-сохранили-проверили.

---

Ошибки компиляции нашего кода будут выглядеть так:

h_1434837050_7948091_48364a2896.png

 

Ошибки выполнения так:

h_1434837050_1573462_b1d2246271.png

  • А если нам захочется в OpenOS то мы нажмем секретную кнопку "а кей" когда наш bibi пискнет при старте.
Также в OpenOS мы попадем если bibi не найдет файла boot.lua. А если и init.lua не найдет, то скажет "no file" и будет ждать когда мы исправим ситуацию

 

ЗЫ

Не злоупотребляйте prn(), она очень служебная и не умеет scroll, конечно scroll это всего лишь условие и две строки, но зачем?!

Пишите свои prn-ы с преферансом и барышнями, предварительно поиграв ну хотя-бы с таким вот хелловорлдом:

 

boot.lua для экспериментов:

--биндим гпу со скрином
local gpu = component.proxy(component.list("gpu")())
gpu.bind(component.list("screen")())

--стираем
local sw, sh = gpu.maxResolution(); gpu.fill(1,1,sw,sh," ")

--наши прн-ы с преферансом но без барышень
function prnto(x,y,...)
  local t={...}
  for i=1,#t do t[i]=tostring(t[i]) end
  gpu.set(x,y,table.concat(t, ' '))
end

local cy=1
function prn(...)
  prnto(1,cy,...)
  if cy==sh then
    gpu.copy(1,1,sw,sh,0,-1)
    gpu.fill(1,sh,sw,1," ")
  else
    cy=cy+1
  end
end

--хелловорлдим
prn('Hello world', nil~=false)

--глобалим
for k,v in pairs(_G.component) do prn(k,v) end

--компонентим
for k,v in component.list() do prn(k,v) end

--ииииииии
while true do
  local e={computer.pullSignal(.833)}
  
  --часики-и-и
  local s=tostring(math.floor(computer.freeMemory()/1024))..'/'..tostring(computer.totalMemory()/1024)..' kb free '..os.date('!%R')
  prnto(sw-#s+1,1,s)

  --ну и прочие эвенты с юникодами
  if e[1] then 
    e[2]=tostring(e[2]):sub(1,3)..'~' -- обрезаем адрес компонента
    prn(table.unpack(e))
    if e[1]=='key_down' and e[3]~=0 then prn(unicode.char(e[3])) end
  end

  --а по тильде (~) все сначала
  if e[1]=='key_down' and e[4]==41 then computer.shutdown(true) end
end

 

Изменено пользователем swg2you
  • Like 5

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ошибки компиляции нашего кода будут выглядеть так:h_1434837050_7948091_48364a2896.png

Lua - интерпретируемый язык, компиляции там нет. В твоём случае это ошибка синтаксиса. Тех кто называет Lua компилируемым языком нужно сжигать на костре.

Изменено пользователем LeshaInc
  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Lua - интерпретируемый язык, компиляции там нет. В твоём случае это ошибка синтаксиса. Тех кто называет Lua компилируемым языком нужно сжигать на костре.

Видимо человек так себе это представляет, хотя и не правильно.

Изменено пользователем NEO
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Брысь отсюда!  )

Идите маны покурите и матчасть почитайте если нечего по делу сказать. Ишь ты, какие критиканы!

Или самосожгитесь там, на костре из собственного невежества, самоуверенности и слепых заблуждений. )

:D

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитаты из wikipedia.org:

  • "Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду."
  • "Результатом работы компилятора может быть программа на специально созданном низкоуровневом языке, подлежащем интерпретации виртуальной машиной. Такой язык называется псевдокодом или байт-кодом."
  • "Интерпрета́ция — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения)"

Цитата из описания load в официальной документации на lua.org:

  • "If there are no syntactic errors, returns the compiled chunk as a function; otherwise, returns nil plus the error message."

Своими словами:

  • load - компилирует текст программы в байт-код. Ком-пи-ли-ру-ет! Поэтому его ошибки это ошибки ком-пи-ля-ци-и.

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

--==--

Брысь отсюда!  )

Идите маны покурите и матчасть почитайте если нечего по делу сказать. Ишь ты, какие критиканы!

Или самосожгитесь там, на костре из собственного невежества, самоуверенности и слепых заблуждений. )

Каждый компилятор после своей работы оставляет файл с машинным или байт кодом.

А интерпретатор может упрощать конструкции что бы постоянно не анализировать.

У тебя бомбит :smile3:  :smile3:  :smile3:  Есть специальный компилятор LuaJIT http://luajit.org, а в OC стоит просто Lua interpreter.

Который интерпретирует.

Изменено пользователем NEO
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Каждый компилятор после своей работы оставляет файл с машинным или байт кодом.

А интерпретатор может упрощать конструкции что бы постоянно не анализировать.

У тебя бомбит :smile3:  :smile3:  :smile3:  Есть специальный компилятор LuaJIT http://luajit.org, а в OC стоит просто Lua interpreter.

Который интерпретирует.

Ух приставучий. Иди учись. Не трать моё время!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ух приставучий. Иди учись. Не трать моё время!

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

Ты не понял термина, ну бывает.

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

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Ты не понял термина, ну бывает.

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

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

Пойду я, а то у меня еще мой коблоужас на сервере не достроен.

Еще рас прошу извинить и, надеюсь, мир?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ребята, давайте жить дружно!

Пусть у swg2you Луа компилируется, а у NEO - интерпретируется.

:D

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Totoro, Ты хочешь сказать что swg2you должен написать компилятор Lua?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не пашет этот bibi, ошибка: boolean ожидается, передано string. Я ошибку не нашел, извольте исправить, автор)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не пашет этот bibi, ошибка: boolean ожидается, передано string. Я ошибку не нашел, извольте исправить, автор)

Серж! Мне вот интересно, есть на форуме темы, которые ты не апнул. Тебе медаль некропостера уже давать надо. Ну тут еще крипер с ним. Тема программная, баги автору и т.п. Это хорошо, что там баг нашел.

 

Но 99% тем ты апаешь вообще просто так, типа мол, о, прикольно, или, мол, я тоже это когда-то хотел сделать. При чем темы чаще всего находишь, которые сдохли полгода-год назад :)

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×