BearLibTerminal - псевдоконсольное окно для рогалика

Форум библиотеки BeaRLib

Модератор: Apromix

Аватара пользователя
thefish
Сообщения: 22
Зарегистрирован: 18 июн 2012, 22:37

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение thefish » 13 ноя 2019, 20:44

Cfyz писал(а):
13 ноя 2019, 18:39
Думаю я это даже в официальную версию включу, только разве что вместо "." наверное стоит использовать "./lib
Только большая просьба - написать о той папке, куда надо положить blt, чтобы Go её увидел - большими буквами в документации. Будет это lib или ./ - неважно. Я почти неделю доискивался до причин потери видимости либы гошным бинарником =)
Cfyz писал(а):
13 ноя 2019, 18:39
Вообще жаль, что с бинарниками в Go так плохо. Ситуация патовая: в языке нет ни бинарных пакетов (фактически, пакетов вообще нет)
Уже есть. Пакет[1] с фиксированной версией[2] называется теперь модуль, работа с ними командой Появился этот способ с версии 1.12. Вообще существовали и другие (glide, go dep), но с выходом официального инструмента для модулей от разработчиков языка поддержка всего остального прекращена.

Для модулей можно сделать вендоринг - go mod vendor. Более того, заявленные зависимости сразу же выкачиваются, собираются и ждут своего часа.

Вместо Pinvoke тут все-таки CGO с его сообенностями. Но если почитать доки, то не так всё страшно. Скажем приведение в чувство кросс-компиляции (при которой CGO принудительно отключается) под Windows у меня заняло пару часов от силы, и потом все тикает как часики. Если интересно - могу написать про это.
---
[1] Ну да, это по факту снепшот git-репозитория
[2] А это указатель на коммит (ранее) или тег (сейчас)
Но работает прекрасно! =)

Аватара пользователя
Cfyz
Сообщения: 772
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Cfyz » 15 ноя 2019, 16:49

thefish писал(а):Уже есть. Пакет[1] с фиксированной версией[2] называется теперь модуль, работа с ними командой
Ну это не совсем то, это даже не пакет по факту. Ключевой в нашем случае момент, что нет возможности управлять артефактами. Вот например в Python: pip install bearlibterminal -- и о нюансах где там какая dll голова не болит. В Go же подразумевается статическая компиляция, то есть сборка должна давать ровно один артефакт в заранее зафиксированном месте. Собрать бинарник, но "проинсталлировать" и его, и ряд зависимостей -- похоже возможности нет.

Кстати, а с не-бинарными артефактами как в Go дела обстоят? Задача компоновки вместе бинарника, конфигов, документации и т. д. выходит за пределы инструментария языка?
thefish писал(а):Вместо Pinvoke тут все-таки CGO с его сообенностями.
И тут тоже не то =), потому что CGO это не invoke, это честная линковка. И добро пожаловать в мир разных ОС, нюансов и версий компиляторов и их флагов. Хотя в огромном количестве случаев все, что нужно -- это в рантайме найти в библиотеке символ с указанным именем и вызвать его с указанными скалярными аргументами. У них это даже немного есть, но только для Windows и какой-то огрызок. Что мешало сделать это нормально для всех ОС (благо везде плюс-минус одно и то же), как в куче других языков -- мне неведомо.

Кстати поэтому я не понял про кросс-компиляцию и отключение CGO -- линковаться-то все равно надо, а сделать это может только платформо-зависимый инструмент, то есть CGO.
Пытается раскуклиться

Аватара пользователя
thefish
Сообщения: 22
Зарегистрирован: 18 июн 2012, 22:37

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение thefish » 15 ноя 2019, 18:54

