Уголок программиста

так, я опять уперся в тупик:
есть зачаток реалиации абстрактного синтаксического дерева. Суть в том, что при операциях с определенными объектами, они могут формировать AST узлы, которые потом одним вызовом разворачиваются в конечную строку, типа так:
Код:
print((var0 + 6 + 8 + var1)())  # output code: var0 + 14 + var1

Сейчас я придумываю, как все эти генерируемые объекты собирать в один список с "корневыми узлами" AST, который при компиляции будет последовательно раборачиваться в филаньный код.

Есть заготовка для того, чтобы получать тело функции без необходимости ее парсинга.
Механика должна получиться следующая:
Объявляем функцию, декорированную моим классом Callable (в питоне это как два пальца обоссать) с содержанием, допустим:
Код:
@Callable
def function()
    var0 + 6 + 8 + var1
    var2.assign(5+var1+10)

# output code: 
```
var0 + 14 + var1
var2 := 5+var1+10
```
И этот класс должен все генерируемые AST объекты перенаправлять в узел AST (грубо говоря, в текущую строку)

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

Код:
class Var:
    def assign(arg):
        SingletoneOutput.send_ast(str(self.value) + ' := ' + arg)

Но не лучше ли как-нибудь рекурсивно передавать output в кач-ве аргумента?
 
Так вот, самым очевидным решением мне сейчас кажется, сделать для выхода синглтон
Короче, решил все-таки так сделать. Но насколько смог, разграничил интерфейс:

Код:
class IOutput:

    _default = list()
    _output = _default

    def __new__(cls):
        return IOutput

    class IsSetError(Exception):
        pass

    @staticmethod
    def raise_err():
        msg = "Output can't be set now. "\
            "If You want to have set"\
            " functionality in some cases, use try-except block"
        raise IOutput.IsSetError(msg)

    @staticmethod
    def set(output):
        if IOutput._output is not IOutput._default:
            IOutput.raise_err()
        IOutput._output = output

    @staticmethod
    def get():
        return IOutput._output

    @staticmethod
    def put(data):
        IOutput._output.append(data)

    @staticmethod
    def release():
        IOutput._output = IOutput._default

    @staticmethod
    def refresh():
        IOutput._default.clear()
        IOutput.release()
 
Друзья, не могу вспомнить термин, обозначающий ЯП, используемый конкретной платформой (типа KSP или JSFX(ReaScript)).
Звучит, кажется, пожхоже на "пиджин"
 
@PianoIst, прочитал! Понял, что все плохо! Кстати, библиотеку народных инструментов будете на Hise уже делать?
 
попробовал написать первый блин на хабр (по мотивам старого поста в блог)
Не создавайте собственный ЯП для расширения функционала приложения

прошу прощения но мне кажется что описанные тобой проблемы надуманы. Ну как минимум их масштаб и значимость.
Нативы получили что хотели - на очень долгое время дали альтернативу разработке своего сэмплера для сэмплозаписывателей и заработали на этом очень много денег.
Будь уверен - точно заработали (и продолжают зарабатывать на этом) очень неслабо

Это и есть цель и она выполнена.

А можно ли было это сделать лучше - этот вопрос можно задать к любому действу вообще.
Это сейчас ты открываешь гитхаб и там трепаторов тонна и малая тележка, и компиляторы есть итд итп.
А когда контакт начинался, все было сложнее.
Пример более менее вменяемого плагина найти была проблема, не то что фреймфорки типа JUCE. Запилить кросплатформенный плаг коммерческого качества - боль. Именно потому сейцчас плагинов тонна и маленькая тележка, включая вполне хорошие бесплатные - потому что стало возможно бесплатно делать именно прикольные алгоритмы чуть ли не ради развлечения.
Собственно я сам так начал.

PS лично я считаю что цели сделать язык программирования для музыкантов у них не было.
Была цель дать быстрый способ завернуть сэмплы скрипочки или барабанчика в оболочку доступную обычному юзеру и срубить денег.
Бизнес = зарабатывание денег, а не производство идеальных вещей.
Сколько вменяемых скриптеров под контакт ты знаешь? Каждый 5-ый музыкант или каждый 10005ый?
 
Последнее редактирование:
  • Like
