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

RccHD

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

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

  • Посещение

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

    13

Все публикации пользователя RccHD

  1. Как определить "графическую" ширину пикселя? Например "х" имеет ширину 1, а какой-нибудь иероглиф -- ширину 2
  2. Реализовал часть функций оконного менеджера. Реализовал переключение окон
  3. Эти змейки почти идеально подходят для тестирования моего оконного менеджера. Так как в них использованы самые разные функции (gpu, term, event)
  4. Это что за программы? Есть пример? Я привык, что всегда нужно pullSignal писать в программе, чтобы она работала
  5. Есть пример рабочей реализации? Чтобы две-три программы работали, рисовали графику. Я бы посмотрел исходники
  6. Вот я как раз этим и занимаюсь. Я для грандиозности утверждаю что 'пишу новую офигенную операционку', на самом деле это называется 'дорабатываю/переписываю OpenOS' Отсюда и полная совместимость программ на OpenOS с моей операционкой
  7. Вы тут обсуждаете локальные переменные, а лучше бы помогли найти подводные камни идеи запуска нескольких приложений
  8. Вот еще интересный, красочный пример. Запустил две змейки на одном компе: Проблема только в том, что обе змейки реагируют на нажатия клавиш, но эта проблема легко решаемая P.S. Программу "змейка" я скачал с форума и запустил в своей ОС без каких-либо доработок
  9. Приведи пример такой коллизии. Я пока не придумал ни одного
  10. Осталось только сделать так, чтобы программа реагировала на события клавиатуры и мыши только тогда, когда мы переключились на нее. Ну, это легко, вроде бы
  11. Реализована возможность запуска нескольких программ одновременно!!! В этом примере каждая программа запущена в отдельном окне 10х10 символов. Это 2 одинаковых программы. Эта программа будучи запущенной в "одиночном" режиме занимает все окно: Примечание: в скиншоты попал мой терминал(фиолетовая область). Я криворукий и мне лень переделывать Программы запущены в эмуляторе, так что они работают намного быстрее. Пока еще не тестил в майне
  12. Всегда считал, что переменные(они же указатели на объекты) не могут занимать много памяти... Хотя бы потому что исходники библиотек OpenOS прямо-таки напичканы переменными. Может дело все-таки не в таких мелочных деталях как переменные, а в самой реализации? function buffer:readLine(chop, timeout) self.timeout = timeout or (computer.uptime() + self.readTimeout) local start = 1 while true do local buf = self.bufferRead local i = buf:find("[\r\n]", start) local c = i and buf:sub(i,i) local is_cr = c == "\r" if i and (not is_cr or i < #buf) then local n = buf:sub(i+1,i+1) if is_cr and n == "\n" then c = c .. n end local result = buf:sub(1, i - 1) .. (chop and "" or c) self.bufferRead = buf:sub(i + #c) return result else start = #self.bufferRead - (is_cr and 1 or 0) local result, reason = readChunk(self) if not result then if reason then return nil, reason else -- eof result = #self.bufferRead > 0 and self.bufferRead or nil self.bufferRead = "" return result end end end end end
  13. По поводу моей субъективной оценки твоего кода: Я вот такие вещи вообще видеть не могу, это вообще не по-человечески так писать: changes[buffer.currentFrame[index]] = changes[buffer.currentFrame[index]] or {} changes[buffer.currentFrame[index]][buffer.currentFrame[indexPlus1]] = changes[buffer.currentFrame[index]][buffer.currentFrame[indexPlus1]] or {} table.insert(changes[buffer.currentFrame[index]][buffer.currentFrame[indexPlus1]], x) table.insert(changes[buffer.currentFrame[index]][buffer.currentFrame[indexPlus1]], y) table.insert(changes[buffer.currentFrame[index]][buffer.currentFrame[indexPlus1]], table.concat(sameCharArray)) Когда я вижу подобный код, я начинаю думать: 1) У автора этого кода паническая боязнь переменных(или он проспорил кому-то) 2) Автор думает, что любая созданная переменная занимает гигабайты в оперативке, поэтому их не использует 3) У автора Крутой Продвинутый Текстовый Редактор ™, который позволяет написать "buffer.currentFrame[index]" сразу в трех местах Так как я не фанат различных навороченных редакторов текстовых редакторов и не боюсь переменных и знака "=", я бы написал этот код вот так: local el0 = buffer.currentFrame[index], el1 = buffer.currentFrame[indexPlus1] changes[el0] = changes[el0] or {} changes[el0][el1] = changes[el0][el1] or {} table.insert(changes[el0][el1], x) table.insert(changes[el0][el1], y) table.insert(changes[el0][el1], table.concat(sameCharArray)) По поводу нагрузки на ЦПУ: писать "buffer.currentFrame[index]" плохо так как система будет каждый раз выполняет следующие действия: 1) получает значение переменной "buffer" 2) получает поле "currentFrame" объекта "buffer" 3) получает поле "index" объекта "buffer.currentFrame" А если хранить это значение в переменной, то будет одно действие: 1) получает значение переменной "el0"
  14. Во, первых это ты сам решил что "все программы придется адаптировать", я такого не писал Я постараюсь написать такую ОС, на которой можно будет запустить большинство программ без доработки
  15. Надеюсь, что мне не надоест разрабатывать эту OC, иначе будет еще одна R.I.P операционка Планирую закончить разработку максимум через месяц. По истечении этого времени, я либо выложу готовый результат/альфа-версию, либо забью на разработку P.S. я школьнег и мне кроме написания OC еще учиться надо
  16. Чтобы бы там не говорил Fingercomp по поводу написания своих ОС, я таки пишу свою ОС Планы такие: 1) разработать операционку с многозадачностью на основе OpenOS с полной совместимостью 2) запуск нескольких программ одновременно(в том числе графических) 3) возможность разбивки экрана на прямоугольные зоны для предоставления программам доступа к этим зонам(программы не будут рисовать графику вне предоставленной зоны) 4) буферизация графики с ускорением отрисовки (как у ECS). Я не стал брать либу от ECS потому что она использует другие либы того же автора и потому что реализована эта библиотека довольно коряво в плане стиля написания кода(мое личное мнение). В общем, я переписал либу ECS с нуля под нужды операционки, кол-во кода сократилось в 5 раз. Все программы написанные на моей OC будут иметь "графическое ускорение" по умолчанию. Пункты 2 и 3 фактически уже закончены(по-крайней мере мне так кажется) Буферизация(пункт 4) работает прекрасно, отрисовка графики в некоторых случаях может быть в 3-15 раз быстрее(относительно gpu api) Также планируется написать несколько очень простых программ для демонстрации возможностей ОС В частности, хочу реализовать ОЧЕНЬ сильно урезанную реализацию моего любимого оконного менеджера xmonad Важно: все OpenOS-программы можно будет запустить на моей OC
  17. Хочу предложить вариант серверной Было бы круто если бы был такой улей-серверная(админский приват около спавна). В этом улье стоял бы чанклоадер, а сама серверная была бы оформлена в виде большого футуристичного здания с комнатами внутри(я бы сделал стеклянные перегородки между комнатами). Игроки могли бы за тугрики арендовать комнатку в серверной. Круто то, что игроки-кодеры могли бы собираться в одном здании, сделанном специально для них. Главное правило пользования серверной: в ней можно ставить только компы и декор. блоки Чтобы никто не ставил там лагучие механизмы-печки. Я считаю, что такая серверная способствовала бы появлению разных публичных сетей и онлайн-сервисов на сервере Почему просто не купить чанклоадер? Ну потому, что на него игроку придется копить довольно долго(> недели, вроде бы) А вторая причина -- это возможная нагрузка на сервер. Ведь если 10 игроков держат свои онлайн-сервисы, то они в сумме грузят аж 10 чанков В случае с серверной все проще, грузится 1 чанк
  18. каждый понимает по-своему Вы считаете, что нужно все методы наследовать, а я считаю что не обязательно наследовать именно все методы. Лучше выборочно
  19. Я имел в виду, что реализовывать singleton в Lua не нужно
  20. Ну и как вы бы реализовали singleton?
  21. С чего вы взяли что мне оно не нравится? Оно скорее вам не нравится, так как там нет public static protected friendly Нет, потому что в моей реализации нет наследования в том виде, к которому вы привыкли. В моей реализации можно выборочно наследовать конкретные методы Чего ж вы так не любите Lua, что стандартные области видимости языка вам кажутся костылями? Те, кто пишут на C++ и Java пусть используют private и protected и т.п. В таком языке как Lua private и protected выглядят просто по-извращенски Представьте себе, что есть объекты Rect, Triangle и Line. У всех этих объектов может быть общий метод Rotate(x, y, z, angle), который будет унаследован у Figure_prototype.Rotate В Lua это не нужно. Если коротко, то вот так local myClass = Class({ __init__ = function(self, x) self.x = x end, strange_method = function(self, y) local myObj = self.__new__(y) myObj.desc = "Объект типа myClass" return myObj end })
  22. А в чем собственно проблема? Вот так это делается: local customClass = function(...) local obj = BaseClass(...) obj.SOME_CONSTANT = 42 return obj end
  23. Хорошая идея. Наверное так и сделаю
  24. АХ, ДА, СОВСЕМ ЗАБЫЛ Если вдруг у кого-то возник вопрос "а где private? а где public? а где local private protected?", то вот вам реализация ваших любимых private и public 1. public (публичные параметры, которые доступны другим классам) указываются в функции __init__ . То есть в конструкторе класса(все очень просто) 2. private (в моей библиотеке не реализованы области видимости для "приватных" параметров, но зато такие области видимости реализованы в Lua) Это намек на то, что не нужно усложнять код, а вместо этого стоит использовать уже реализованные области видимости языка Lua Для этого нужно обернуть код класса в do..end, таким образом создав для этого класса изолированную область видимости Пример: local Class = require("class") local myObject do local secretString = "это приватная меременная без всяких заморочек" myObject = Class({ -- класс без конструктора publicString = "а это публичная переменная!!!" }) end -- Создание экземпляра класса myObject local obj = myObject() print(obj.publicString) -- Выведет "а это публичная переменная!!!" print(obj.secretString) -- выведет "nil", так как это приватная переменная класса 3. А любителям всяких там "local private protected friendly" и прочих извращенских протектед-статиков (привет Java и C++) я ничего не могу предложить. Так как я не решился реализовывать настолько извращенские вещи, хотя бы потому что я не мазохист и никогда не стану это использовать на практике Лично мне простых public и private хватает Надеюсь я не задел ни чьи религиозные чувства!
×
×
  • Создать...