Pull to refresh
6
0

kotlin, golang, c#

Send message
  1. Функция не обязана возвращать ошибку.

  2. Функция не обязана возвращать результат и вторым значением ошибку. Ошибка может быть на любом месте возвращаемых значений.

Хорошо, можно же просто пометить функцию, как не возвращающую ошибку, верно?

fn strong_function() string {
  return "some"
}
  1. Функция не обязана возвращать только одну ошибку. Их может быть и больше.

Go way нам сказал, что это ошибка - это просто просто значение
А значит, мы можем просто вернуть с одной функции несколько значений, верно?

fn more_errors_function() (string, int) {
  return "i am eror", 42
}
err1, err2 := more_error_func()
println(err1)
println(err2)
  1. Если функция возвращает ошибку, это вовсе не говорит о том, что эта ошибка "произошла" при выполнении функции. Возможно, данная функция - это всего лишь фабрика ошибок. Об этом может знать только сам разработчик.

А значит код в блоке or {} - мы определяем сами, верно? :D

Конструкция or

Может обработать ошибку и вернуть значение по умолчанию:

fn do_something(s string) !string {
    if s == 'foo' {
        return 'foo'
    }
    return error('invalid string')
}
​
a := do_something('foo') or { 'default' } // a будет 'foo'
b := do_something('bar') or { 'default' } // b будет 'default'
println(a)
println(b)

Может раньше прервать выполнение:

user := repo.find_user_by_id(7) or { return }

Может исполнить какой-то другой код:

user := repo.find_user_by_id(7) or {
  log("not found", err)
  return
}

и просто, и гибко :D

а это ещё не зашла речь про panic, recover и defer..

А может просто вызывать метод или, если ошибка, исполнить другой код?

Например, как это сделано в V :D

https://docs.vlang.io/type-declarations.html#optionresult-types-and-error-handling

Пример из статьи выглядел бы так:

// вызываем функцию, а если ошибка - паникуем
data := read_from_db() or { panic(err) }

// ещё вызываем функцию, но необрабатываем ошибку если она есть - !
processed_data := process(data)!

// вызываем функцию, а если ошибка, то обрабатываем её в этом блоке - например, вызываем функцию do_something с передачей ошибки в качестве аргумента
write_result(processed_data) or {
  do_something(err)
}

и никаких вам if (err != nil) :>

Принижая достоинства других платформ, вы не делаете вашу собственную платформу лучше.

Отнюдь! И на $mol такой разбор есть - https://www.youtube.com/watch?v=45ViZviwwT8

.

За недостатки Квазара мы тут поговорили, а за достоинства $mol как-то не получилось. Сложно обсуждать то, чего нет?

Мы много хотим от одного человека - фреймворк, поддержку и рекламу
.
Дядька как-то выражал свою позицию насчет продвижения своего детища - https://www.youtube.com/watch?v=Gg1Lg4WeThk
.
.
Не призываю это все смотреть, скорее присмотреться к чатикам, может что-то завлечет - там множество разношерстных тем, не только про $mol, не только про фронтенд (https://t.me/h_y_o_o) :D
.
Со временем появятся больше людей, которые встанут перед вами и Димой в чате, поспорят и предложат хорошее решение :>

Почему-то структуры разметки этих приложений очень сильно похожи друг на друга:

Многие из этих приложений сделаны одним человеком - автором экосистемы
На них продемонстрирована одна из коробочных идей фреймворка - буклетная дизайн система
Плюсы которой, например, в адаптивности - ваша верстка сходу будет сносно работать/выглядеть на пк/мобилках
.
И это не говоря о реактивности, и ленивом рендеринге по умолчанию
.
.
Также есть примеры и "нетипичного мола":

Меня как бекендера, устраивает стандартная UI библиотека - я чаще всего просто её использую и оно просто работает
.
.

И вы на полном серьёзе сравниваете свою платформу с React/Angular/Vue/Svelte/...? А она даёт разработчику такую же свободу действий, как вышеперечисленные?

Не шибко корректное сравнение
Угрубим что React - это библиотека рендеринга, где пишут на JSX, все
Angular - уже более комплесное, "сложное" решение из коробки
Vue - тоже самое что и React, только с реактивностью из коробки чуть лучше и нет JSX
Svelte - шото react'vue с отказом от рантайма
.
$mol - это собирательное название готовых компонентов и систем:
это его кастомизируемый Ui
это его язык описания разметки view.tree
это его система реактивность $mol_wire
это его возможность использовать децентрализованную базу данных для хранения
это его разные исследования и технические анализы
это его /куча название сущностей/
.
.

В Квазаре я работаю с DOM на уровне HTML-кода, а не через прокладку в виде вашего view.tree.

В своей сути, HTML - это сериализованный DOM, не больше.
В $mol бы не ограничиваемся шаблонизатором, а работаем с ним через TypeScript
Эта прокладка view.tree - она прозрачно скрывает бойлерплейт и позволяет лаконишно описывать композицию интерфейса и его течение данных (реактивность, односторонние биндинги, двусторонние биндинги)
.
Тут описание интерфейса на view.tree, стили на css или Typescript и логика приложения на том же Typescript
.
Реактивность мола можно даже использовать в реакте, но тогда вы упретесь в сам реакт :D ( https://habr.com/ru/articles/723728/)

дождался конца дня чтобы привнести ещё одно семя мало$mol'ского раздора :D
.
Что же, от моих решений пострадало две компании
.
[Company 1]
.
Проект: Autobot
.
Исходя из специфики нашей области, требовалось оперативно реагировать на баны со стороны гугла - нужно было вносить изменения в код (репозиторий на gitlab'e) и дергать ручку деплоя в jenkins
.
Раньше у нас были расписаны дни дежурства, в том числе выходные - кто следит за всем этим добром
.
Человек проверяет страницы сайта на наличие страйка от гугла и кидает нам в чат какой это сайт.
Разраб должен оперативно внести правки в код (коммит), смержить в мастер и запустить деплой
.
Такое бывало до 4х раз на дню
.
.
брр
.
Итогом стало решение-админка на $mol (фронт) + бек на go (простите кто натерпелся после меня)0
.
Шаги выше сократились до необходимости открыть админку, выбрать один или несколько сайтов и нажать кнопку - все.
.
Так мы стали спокойнее спать по выходным, а весь головняк был скинут на нашего любимого ПМ'a :3
.
Написание фронта на моле заняло пару дней одного человека
.
Как развивалось это дело - туть https://t.me/mam_mol/94327
.
.
.
Проект: Infinity
.
Начался хайп нейронок, Stable Diffusion и еже с ними.
Мы накидали сервис для генерации картинок и бросили его в открытое море.
А мир жесток, и главное - не спрашивать датасатаниста как он научил модель определять порнографию.
.
Пока совершенствовались механизмы, усложняющие генерацию ЦП (спасибо норм челу, что до ума довел систему после меня), нужно было оперативно подчищать что успело нагенерироваться
.
Наши QA каждый день руками собирали сылки на генерации, чтобы потом чистить сайт от этой нечести.
Трафик рос, темпы генерирования фоток росли, поводы получать баны от гугла тоже появлялись
.
За ночь я накидал псевдо PWA для удобного сбора ссылок ребятами и оформления его в файлы, которые уже попадали ко мне
.
Сабж: https://koplenov.github.io/infinity/#!=marker
Очерки в чате: https://t.me/mam_mol/127721
.
.
.
Проект: OpenAI
.
Весна, openai открывает api, мы пытаемся внедрять автоматизации в рутину наших SEO'шников
.
Делать запросики по одному - круто
Обрабатывать батчами файлы - ещё круче
.
Так мы шустро запилили интерфейс для массовой генерации SEO контента
.
Ы как грица
.
фронт: $mol
.
.
.
[Company 2]
.
Проект: llamer
.
Доведенная до ума идея прошлого проекта. Только в этот раз уже на наших мощностях, с пайплайнами, казино и ой.. доменными задачами.
.
фронт: $mol
бек: nodejs
.
.
.
Проект: ~А_ПО_ЖОПЕ_ЗА_ПОДРОБНОСТИ~
.
Админка по автоматизированному созданию сайтов с автогенерацией наполнения
.
фронт: $mol
бек: vlang.io
.
.
.
Мне нравиться комьюнити мола - за три года стабильно помогают одни и те же знакомые ребята
Это даже быстрее, нежели гуглить вопросы/рыться в документации, которую недавно собрали в одном месте
Приходят также новые дядьки, что пытаются в свои пет проекты на моле и активничают в чате

Как-то так, ¯\(ツ)

Нехитрый тест на производительность

V дает результат от 125 до 181 миллисекунд против 28 на Go.

лукавите, в go по умолчанию собирается прод сборка :D

обычная сборка (v .) прошлась за 235мс
продовая сборка (v -prod .) прошлась за 34мс

Для чистоты также не хватает кода на го, предположим что он таков:

package main

import "time"

func main() {
   start := time.Now()

   var sum = 0
   var i = 0
   for i <= 100000000 {
	   sum += i
	   i++
   }

   println(time.Since(start).Milliseconds())
   println(sum)
}

этот код на го на моей машине исполняется (go run main.go) за 36мс

В данном примере любопытно сравнить размеры бандлов, потому что у V первый блок кода собрался в бинарь весом в 140 килобайт, код на го в бинарь весом в 1.3мб

Подытожив, код на V отрабатывает не медленнее эквивалента на го, а размер статического бандла меньше на порядок (140кб vs 1.3мб)

Но хорошо, отойдем от синтетики

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

Тут неплоха демка от автора языка для челиков из IBM: https://www.youtube.com/watch?v=_dIAcNp9bJs

Он отмечал, что хочет предоставить разработчикам единый путь для реализации чего-то - чтобы не нужно было искать библиотеку для парсинга json, или искать бекенд фреймворк или orm для чего-то простого - всё из коробки: UI либа, ORM, вебсервер и куча других батареек

Кстати, для VSCode есть плагин, поддерживающий этот язык.

Дап, также недавно вышел плагин языка для идешек от джетов: https://intellij-v.github.io/

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

А вам как? :D

-"Алиса, включи Bluetooth"

*звуки ожиданий*

--"Отсутствует подключение к интернету.."

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

upd: Ожидаю развитие обсуждения туть: https://t.me/h_y_o_o/ (в топике распределенных систем)

Для android - Via

В настройках -> Основные -> Вид интерфейса - выбрать "Панель снизу"

Внешний вид также кастомизируется

Решил отойти от мейнстрима и потыкать что нибудь легковесное вместо Electron'a

Было интересно потыкать связку $mol + tauri = результат понравился: шустрое приложение, много не кушает (< 100мб оперативки):

С молом проблем особо не возникло, благо отзывчивое в последнее время комьюнити занимается документацией и сейчас ситуация лучше, чем полгода/год назад

С таури возникла заминка с установкой rust'a - c++ билд тулзы через установщик не ставились без впн, зато хот релоад завелся без проблем, что, несомненно, плюс

Сбилженное приложение весило ~8 мегабайт:

Рантайм с собой не тащит, использует системные webview

Челики также пилят решение для мобилок

Хочется отстоять романтику своего утверждения:

Я завязываюсь не на фичи языка, а на концепции, реализуемые языком

Считаю, что если язык не предоставляет мне возможность стрелять себе в ноги, то это плохо

Но плохо не потому, что это есть, а плохо потому, что мне, как программисту, это недоступно

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

Ограниченный скоп этого вы назвали идиоматикой языка, соглашусь.

В своих эмпирических доводах опираюсь на подобную статью подобного рода:
http://rsdn.org/article/nemerle/Amplifier.xml

P.S. на практике не ограничиваюсь одним языком

Делал как-то гошный проект на работе

Сходу для себя ощутил острую нехватку перегрузки функций и опциональных аргументов функций

В чатике по го мне сказали что я ошибся языком, ¯\_(ツ)_/¯

Что эти ваши дженерики, тут бы простой код писать без кучи дублирований

Для себя я не нашёл жизни на го после шарпов

Кто что думает насчет https://swisscows.com/ и https://www.startpage.com/?

Первый, субъективно, вызывает доверия больше.

У второго - есть возможность просмотра вкладок в омнонимном режиме.

Бан которым я горжусь :D

// коммит с предложением удалить весь код electron

Истерия, но все же.

*Обход требования TPM 2.0 решается путем подмены файла appraiserres.dll с образа последней win 10:


  • Открыть ISO-образ Windows 10 (либо через проводник либо архиватором);
  • В папке sources найти библиотеку appraiserres.dll;
  • Скопировать её в любое место, например на рабочий стол;
  • Открыть ISO-образ Windows 11;
  • Скопировать взятую прежде из Windows 10 библиотеку appraiserres.dll в папку sources с заменой

profit!..


Если все равно на этапе установки выдает ошибку о неподходящих системных требовниях, попробуйте обновить Windows 10 до 11 с помощью того патченного образа


// установил именно так


¯\(ツ)

Более новый V с огромными амбициями в альфа-версии.

Встретил еще статью о нем в песочнице
habr.com/ru/sandbox/148908
1

Information

Rating
5,536-th
Registered
Activity