Реакции: PianoIst
Это и есть цель и она выполнена.
вообще это очень суровый вопрос, на который я пока ищу ответ. Собственно, где-то мы уже с Олейником спорили по этому поводу.
Я вот только сейчас открыл для себя Нила Стивенсона, и, читая сейчас его произведения рубежа веков, испытываю очень противоречивые чувства. В частности, во "в начале была командная строка", он предсказывает схлопывание рынка Apple в следствие того, что инженерная, железячная компания, убивает свою продукцию привязкой к ОСи. Но... Эплы живее всех живых. И я не думаю, что заслуга в том, что ось привязана к железу. хотя, кто его знает...
Но я все-таки на стороне Володи Белова: не согласен я с бизнесом... Да и с копирайтом...

А можно ли было это сделать лучше - этот вопрос можно задать к любому действу вообще.
Это сейчас ты открываешь гитхаб и там трепаторов тонна и малая тележка, и компиляторы есть итд итп.
А когда контакт начинался, все было сложнее.
Пример более менее вменяемого плагина найти была проблема, не то что фреймфорки типа JUCE. Запилить кросплатформенный плаг коммерческого качества - боль. Именно потому сейцчас плагинов тонна и маленькая тележка, включая вполне хорошие бесплатные - потому что стало возможно бесплатно делать именно прикольные алгоритмы чуть ли не ради развлечения.
Собственно я сам так начал.


Сколько вменяемых скриптеров под контакт ты знаешь? Каждый 5-ый музыкант или каждый 10005ый?
Всего интересующихся и пишущих, пожалуй, несколько сотен. Код которых видел лично – человек 20, вменяемый из них – один. И то, потому что он именно скриптер KSP до мозна костей. Общаться с ним как с программистом больновато. Вместо языка, в котором разберется любой, знающий предметную область, получился язык, на котором может хорошо писать только человек, который до глубины души выучил этот язык.
Один раз я еще видел очень хороший код, в библиотеке CinePianos (пианины), но не знаю, кто автор.
 
  • Like
Реакции: buncker
вообще это очень суровый вопрос, на который я пока ищу ответ. Собственно, где-то мы уже с Олейником спорили по этому поводу.

честно - мне даж тебе ответить нечего =)
по моему мнению - большинство недопонимания между кампаниями (большими) и юзерами - именно из-за того что у них разные цели.
Это на мой взгляд краеугольный камень.
И тут если не согласен - то не согласен.

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

PS джобс, имхо - гениальный продажник.
Вообще сложнее продать чем сделать что-то хорошее.
Имею в виду продать стабильно и выгодно.
Хороший продажник (ну, лицо кампании, главный апостол и все такое) - за него и убить могут!

ну ессно - это все мое глубоко личное мнение =)
 
  • Like
Реакции: PianoIst
@buncker, мнение абсолютно верное.
Чем дальше, тем меньше проблем что угодно произвести, неписать, создать...
А вот продать - всё сложнее и сложнее.
Отзывы покупателей - вещь хорошая, и негативные отзывы как бы должны стимулировать что то менять, куда то бежать.
Ан, нет.... Оказывается, что 80% тех кто купил, и отзывов ни каких не оставляют, а те, ну отзывчивые, на них ровняться смысла ни какого.
 
  • Like
Реакции: buncker и PianoIst
други, вот вы когда совершенно новый для себя ЯП изучаете, то по какой схеме проходит изучение: с чего прежде всего начинаете, что потом и что в конце?
 
@SuperDroid, тут недавно попались несколько книг Майкла Макграта, если интересно программирование советую с него начать.
У вас вопрос сильно расплывчатый, с чего начинали...
Для начала уточните что вы хотели бы запрограммировать, для интернета, для десктопа, микроконтроллера.

:D Я в 12 лет начал с установленого на 98 винде Quick basic и попытке разобраться с примерами из его комплекта))))
 
други, вот вы когда совершенно новый для себя ЯП изучаете, то по какой схеме проходит изучение: с чего прежде всего начинаете, что потом и что в конце?
Язык, как таковой, обычно не очень принципиален. Важнее понимание того, что должно в итоге получиться, и какими правилами и алгоритмами этого достигнуть.
 
Последнее редактирование:
@user811, с одной стороны – да. А с другой, новый язык же в жизнь приходит, когда в нем есть инструмент, которого нет в старом.
Допустим, скачал я stand-alone консольную утилиту, которая разбирает контактовский инструмент в xml и обратно. Есть исходники на C. А я б хотел его функционал встроить в Python-библиотеку.
Открыл исходники, вроде все понятно по алгоритму, только вот питоновская обертка для zlib ваще ни разу не похожа на C-имплиментацию и сделана для поддержки конкретных use-кейсов.
Вот и получается, алгоритм переписал, а не работает) Так и забил, чет не охота было неделю тратить чтоб свою обертку писать
[DOUBLEPOST=1550649634][/DOUBLEPOST]@SuperDroid, я, поскольку не настоящий сварщик, обычно сталкиваюсь с проблемой, которая решается в конкретном окружении. Ну и если время и запал позволяет, начинаю тупо брутфорсить ее, вообще не залезая в документацию сначала. Ищу какой-нибудь работающий пример, модифицирую до кондиции, в процессе становится понятно, как ЯП работает боль-менее. Ну и как с иностранным языком – что непонятно – в гугл)
 
Язык, как таковой, обычно не очень принципиален. Важнее понимание того, что должно в итоге получиться, и какими правилами и алгоритмами этого достигнуть.
а что тогда подразумевается под требованием любого работодателя к соискателю"знание языка программирования"?
 
други, вот вы когда совершенно новый для себя ЯП изучаете, то по какой схеме проходит изучение: с чего прежде всего начинаете, что потом и что в конце?

Я изучаю тонкую элементарную книгу или набор уроков. Самую базу. Перед этим Ищу такую, что меня устроит.

Потом пишу приложение, и ищу ответы на возникающие вопросы.
 
  • Like
Реакции: SuperDroid
а что тогда подразумевается под требованием любого работодателя к соискателю

Значит что у них что-то конкретное уже используется (или заложено в проект).

Язык, как таковой, обычно не очень принципиален.
Ну все средства разработки разные и у всех есть достоинства и недостатки. Есть похожие "конкурирующие" средства, между ними разница возможно и не принципиальна.
 
Господа, кто работал в команде с git?
Я не могу сориентироваться, как организовать себе удобную работу с репозиторием:
  • как сделать удобно так, чтобы можно было пользоваться определенной веткой, еще не запушенной в мастер
  • при этом вносить изменения в код, не относящиеся к фиче, для которой заведена эта ветка
  • при этом пользоваться сразу же этими изменениями тоже
177070
 
Последнее редактирование:
Господа, кто работал с Docker? Как в нем запустить GUI приложение (DAW)?
Я вчера 3 часа потратил на 4 решения со SO, но никак не продвинулся, Reaper просто запускается и молчит, хотя, как правило, он в консоль рапортует хотя бы о загрузке проекта.
 
А для чего докер использовать для запуска в нем тяжелого GUI DAW? Он же в основном для микросервисов и удобен для CI/CD. Сетевое взаимодействие. А тут поди еще нагрузишь его плагинами по самое небалуй.
 
Господа, кто работал с Docker? Как в нем запустить GUI приложение (DAW)?
Не самый лучший вариаант и с точки зрения производительности. В виртуальную машину тебе придется шарить аппаратные ресурсы звукавухи, ASIO. Даже если и запашет, производительность не будет самой лучшей.
 
Он же в основном для микросервисов и удобен для CI/CD. Сетевое взаимодействие.
Именно для этого: юнит-тесты, разработка и т.п.
Хотя я бы не отказался иметь готовый контейнер и с рипером вообще, т.к. пока на Линуксе соберешь все зависимости, плагины и т.п. — можно поседеть)
Запустить, кстати, удалось) Но пока дальше не копал
 
Это только если контрибьюторы находятся))
По личному опыту они находятся чаще, чем техподдержка остальных :)
Ну и, да, есть проблема с большими репозиториями, которые могут реагировать и месяц (у меня пока опыт такой был только с packagecontrol.io). Но, говорят, в гугл нереально пробиться.
А так — если чего-то надо, можно же самому закоммитить, потом подождать, пока в течении суток-двух отревьювят и пушанут и использовать без границ)
 

Сейчас просматривают