Функция не обязана возвращать результат и вторым значением ошибку. Ошибка может быть на любом месте возвращаемых значений.
Хорошо, можно же просто пометить функцию, как не возвращающую ошибку, верно?
fn strong_function() string {
return "some"
}
Функция не обязана возвращать только одну ошибку. Их может быть и больше.
Go way нам сказал, что это ошибка - это просто просто значение А значит, мы можем просто вернуть с одной функции несколько значений, верно?
fn more_errors_function() (string, int) {
return "i am eror", 42
}
err1, err2 := more_error_func()
println(err1)
println(err2)
Если функция возвращает ошибку, это вовсе не говорит о том, что эта ошибка "произошла" при выполнении функции. Возможно, данная функция - это всего лишь фабрика ошибок. Об этом может знать только сам разработчик.
А значит код в блоке or {} - мы определяем сами, верно? :D
Может обработать ошибку и вернуть значение по умолчанию:
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..
// вызываем функцию, а если ошибка - паникуем
data := read_from_db() or { panic(err) }
// ещё вызываем функцию, но необрабатываем ошибку если она есть - !
processed_data := process(data)!
// вызываем функцию, а если ошибка, то обрабатываем её в этом блоке - например, вызываем функцию do_something с передачей ошибки в качестве аргумента
write_result(processed_data) or {
do_something(err)
}
За недостатки Квазара мы тут поговорили, а за достоинства $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 поддерживает различные фишки, взятые от разных языков. Но думаю, что желание запихнуть в язык как можно больше всего в какой-то момент может его убить.
Он отмечал, что хочет предоставить разработчикам единый путь для реализации чего-то - чтобы не нужно было искать библиотеку для парсинга json, или искать бекенд фреймворк или orm для чего-то простого - всё из коробки: UI либа, ORM, вебсервер и куча других батареек
Кстати, для VSCode есть плагин, поддерживающий этот язык.
Интересно наблюдать за развитием языка - ишью правятся шустро (что быстро опровергает множество статей против "V"), батарейки работают, синтаксис принципиально не усложняют
Решил отойти от мейнстрима и потыкать что нибудь легковесное вместо Electron'a
Было интересно потыкать связку $mol + tauri = результат понравился: шустрое приложение, много не кушает (< 100мб оперативки):
С молом проблем особо не возникло, благо отзывчивое в последнее время комьюнити занимается документацией и сейчас ситуация лучше, чем полгода/год назад
С таури возникла заминка с установкой rust'a - c++ билд тулзы через установщик не ставились без впн, зато хот релоад завелся без проблем, что, несомненно, плюс
Сбилженное приложение весило ~8 мегабайт:
Рантайм с собой не тащит, использует системные webview
Я завязываюсь не на фичи языка, а на концепции, реализуемые языком
Считаю, что если язык не предоставляет мне возможность стрелять себе в ноги, то это плохо
Но плохо не потому, что это есть, а плохо потому, что мне, как программисту, это недоступно
Когда меня убеждают в ненужности подобного, у меня словно отнимают инструменты, взгляды, парадигмы и концепции размышлений. Вся та сборная солянка, на которую можно гибко опираться при решении разного рода задач.
Ограниченный скоп этого вы назвали идиоматикой языка, соглашусь.
*Обход требования 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 с помощью того патченного образа
Хорошо, можно же просто пометить функцию, как не возвращающую ошибку, верно?
Go way нам сказал, что это ошибка - это просто просто значение
А значит, мы можем просто вернуть с одной функции несколько значений, верно?
А значит код в блоке
or {}
- мы определяем сами, верно? :DКонструкция
or
Может обработать ошибку и вернуть значение по умолчанию:
Может раньше прервать выполнение:
Может исполнить какой-то другой код:
и просто, и гибко :D
а это ещё не зашла речь про panic, recover и defer..
А может просто вызывать метод или, если ошибка, исполнить другой код?
Например, как это сделано в V :D
https://docs.vlang.io/type-declarations.html#optionresult-types-and-error-handling
Пример из статьи выглядел бы так:
и никаких вам
if (err != nil)
:>Отнюдь! И на $mol такой разбор есть - https://www.youtube.com/watch?v=45ViZviwwT8
.
Мы много хотим от одного человека - фреймворк, поддержку и рекламу
.
Дядька как-то выражал свою позицию насчет продвижения своего детища - https://www.youtube.com/watch?v=Gg1Lg4WeThk
.
.
Не призываю это все смотреть, скорее присмотреться к чатикам, может что-то завлечет - там множество разношерстных тем, не только про $mol, не только про фронтенд (https://t.me/h_y_o_o) :D
.
Со временем появятся больше людей, которые встанут перед вами и Димой в чате, поспорят и предложат хорошее решение :>
Многие из этих приложений сделаны одним человеком - автором экосистемы
На них продемонстрирована одна из коробочных идей фреймворка - буклетная дизайн система
Плюсы которой, например, в адаптивности - ваша верстка сходу будет сносно работать/выглядеть на пк/мобилках
.
И это не говоря о реактивности, и ленивом рендеринге по умолчанию
.
.
Также есть примеры и "нетипичного мола":
https://todomvc.hyoo.ru/
https://lyumih.github.io/origami/
Меня как бекендера, устраивает стандартная UI библиотека - я чаще всего просто её использую и оно просто работает
.
.
Не шибко корректное сравнение
Угрубим что React - это библиотека рендеринга, где пишут на JSX, все
Angular - уже более комплесное, "сложное" решение из коробки
Vue - тоже самое что и React, только с реактивностью из коробки чуть лучше и нет JSX
Svelte - шото react'vue с отказом от рантайма
.
$mol - это собирательное название готовых компонентов и систем:
это его кастомизируемый Ui
это его язык описания разметки view.tree
это его система реактивность $mol_wire
это его возможность использовать децентрализованную базу данных для хранения
это его разные исследования и технические анализы
это его /куча название сущностей/
.
.
В своей сути, 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
.
.
.
Мне нравиться комьюнити мола - за три года стабильно помогают одни и те же знакомые ребята
Это даже быстрее, нежели гуглить вопросы/рыться в документации, которую недавно собрали в одном месте
Приходят также новые дядьки, что пытаются в свои пет проекты на моле и активничают в чате
Как-то так, ¯\(ツ)/¯
лукавите, в go по умолчанию собирается прод сборка :D
обычная сборка (
v .
) прошлась за 235мспродовая сборка (
v -prod .
) прошлась за 34мсДля чистоты также не хватает кода на го, предположим что он таков:
этот код на го на моей машине исполняется (
go run main.go
) за 36мсВ данном примере любопытно сравнить размеры бандлов, потому что у V первый блок кода собрался в бинарь весом в 140 килобайт, код на го в бинарь весом в 1.3мб
Подытожив, код на V отрабатывает не медленнее эквивалента на го, а размер статического бандла меньше на порядок (140кб vs 1.3мб)
Но хорошо, отойдем от синтетики
Тут неплоха демка от автора языка для челиков из IBM: https://www.youtube.com/watch?v=_dIAcNp9bJs
Он отмечал, что хочет предоставить разработчикам единый путь для реализации чего-то - чтобы не нужно было искать библиотеку для парсинга json, или искать бекенд фреймворк или orm для чего-то простого - всё из коробки: UI либа, ORM, вебсервер и куча других батареек
Дап, также недавно вышел плагин языка для идешек от джетов: 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
Истерия, но все же.
Решение для Win 10 1607 и старше
*Обход требования TPM 2.0 решается путем подмены файла appraiserres.dll с образа последней win 10:
profit!..
Если все равно на этапе установки выдает ошибку о неподходящих системных требовниях, попробуйте обновить Windows 10 до 11 с помощью того патченного образа
// установил именно так
¯\(ツ)/¯
Встретил еще статью о нем в песочнице
habr.com/ru/sandbox/148908