Thank
Библиотека Aurora
-
На момент написания этого поста aurura это:
- версия 1.0.1
- ровно сотня доступных функций:

- 653 строки кода
- 37 килобайт кода плюсом к каждому потоку BAS
- 33 килобайта в заархивированном виде и 148 в распакованном

В планах развития:
- написать объект ajn (aurora json) и включить туда весь функционал модуля Json https://community.bablosoft.com/topic/6192/модуль-парсинга-json
- писать проекты с использованием библиотеки и добавлять необходимые функции по мере написания.
Используйте библиотеку, экономьте своё время и дополняйте её своими функциями. Делитесь этими функциями прямо здесь, а я включу их в следующие релизы.
В свою очередь я, как разработчик, гарантирую следующие незыблемые принципы развития проекта:
- полная обратная совместимость. При обновлении версий все старые функции будут работать так же, даже если их код претерпит изменения. Это значит, что при обновлении до новой версии библиотеки, весь старый функционал будет работать без сбоев и вам не нужно будет беспокоится за свои проекты.
- расширяемость. Библиотека может дополняться новыми объектами и функциями, старый набор функций остаётся без изменений.
- модульность. Новые функции могут использовать функционал старых функций. Одни функции используют функционал других. Так, например, функция вывода лога использует функционал ещё трёх-четырёх функций для вывода (за номер потока, вывод времени, цвет лога отвечают отдельные функции).
P.S. сообщайте о багах,если таковые будут выявлены :)
-
Простите за нескромный вопрос - но чем это облегчает работу? Как по мне так наоборот усложняет ) Использование аргументов на кирилице ваще нечто )) Эдакие екселевские суперфункции с божественным синтаксисом понятным толкьо избранным. В остальном хз даже, самые примитивные функции js просто переименованы .... зачем? ) Мб в дальнейшем конечно вытечет в какой то полезный фреймворк но пока что мне не понятно
-
@qwaros во-первых, где вы увидели функции на кириллице?
Во-вторых, щас объясню на пальцах чем именно упрощает.
Откройте engine.js и посмотрите любую функцию. Чать из них завязана на api баса, но даже если брать их, то мы должны будем писать в коде, например:
eval('var regexp_result = native("regexp", "first", JSON.stringify({text: content,regexp:"'+ regexp +'"}))') if(regexp_result.length == 0){regexp_result = []}else{regexp_result = JSON.parse(regexp_result)} var result = regexp_result.pop() if(typeof(VAR_TV_0) == 'undefined' || !VAR_TV_0){VAR_TV_0 = ""} var result = regexp_result[0] if(typeof(result) == 'undefined' || !result){var result = ""} if(regexp_result.length == 0){var result = VAR_TV_0} return resultЧтобы получить первое вхождение регулярки.
Но если мы используем библиотеку, то в коде нам достаточно только вызвать одну функцию и передать ей регулярку и текст, вот так:
var first = are.first(regexp,content)Эту функцию реально запомнить и просто вызвать.
Да, подавляющее меньшинство функций завязаны на простые функции js и простые api баса, но посмотрите объект als. Это пример моего отношения к простым функциям js - сложный функционал, который писать муторно, я заменил на свой API, а вот простые функции указал в справочнике в примечании, чтобы даже новички могли пользоваться ими, а не моим API, попутно изучая JS.
В общем, вместо страницы кода, используя эту библиотеку, можно получить два-три "абзаца", если можно так выразиться. К этому и стремлюсь - ускорение и упрощение программирования.
На потоки влияет вроде не сильно, пока что это ещё небольшая библиотека. А компилятору всё равно, какие функции вставлять в готовый проект и откуда.
-
@pragmatik
Опытным пользователям этот модуль конечно никчему. А вот новичкам что бы пользоваться блоками - нормально. Но есть проблемы в еффективности. У вас много функций, которые просто внутри себя вызывают ОДНУ другую. Какой смысл этого копипаста кода? Вы в свои визуальные блоки можете вставлять первозданные функции. -
@drprime всё потому, что библиотека изначально разрабатывалась под задачу полного ухода от визуальных блоков (за исключением if-else и некоторых циклов). Можно, конечно, написать визуальные блоки, но лично я предпочитаю делать всё,что только возможно, в коде. Кому интересно - пусть переделывают библиотеку под экшены.
А по поводу вложенных функций - я не думаю, что это сильно нагружает проект, функции простые и выполняют несложные действия. Вложенность у меня тоже небольшая, хотя в блоках encode и decode нужно подключение внешней библиотеки CryptoJs - ещё плюс 48 килобайт кода к каждому потоку (что в общем-то тоже немного). Разве что алгоритмы более сложные, возможно что всякие действия по кодированию-декодированию хорошо загрузят процессор. А у меня особо сложных действий вроде нет.
-
@pragmatik Тут вопрос в другом. А какой тогда смысл человеку запоминать функции Вашего модуля, если можно просто запомнить функции js и bas?
Я беглым взглядом насчитал 20 функций, которые просто копируют другие функции.Но, я понимаю что Вами проделана большая работа.
Дам пару советов по оптимизации кода, это на будущее поможет Вам писать код лучше.- Убрать все eval(). Кокой смысл от них?
- Оптимизировать возврат функции. У вас много ненужных промежуточных переменных.
Например
asf.thread = function(){ var thread_index = thread_number(); return String(thread_index) }Лучше будет так
asf.thread = function(){ return thread_number().toString() }- Убрать непонятные символы в функциях
Например
ahc.getheader = function(header){ _switch_http_client_main() http_client_header('"'+header+'"') }Нужно так
ahc.getheader = function(header){ _switch_http_client_main() http_client_header(header) }Ну и вообще разобраться в построении функций. Читая Ваш код, пришел к выводу что Вы его бездумно копипастили из скрипта
Напримерagf.tmp_asynch = function(string){ _if(true, function(){ _template('"' + string + '"')! VAR_TMP = _spintax(_result()).replace("BASASYNC","\)\!")})! } agf.tmp = function(string){ agf.tmp_asynch(string) var result = VAR_TMP var result = result.slice(1) var result = result.substring(0, result.length - 1) return result }Вот у вас 2 функции.
В первой Вы скопировали в нее ненужный асинхронный _if()!
Во второй Вы вызываете асинхронную функцию неправильно.
То что она работает - случайность.
Хотя 2 этих функции можно заменить однойagf.tmp = function(string){ return _spintax(string) } -
@drprime said in Библиотека Aurora:
Но, я понимаю что Вами проделана большая работа.
Дам пару советов по оптимизации кода, это на будущее поможет Вам писать код лучше.Убрать все eval(). Кокой смысл от них?
Оптимизировать возврат функции. У вас много ненужных промежуточных переменных.
НапримерДа, на счёт оптимизации возвратов я полностью согласен. Где успел, сделал return правильно, но в некоторых копипастил из старого кода, ещё не просматривая.
Со _spintax - просто не знал как это работает, потому заменил на костыль в виде этих двух функций. В следующем релизе сделаю так.
А вот с eval дело другое. Eval у меня только там, где без него не работает, по крайней мере в блоках кода. Хотя, я,если честно, те же самые функции без eval в библиотеке не тестил. В следующем релизе их переберу, если заработает без eval, оптимизирую. -
@drprime said in Библиотека Aurora:
А какой тогда смысл человеку запоминать функции Вашего модуля, если можно просто запомнить функции js и bas?
Кстати, не призываю никого заменять знания js и BAS занием моей библиотеки. Напротив, лучше, если человек уже выучит js и api BASa и после, как и я, задумается об оптимизации кода. На вопрос "зачем" отвечу вашим же примером кода в таком случае:
Чтобы не писать (или не копипастить) код
_switch_http_client_main() http_client_header(header)А быстро ввести то, что запомнить проще:
ahc.getheader(header)Согласитесь, даже agf.tmp() написать быстрее и проще, чем return _spintax(). Несмотря на то, что редактор кода произошёл от IDE-шки, писать длинный код в нём не так удобно, а уж серьёзные большие функции и подавно. Но сам редактор отличный, напрягает только отсутствие тёмного скина.
-
@pragmatik чтобы получить первое вхождение регулярки можно не прибегать к методам древних шаманов а заюзать простой match() с выборкой [0] из результата... нарпимер
var find = "my text for regex".match(/regex/i); alert(find[0]) // выведет "regex"Имхо тоже реально запомнить ну или загуглить если лень запоминать
В целом хз )) Буду наблюдать за развитием, начинание безусловно хорошее :)
-
Самый большой недостаток сторонних библиотек, что их не будет в скомпелированном скрипте. Можно конечно сам код добавлять скрипт. Но не вижу смысла в таких костылях для использования стандартного функционала.
-
Кстати @Pragmatik если ты научиш свою либу хранить кастомные сиппеты и вставлять их нажатием парой кликов это будет просто огонь )) я б только из за этого ее юзал постоянно :D
-
@qwaros said in Библиотека Aurora:
Кстати @Pragmatik если ты научиш свою либу хранить кастомные сиппеты и вставлять их нажатием парой кликов это будет просто огонь )) я б только из за этого ее юзал постоянно :D
Код в редакторе кода пишется вручную, так как у редактора движок от какой-то IDE, похоже на visual studio code или на phpstorm. В эту сторону можно копать, если узнать какой именно движок используется, к нему при любом раскладе можно писать расширения. Но и то это довольно сложно будет. Потому я и делаю вместо сниппетов функции, их можно легко копипастить из справочника.
-
Пример использования библиотеки:
// Читаю из ресурса proxy прокси VAR_PROXY = asf.res("proxy") // Устанавливаю прокси на http-клиент ahc.proxy(VAR_PROXY) // Проверяю, установились ли прокси _switch_http_client_main() http_client_get2("https://2ip.ru/",{method:("GET"),headers:("")})! var content = ahc.content() var regexp = "<big[\\s\\S]+\?>([\\s\\S]+?\)</big>" var check = are.check(regexp,content) if (check){ alg.name('Проверка прокси', 'HTTP-прокси успешно установлен***success') }else{alg.name('Проверка прокси', 'HTTP-прокси не установлен!***error')} -
@usertrue said in Библиотека Aurora:
Самый большой недостаток сторонних библиотек, что их не будет в скомпелированном скрипте. Можно конечно сам код добавлять скрипт. Но не вижу смысла в таких костылях для использования стандартного функционала.
Кстати, есть для этого какое-то решение? Я вот вижу разве что функцию, которая будет записывать все использованные в проекте функции в массив, а потом перед компилляцией по команде весь этот массив сохранять в файл. А потом уже этот код можно добавлять в начало проекта. Надо будет обязательно реализовать, потому как пока что вручную перекидываю из библиотеки в скрипт... Кстати, можно ещё добавлять файлы библиотеки в готовый проект.