К личному потенциалу программного обеспечения

Всем привет!

С момента начала работы в компании Прогриум Технологии у меня была одна цель: построить систему под названием Трактор. Это то, к чему я постепенно приближался за свою 22-летнюю карьеру независимого программиста. На данном этапе мне все еще сложно описать Tractor System, но ее цель - сделать создание систем персонального программного обеспечения производственного уровня, таких как создание с помощью Legos, быстрым и увлекательным.

После трудного года, проведенного в 2020 году, я начал публиковать здесь сообщения в январе с намерением поделиться и официально выпустить компоненты, над которыми я работал, которые развиваются в Tractor. Помимо разминки, когда я в конце концов заговорю о тракторе, я хотел, чтобы люди увидели, как я самостоятельно создаю полезные строительные блоки для достижения идеала. Это основная часть философии Tractor.

Давайте рассмотрим, чем я уже поделился, а затем определим, что будет в ближайшие полгода.

Первым крупным релизом года стал проект macdriver, получивший значительный отклик на Hacker News. Он дает нам привязки Objective-C и Apple framework для Go, позволяя создавать простые приложения Apple полностью на Go. Раньше это было невозможно, поэтому было немного интересно, но было рано. Собственные API Go, включенные для часто используемых классов Foundation и Cocoa, были далеки от завершения. Их можно было бы использовать, если бы вы знали, что делаете, но с идеальным полным охватом фреймворков Apple этого было бы недостаточно. Были также нерешенные проблемы, просто решая, как лучше всего управлять памятью и указателями, и я знал, что мне придется разобраться, и это займет некоторое время.

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

С помощью цепочки инструментов macschema вы можете генерировать схемы API для любой инфраструктуры Apple, класса, функции и т. Д. На основе их документации и объявлений заголовков. Это полезно для нас при создании привязок фреймворка в macdriver, но было бы полезно для любого проекта, выполняющего аналогичную работу, например привязки для других языков. Такой подход будет играть большую роль в том, как Tractor будет интегрироваться со всем, что мы хотим в будущем.

Попутно я выпустил несколько демонстраций для macdriver, чтобы прояснить возможности и предоставить справочные примеры. Один из них я выделил в отдельный проект под названием topframe, который также служит испытательной площадкой для того, как мы делаем кроссплатформенную поддержку. Подробнее об этом чуть позже.

Не связанный с macdriver, я выпустил протокол под названием qmux с сообщением, объясняющим, почему этот (но на самом деле любой) протокол мультиплексирования, включая и особенно QUIC, является таким замечательным примитивом для сетевого программирования. У проекта было две реализации: Go и TypeScript, и скоро их будут еще больше. Пост об этом был первой разъясняющей статьей, которую я написал за долгое время, и людям она понравилась. Это было важно, потому что идея, лежащая в основе этого, была действительно более ценной, чем сам протокол, но, несмотря на это, нам все еще нужны его реализации, чтобы существовать. Чтобы продемонстрировать идею в действии, я создал 130-строчную версию Ngrok, которая превратилась в отличный пост, в котором рассказывается, как это работает.

Это подводит нас к сегодняшнему дню, середине 2021 года. Давайте поговорим о том, что нас ждет.

Более захватывающим, чем qmux, является то, что мы построили на его основе, которое называется qtalk. Это мой тщательно спроектированный, многократно переписанный стек программирования сети / IPC. Хотя он не этим отличается от простого JSON-RPC с подключаемыми кодеками, его двумя уникальными функциями являются обратные вызовы и потоки. Обратные вызовы означают его двунаправленность, любая сторона может открывать или вызывать методы. Одно только это является редкостью в существующих стеках RPC, но необходимо для обратных вызовов. И хотя потоковая передача RPC не нова, наши потоки представляют собой полные виртуальные соединения, поэтому вы можете передавать больше результатов RPC, произвольные потоки байтов или туннелировать что-то еще, например соединение с базой данных. Я расскажу больше о возможностях, когда он выйдет.

Итак, во второй половине 2021 года мы увидим qtalk, мы увидим крупное обновление для macdriver, а затем с этими двумя частями мы сможем выпустить shelldriver. Это кроссплатформенный API для ресурсов, специфичных для платформы, таких как окна, диалоговые окна, меню и т. Д. Речь идет об интеграции оболочки с собственным графическим интерфейсом, а не о наличии всех компонентов собственного пользовательского интерфейса. Фактически, для пользовательского интерфейса приложения он действительно ориентирован на окна и веб-просмотр, а-ля Electron. В отличие от Electron, его можно использовать на любом языке, имеющем реализацию qmux и qtalk. В результате должен получиться простой «Электрон, но как библиотека», который можно использовать из Go и других языков.

Когда выйдет shelldriver, я смогу, наконец, начать говорить о первой реальной части тракторной системы: Tractor Toolkit. Я надеюсь, что к концу года у меня будет хотя бы публичное демо. Инструментарий уже демонстрируют друзьям и спонсорам. Работа, которой я поделился до сих пор, - это лишь верхушка айсберга.

Что напоминает мне…

Я действительно должен поблагодарить своих спонсоров. По мере того, как дела набирают обороты, я начинаю работать с большим количеством людей, и все это самофинансируется. Спонсорство не только поддерживает всю эту работу с открытым исходным кодом, но и спонсоры получают ранний доступ к Tractor Toolkit и узнают больше о моих планах.

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

Первоначально опубликовано на https://dev.to 5 июля 2021 г.