Cfyz писал(а):
15 ноя 2019, 16:49
Ну это не совсем то, это даже не пакет по факту. Ключевой в нашем случае момент, что нет возможности управлять артефактами.
go mod как раз и собирает артефакты и кладет их в $GOPATH/pkg/mod/...
Правда в терминах Go артефакт - всего лишь исходники с зависимостями, т.к. длительность компиляции просто мизерная, и можно себе позволить собирать всё с нуля.
Кстати, а с не-бинарными артефактами как в Go дела обстоят? Задача компоновки вместе бинарника, конфигов, документации и т. д. выходит за пределы инструментария языка?
Не очень понял вопроса. Godoc можно писать руками, можно генерировать по исходникам/комментариям/аннотациям (go doc). Почти всё что публикуется на github / bitbucket / google code можно найти здесь.
Бинарники обычно ставятся в $GOPATH/bin прямо командой go get.
С конфигами какой-то общей практики нет, обычно каждый пакет конфигурируется отдельно.
CGO это не invoke, это честная линковка ... Кстати поэтому я не понял про кросс-компиляцию и отключение CGO -- линковаться-то все равно надо, а сделать это может только платформо-зависимый инструмент, то есть CGO.
CGO считается костылём специально для сишных паралитиков вроде меня, и жив еще только потому что есть множество востребованных сишных библиотек. Если сишные зависимости отсутствуют - CGO не нужен. А чистый Go кросс-компилируется легко и непринуждённо, установкой одной переменной окружения для целевой ОС и еще одной - для архитектуры. GOOS=windows GOARCH=amd64 go build - и всё готово.

PS На мое понимание устройства этой эмм.. экосистемы сильно повлияло знание того факта, что язык изначально писался Гуглом и для Гугла. Авторами Plan9 и Oberon, что наложило свой особенный отпечаток.
Тем не менее, даже в сегодняшнем состоянии Go мне очень нравится.

Аватара пользователя
Cfyz
Сообщения: 772
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Cfyz » 15 ноя 2019, 20:21

thefish писал(а):Правда в терминах Go артефакт - всего лишь исходники с зависимостями
Тут конечно нет какого-то точного определения, но "артефакт" -- это кем-то что-то сделанное или результат чего-то (например, человеческой деятельности). В контексте ПО мне чаще приходилось слышать этот термин в смысле "результат сборки" или похожем, потому что исходники у нас уже как бы есть, соответственно результат работы с ними -- это артефакт.

Ну так вот, максимум что позволяет Go касаемо результатов сборки -- это положить единственный бинарник в единственную директорию. А, как я уже писал, хотелось бы как у людей: собрать бинарник, его зависимости и проинсталлировать так, чтобы этим потом можно было пользоваться.
thefish писал(а):Не очень понял вопроса.
Я про конечный результат сборки как целого приложения. Приложение -- это ведь не только статический бинарник, это часто какие-то дефолтные конфиги, всякие файлы локализации, документация и пр. В экосистемах многих языков (даже С++) можно в рамках штатных инструментов разом собрать практически полный комплект, пригодный для дальнейшей дистрибуции. В Go же постоянно поминается аскетичная идея "просто собрать exe из исходников", а остального как будто нет. Хотя очевидно есть, и мне любопытно как этот момент решается на практике -- возможно через него можно выкрутиться и со сторонними либами.
thefish писал(а):Если сишные зависимости отсутствуют - CGO не нужен.
Но вот тут он, увы, нужен. Если уж на чем терминал мог быть переписан, так максимум это Rust, никак не Go =) (на самом деле с высокой долей вероятности он будет переписан на С). И я бы не сказал, что интероп с С -- это только для особо упертых. Кода с интерфейсом на С много и будет только больше, и невозможность с ним работать лишает язык многого. Переписать на новом языке вообще все -- это утопия, и все они рано или поздно лезут в С за тем, чего нельзя сделать или нерационально переизобретать.
Пытается раскуклиться

Mosha
Сообщения: 1
Зарегистрирован: 08 дек 2019, 10:32

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Mosha » 12 дек 2019, 16:51

Есть ли в планах портирование этой библиотеки под android?

Аватара пользователя
Cfyz
Сообщения: 772
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Cfyz » 13 дек 2019, 19:20

Вот именно "портировать" (допилить имеющееся) -- это вряд ли. Очень много сложностей: код работы с оконной системой сильно заточен на обычный десктоп, вывод производится средствами legacy API OpenGL, ну и на тему тач-интерфейсов вообще ничего не было заложено.

Но не все потеряно. Хотя с момента последних активных доработок прошло много времени, идею я не бросил, просто она (точнее, мои собственные хотелки) стала ширше и глубже настолько, что в какой-то момент начинать рефакторить душевных сил не стало. Технический долг плюс смена требований -- так бывает. Думаю где-то в самом начале нового года начну делать 2.0, которая будет больше, еще гибче и работать на гораздо более широком количестве платформ.
Пытается раскуклиться

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя