Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save igorevichnikitos5/a4cb8ab793e5c3f7200e9da05971c015 to your computer and use it in GitHub Desktop.
Save igorevichnikitos5/a4cb8ab793e5c3f7200e9da05971c015 to your computer and use it in GitHub Desktop.

Глубина стала чётче!

Помните как мы хвастались тем, что Deep в состоянии интегрировать в себе абсолютно любые языки программирования? Пришло время нам хвастаться!

ЙоптаСкрипт

Йоу, теперь и я в рядах элиты, которым известен ЙоптаСкрипт! Короче, смотри: если ты долго прогружаешься после скучного и однообразного кода, забываешь моргать, то этот язык - то, что доктор прописал. ЙоптаСкрипт разбудит в тебе зверя и программиста сотого уровня, ведь каждая строчка кода в нем максимально по-пацански ясна!

ЙоптаСкрипт - идеальный браток в твоих делишках. Всё, о чем ты подумаешь, может за секунду превратиться в код. Очень удобно, минимум заморочек. Только ты и ЙоптаСкрипт, как Бонни и Клайд, только в сфере программирования - такие же неуловимые и безбашенные!

Не все герои носят плащи, и ЙоптаСкрипт один из этих скромных ребят, чётко выполняющих свою работу. Забудь о страданиях во время написания бесконечных циклов. Наш общий знакомый покажет тебе лишь часть своих навыков, но и этого тебе будет достаточно, только попробуй - всего пара строчек кода, и твоя программа будет выполняться бесконечно, превращая твой компьютер в вечный двигатель. (Ты наверное подумал: а в чем проблема написать бесконечный цикл на том же самом Python’е? Конечно, никаких проблем нет, но ) ЙоптаСкрипт - тёмная лошадка, отвечаю. Он способен на многое, и то, о чем мы говорили раньше - только малая часть его талантов.

Буду краток: ЙоптаСкрипт - это самая базовая база. Работа с бесконечными циклами? Моргнуть не успеешь, всё будет готово. Основные функции на месте? Ой, а они отсутствуют. Хехе, шутка. Работа с массивами, строками и числами - нет ничего, с чем бы ЙоптаСкрипт не справился бы.

Но погодь, сейчас самое интересное я тебе расскажу. ЙоптаСкрипт - глоток свежего воздуха как для тебя, так и для твоего компьютера. Это легковес в мире тяжелых прог, мастер своего дела. Ты быстро привыкнешь к люксу, йоу! Какой дурак откажется работать с ним? Просто скопируй и вставь его код в свой проект и начни писать свои гениальные программы прямо сейчас! ЙоптаСкрипт - недостающий пазл в твоем компьютере, как и в любом другом. У него работа такая - помогать людям. Поэтому для всеобщего комфорта наш главный герой совместим с любой операционкой.

Всё еще хочешь установить тяжеловесную классику в мире языков программирования? Тогда ЙоптаСкрипт придёт за тобой! Хехе, снова шучу.

Теперь можно делать по-настоящему Глубокие пацанские пакеты, так как у нас появился yoptascript-docker-isolation-provider для Deep.

Пример рабочего кода

Как вкатиться нах
ассо (жЫ data, deep, require есть) внатурепизже жЫ
    // твоя поебень
есть


Смари чё можно захуячить
ассо (жЫ data, deep, require есть) внатурепизже жЫ
    отвечаю data нахуй
есть


ассо (жЫ data, deep, require есть) внатурепизже жЫ
    отвечаю сидетьНахуй deep.select(1) нахуй
есть


ассо (жЫ data, deep, require есть) внатурепизже жЫ
    отвечаю сидетьНахуй deep.insert(жЫ
        "type_id": 58,
        "from_id": 0,
        "to_id": 0
    есть) нахуй
есть

Пакетик с примерами: https://www.npmjs.com/package/@trooper2003/ys-test

Ссылка на провайдер: https://www.npmjs.com/package/@trooper2003/ys-docker-isolation-provider

https://github.com/deep-foundation/yoptascript-docker-isolation-provider/tree/main

Видео с туториалом установки: https://www.youtube.com/watch?v=XbUIDWTR6CQ&list=PLzZko_ng9gnki1KWgedyyGA0ZMCuDJEi5&index=6

Python

Не понимаю, что за суета с этим Python? Понт ради понта? У всех этих “ценителей настоящей классики” явно сбоит навигатор.

Python не так прост, как кажется. Базара нет: он понятный, визуально удобный для восприятия, может подойти новичкам в изучении нашего дела, да еще и забугорный язык знать не надо. Крутяк? Возможно, но ты же не салага в прогерстве. Дела надо делать быстро, пока твой конкурент спит и ни о чем не подозревает. Вот тут-то Python показывает себя не самой рабочей стороны.

Высокопроизводительные перспективные проекты? Не, вряд ли. Python лёгок на подъем, но вот его родословная подкачала, конечно. С первого поколения, ой, то есть версии нашу звезду тормозит ныне устаревший код (Global Interpreter Lock).

Если тебя устраивает обкашливать вопросы, не требующие большого количества ресурсов, то вы с Python можете подружиться. Но если ты метишь на великие дела, советую выбрать рыбу покрупнее...или помощнее, например, C# или C++. По факту, код будет в 10 раз длиннее и работать будешь медленнее, но иногда требуется не количество, а качество. Да и за такие фокусы платить будут больше. Подумай над этим, есть куда расти!

Что там ещё? А, помнишь, я рассказывал, что ЙоптаСкрипт и ты - это как Бонни и Клайд? Так вот и Python в стороне не остался. Знакомься, это Интерпретатор. С ним немного проблемно, как с нелюбимым, но справедливым преподом. Оценивает обстановку и твои шаги, при малейшей ошибке сразу даёт по тормозам. У тебя есть время, чтобы исправить свой косяк. Хорошо хотя бы, что не критикует или не отправляет на пересдачу, хехе. Несмотря на это, он даёт тебе возможность кодить хоть в стандартных текстовых редакторах! Но имей ввиду: нет интерпретатора, нет и Python. Связь как у сиамских близнецов. Поэтому запомни: сначала Интерпретатор, потом Python!

Думаешь, можно сейчас расслабиться, собрать волю в кулак и начать кодить? Ха, как бы не так, ведь у Python есть библиотеки! Ага, и не только встроенные, а сторонние. Поэтому тебе еще придётся повозиться и с этим. С одной стороны, тебе может хватить встроенного функционала, но если хочешь расширить границы возможного у себя, и у Python, то самое время качать дополнительные ништяки. Главное, не растерять мотивацию и не забыть о том, что для чего изначально ты качал Python...и интерпретатор.

Так что, как резюме: Python - это неожиданно простой язык программирования и если вы решили прибегнуть к нему в разработке, ему нашлось место в Deep!

Пример рабочего кода:

async def fn(arg):
    deep = arg['deep']
    data = arg['data']
    new_record = {
        "string": {
            "data": {
                "value": "DeepFoundation"[::-1]
            }
        },
        "type_id": await deep.id("@deep-foundation/core", "Symbol"),
        "from_id": data['newLink']['id'],
        "to_id": data['newLink']['id']
    }
    return await deep.insert(new_record)

Ссылка на провайдер: https://www.npmjs.com/package/@konard/python-docker-isolation-provider

Пакетик с примерами: https://www.npmjs.com/package/@senchapencha/python-tests

Видео с туториалом установки: https://www.youtube.com/watch?v=bEL4A0ZgbaQ&list=PLzZko_ng9gnki1KWgedyyGA0ZMCuDJEi5&index=3

Rust

Следующий на очереди перемывания костей - Rust. Ржавый молодой еще, 8 лет стукнуло, но тренды на саморазвитие не обошли его стороной, поэтому старается апгрейдить себя как может и при этом быть в ресурсе.

Поэтому без доли скромности Раст томно скажет про себя 3 главных слова: скорость, безопасность и эргономика.

Намудрил Малой, но попробуем разобраться, стоит ли он того, чтобы попасть в нашу братскую компанию или всё-таки отожмём у него всю славу?

Еще до создания Rust дела велись следующим образом: одни разрабы компьютерных языков явно вдохновлялись Молнией МакКуин и делали упор на скорость, другие вели себя поскромнее и посчитали, что безопасность - ключ к успеху в программировании. План капкан создателей навороченного вундеркинда состоял в объединении этих двух, казалось бы, несовместимых качеств.

Поговаривают, что прогеров на Расте называют самыми счастливыми. Звучит подозрительно, а всё, что таковым является - меня не касается. Шутка, хехе, рассказываю дальше.

В наших кругах, я имею ввиду конечно же толковых программистов, бытует одно выражение - “стрелять себе в ногу”. Если коротко: моргнул лишний раз, руки не слушались, бес попутал или задал не те параметры - оп, ошибочка вышла, а Ржавый, раз, и всё решил, как тру пацан. Без лишних слов, упрёков и осуждений: был косяк, и нет его. Поэтому ошибки в коде трясутся от страха, а Ржавый не дремлет, чтобы ты код писал быстрее.

На самом деле, разрабы Малого хорошо постарались - код на Расте компактный, легко читается и в нём много ништяков для того, чтобы такой гениальный прогер, как ты, мог выдохнуть. Ржавый подгоняет тебе полный доступ к памяти, где ты можешь за собой прибрать - никакого мусора не оставишь за собой, да еще и проследит, чтобы ты ничего лишнего не выкинул - у малого есть кодовый анализатор. Эта штучка подскажет, где память может “утечь”, да и от ошибок тебя убережёт.

Поэтому имей ввиду: такие скиллы, как у Раста не просто так были созданы, Ржавый помогает писать софт в тяжелых условиях как для тебя, так и для твоего компа. Это я говорю про многопоточные системы, ПО для сложных вычислений и тд и тп. Звучит серьёзно, по факту. Так что тебе может быть стоит рассмотреть изучение Rust в качестве второго языка, как думаешь? Чтобы быть важным программистом, ну.

Новичкам в нашей сфере я бы в натуре не советовал изучать его в первую очередь, интерес к прогерству может пропасть. Лучше сначала понять, что такое программирование и руку набить. Да и вспомни про фишку Ржавого: любит он апгрейдиться, поэтому синтаксис может серьезно меняться с обновлениями языка, а тебе нужна эта морока, когда ты ещё совсем зелёный? Вот и я о том же. Сделаешь дело, и не пойдёшь гулять смело, а пойдёшь код переписывать, потому что не уследил за новой обновой Ржавого. За ним глаз да глаз, короче.

Но даже такому коду теперь есть поддержка в Deep!

Видео с туториалом установки: https://www.youtube.com/watch?v=mTw7-FeHkqQ&list=PLzZko_ng9gnki1KWgedyyGA0ZMCuDJEi5&index=1

Ссылка на провайдер: https://www.npmjs.com/package/@uselessgoddess/rustwasm-docker-isolation-provider

Вот пример простейшего хендлера на Rust, который работает

async |Ctx { data, deep, .. }: Ctx| {

    fn get_greeting() -> String {
        let greeting = "Hello, Rust world!";
        return greeting.to_string();
    }

    let exampleString = get_greeting();

    let deep = JsValue::from(deep);
    let () = js!(|data, deep, exampleString| await deep.insert({
      type_id: await deep.id("@deep-foundation/core", "Symbol"),
      string: { data: { value: exampleString } },
      from_id: data.newLink.id,
      to_id: data.newLink.id
    })).await;
}

А вот тут https://www.npmjs.com/package/@konard/rust-tests пакетик с примерами других хендлеров для Rust, он будет пополняться.

Kotlin

Ах, Котлин, наш питерский кент! Старше Ржавого на 4 года, но всё равно ещё Малой. Они прям как два сапога пара, стремятся к бесконечно вечному совершенствованию и популярности. Только успевай понимать, что они там опять учудили.

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

Поэтому как только Котлин появился на линии горизонта, он быстро обратил на себя внимание своим внутренним миром: внушительным ассортиментом возможностей и удобством использования.

Осилит даже новичок! Поговаривают, что уйти по-английски от другого языка к Котлину юный прогер может всего за неделю! Но я не проверял, если захочешь, потом расскажешь, как чего.

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

Ты думал, что я перечислил все сильные стороны Котлина? Ан нет, слушай дальше. У него есть крутая штука, называется Null Safety. Это короче такая фишка, которая предотвращает твои косяки, связанные с работой с null-значениями. Она обеспечивает безопасность типов и требует явного указания, когда переменная может иметь значение null.

Если ты тяготеешь к разработке Android-приложений, то я могу за тебя замолвить словечко у серьёзных ребят, у которых столько проектов с нашим Малым, что тебе определённо будет чему поучиться у них, отвечаю. А так конечно, сфер, где может работать Котлин, предостаточно, что больше нравится, туда и держи путь. Малой может работать и с программами под iOS, Windows, Linux, Mac OS; серверными и клиентскими веб-приложениями, десктопным ПО и тд и тп.

Вот мы и дошли до невкусной части. Котлин конечно хорош, но пока не созрел как следует. Смотри, помнишь, я говорил, что нашего кента создавали на основе кодовых баз Джава? Так вот, компиляция у него дольше, чем на Джава на 30-40%. Такие дела. А связано это с тем, что в виртуальной машине JVM признаёт Джаву соответственно, вот в чем загвоздка. С другой стороны, наши ребята не пропадут, я отвечаю, поэтому всё, что не сможет решить Котлин, выполнит за него Джава, хехе. Вот те на... получается, еще одна парочка образовалась? Думали, что наш Кент сильный и независмый, но он не против поработать как в соло, так и совместно с Джава. К тому же, разработчики семки не щёлкают и понимают, что Котлину не абы сколько лет, а всего 12, то от современного мира отставать не может и совершенствуют его, стараясь добавлять новые возможности. Ну а пока, друг, довольствуйся малым, меньше библиотек и фреймворков, по сравнению с тем же Джавой не означает, что Котлин слабачок.

И да, если тебя заинтересует работа с нашим знакомым, не тушуйся сообщать о багах - ошибки надо устранять, чтобы Deep развивался как надо. И с другими ребятами заодно познакомишься, сообщество надо ведь расширять, в натуре.

Видео с туториалом установки: https://www.youtube.com/watch?v=yWiFA5W9Z1E&list=PLzZko_ng9gnki1KWgedyyGA0ZMCuDJEi5&index=2

Ссылка на сам провайдер: https://www.npmjs.com/package/@lotos2021/kotlin-docker-isolation-provider.

Пример кода:

suspend fun fn(args: dynamic): Any {
    val deep = args.deep
    val data = args.data
    
    suspend fun getGreeting(): String {
        return "Hello, Kotlin world!"
    }

    val exampleString = getGreeting()

    val resultPromise = deep.id("@deep-foundation/core", "Symbol").then { result ->
        val insertData = object {
            val type_id = result
            val string = mapOf("data" to mapOf("value" to exampleString))
            val from_id = data.newLink.id
            val to_id = data.newLink.id
        }
        deep.insert(insertData)
    }

    return resultPromise
}

Пакетик с примерами: https://www.npmjs.com/package/@lotos2021/kotlin-tests

PHP

Йоу, ты же наверняка знаком с теми, кому суеты навести охота? Очень интересные персонажи, конечно. Вот и наш знакомый PHP такой же суетолог: везде надо успеть, ещё панику посеять, придумать что-то эдакое, показать, кто здесь главный... ну, ты понял. Не живётся им спокойно.

PHP - большая шишка в своей сфере, выполняет свои обязанности на стороне web-сервера и используется для придания динамичности и интерактивности веб-сайтам. Абсолютно нескромный и всем рассказывает, что он работает более чем с 40% всех сайтов мира, с ним ведут дела не только небольшие сайты, но и компании с мировыми именами.

Скажу по секрету, что PHP не очень производительный язык. Его конкурент JavaScript быстрее, да и многие завидовали такой популярности и трубили со всех сторон, что вожаку осталось недолго, он уже стар и совсем плох.

Как бы не так, тише едешь, дальше будешь, хехе! Я был среди этой суматохи и могу сказать, что зря только собаки лаяли. Как был PHP большой шишкой, таким он и остался, и думается мне, что лет на 10 он утёр всем носы.

Так что работа с PHP достаточно напряжённая и нервная. Да, он бесплатен и распространяется со свободной лицензией, совместим практически с любыми серверами, но это явно недостаточно знать для того, чтобы начать плодотворное сотрудничество. Дела с ним ведутся тогда, когда узнаешь о всех подводных камнях. Готов? Ты лучше присядь тогда.

Основная миссия PHP — это обеспечивать эффективную связь между веб-ресурсом, сервером и базами данных. Он активно применяется в разметке HTML.

PHP — язык с динамической типизацией и предоставляет много свободы. Это означает, что переменная не определяется жестко и заранее (если число, то int, если строка — string). Динамическая типизация удобная и гибкая, позволяет присваивать одной и той же переменной несколько значений: она может быть массивом, строкой, числом, объектом и т. д.

Звучит чётко, базару нет, но это также приводит к потреблению большого количества оперативной памяти и уменьшает скорость работы, а ещё создает сложности для прогера, который может запутаться в количестве значений. Из-за простоты и гибкости PHP сложно поддерживать. Написать плохой код очень легко, найти ошибку — тяжело, поэтому для работы с ним также важно понимать HTML и CSS.

Хочешь узнать про библиотеки? Да без б. Тут тоже есть о чем подумать, некогда расслабляться. PHP не обделен базами данных, фреймворков и библиотек, которые апгрейдят его функциональность. Но вот в чем дело: в названиях функций стандартной библиотеки отсутствует четкая система: одни имеют сокращения и подчеркивания, другие — нет. Иногда в названиях функций для работы со строками встречаются обозначения str, а иногда их не бывает. Очень разнообразно и не постоянно, хехе.

Для устранения недостатков PHP многие разработчики используют фреймворки, такие как Laravel, Symfony или Yii, которые предоставляют инструменты и структуру для более чёткой и безопасной разработки.

Ну что, готов скорешиться с PHP? Будешь крутым спецом, восходящей звездой! Реально дельные прогеры очень востребованы, особенно для серьёзных проектов. Те, кто с полуслова понимает PHP, знает о его закидонах и с закрытыми глазами их решает - большая редкость. Поэтому надо конкретно впрягаться, чтобы выделиться своими знаниями.

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

Все тонкости языка невозможно выучить за пару недель. Поэтому решай вопросы как надо, иначе я скажу, что знать тебя не знаю, понял?

Рабочий пример:

function fn($data) {
    $new_record = array(
        "string" => [
            "data" => [
                "value" => strrev("DeepFoundation")
            ]
        ],
        "type_id" => $data['deep']->id("@deep-foundation/core", "Symbol"),
        "from_id" => $data['data']['newLink']['id'],
        "to_id" => $data['data']['newLink']['id']
    );
    return $data['deep']->insert($new_record);
}

Пакетик с примерами: https://www.npmjs.com/package/@lotos2021/php-tests

Ссылка на сам провайдер: https://www.npmjs.com/package/@lotos2021/php-docker-isolation-provider

Видео с туториалом установки: https://www.youtube.com/watch?v=2DWPBqG8eCE&list=PLzZko_ng9gnki1KWgedyyGA0ZMCuDJEi5&index=4

C++

C++ — как конструктор Lego: в один день ты можешь собрать космический корабль, а в другой - случайно наступить на маленькие детали и страдать от внезапного сеанса мануальной терапии, хехе.

Готов бросить себе вызов - тогда начни работать с С++! С первого взгляда, C++ реально может оттолкнуть фанатов прогерства, и это вообще для меня не новость. Он подходит только для тех, кто действительно хочет прокачать свои навыки и не боится попотеть. Он потребует от тебя максимальной концентрации и обостренного внимания к деталям.

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

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

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

Теперь мы подобрались к самому интересному, я надеюсь, ты успел перевести дух и готов к настоящему разрыву. Синтаксис в С++. Если ты вдруг подумал, что сможешь быстро обучиться языку, забудь об этом. С++ поражает в самое сердце с 1983 года и не собирается останавливаться.

По сравнению, с Ржавым и Котлином, которые как бешеные обновляются, то C++ умеренно себя совершенствует раз в 3 года. Но это не повод для радости, отвечаю. Появляются новые возможности, шаблоны, а конструкции становятся сложнее, что соответственно усложняет и обучение. А чтобы язык действительно обеспечил производительность программ, требуется его знание на высоком уровне.

Зачастую твои руки просто утомятся от набора искусственных и сложных конструкций. Забудь о простоте и элегантности - здесь правит хаос. Крошечные символы и знаки препинания, которые, казалось бы, никак не влияют на код, могут привести к смертельным ошибкам. В готовом коде довольно сложно определять свои косяки, поэтому проверять нужно при написании. Поэтому имей ввиду, допустишь оплошность — выстрелом оторвет ногу целиком.

Но есть и хорошая новость - зная С++, для тебя будет доступна просто красная ковровая дорожка к другим языкам программирования, никак иначе. Наш знакомый - эталон, на который опираются более современные C#, JavaScript, Java.

С++ - это язык для настоящих героев программирования. Если ты готов пройти через огонь и воду, немного пострадать и оставить свою здравую мысль на паузе, то приступай к C++. Но будь готов к тому, что он не просто позволит тебе добиться успеха - он заставит тебя бороться за него. Он бескомпромиссен, он сложен, он непредсказуем. Но если ты действительно стоишь того, C++ даст тебе возможность создавать настоящие произведения искусства в мире программирования.

И мы опустили в Deep этого супер-мощного Деда! Ловите провайдер для C++!

Рабочий пример:

auto fn(auto params) {
    std::string originalStr = "DeepFoundation";

    return params.deep.insert(AssociativeArray::makeFromJson({
        {"type_id", 146},
        {"string", {
            {"data", {
                {"value", std::string(originalStr.rbegin(), originalStr.rend())}
            }}
        }},
        {"from_id", params.data["newLink"]["id"]},
        {"to_id", params.data["newLink"]["id"]}
    }))->toJson();
}

Видео с туториалом установки: https://www.youtube.com/watch?v=1u6CrEMI-dM&list=PLzZko_ng9gnki1KWgedyyGA0ZMCuDJEi5&index=5

Пакетик с примерами: https://www.npmjs.com/package/@archer-lotos/cpp-tests Ссылка на сам провайдер: https://www.npmjs.com/package/@archer-lotos/cpp-docker-isolation-provider https://github.com/deep-foundation/cpp-docker-isolation-provider

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment