Да все на абапе реализуемо, как и на любом другом языке. Мы делали тул для автоматизации регрессионного тестирования, который запускал скрипты на питоне с тестами на селениуме, и потом все это забирал обратно в сап и обрабатывал (например).
Дорого — да, потому что абап разработка — это обычно не работа с нуля, а доработка того, что поставляется самим сапом, и какие-то большие велосипеды проще и быстрее выйдет писать тупо вне экосистемы сап и общаться с сапом по сети. Такова специфика.
Опенсорс — это какие-то либы и подобные инструменты. Проекта с "боевым" кодом вы не найдете, потому что это энтерпрайзный код, который ни одна контора не разрешит опенсорсить.
Ради примера, вот кусочек более сложной динамической сортировки оттуда же:
SORT itab BY VALUE abap_sortorder_tab(
( name = 'TABLE_LINE'
descending = SWITCH #( direction
WHEN 'UP' THEN ' '
WHEN 'DOWN' THEN 'X'
ELSE THROW cx_illegal_direction( ) )
astext = 'X ' ) ).
Вопрос не в функционале, а то, что это уже встроено в синтаксис. Можно и на си такое же реализовать, но чисто работать с этим будет очень многословно и неудобно. А тут под это уже все заточено из коробки, вот и все.
Да много чего, на самом деле. Если помнить, что таблица в ABAP — это массив структур, в них есть:
удобный механизм сортировок (практически как в SQL, даже более функциональный);
создание индексов для таблиц в приложении, и работа по ключам этих индексов (похоже на SQL, только в рантайме и с указанием конкретного индекса);
достаточно удобные циклы по таблицам, со встроенными группировками (то есть можно делать цикл в цикле по сложному условию, это встроено в синтаксис);
специальный тип (mesh) для древовидных структур данных, где каждая нода — таблица, и различные переходы между нодами по условиям и по путям (в цикле или без);
несколько типов таблиц (простая (индексный доступ), сортированная (доступ по первичному ключу), хешированная (доступ по ключу), + для первых двух можно строить индекс по вторичному ключу);
механизмы агрегации, упрощающие подсчет агрегатов по всей структуре строки, не по одному полю;
в целом таблица и структура (строка) — базовые типы в абапе, и на них много чего построено.
бонус: недавно завезли возможность выполнения SQL над локальными данными силами сервера приложений.
Может звучать не так уж впечатляюще, но для приложений, очень активно использующих данные из БД, это очень и очень полезный функционал. В других языках мне этого часто очень не хватает.
На самом деле основная претензия к ABAP — дедовский синтаксис из кобола (который потехоньку уходит в прошлое с новыми релизами), хотя большинство тех же ФП языков страдают тем же.
Что касается IDE — сейчас все стало значительно лучше, чем было лет 5 назад, т.к. у языка появилась поддержка в эклипсе, который хоть и морально устарел, но на порядок лучше того редактора, который есть в самом SAP.
А так, если не обращать внимание на синтаксис (а со временем такие вещи перестаешь замечать, просто думаешь о функционале), то ABAP — лучший язык для работы с табличными данными как таковыми, что я видел. Действительно очень хорош для своей области, но не без недостатков, конечно.
Смысл не в defer а в том, что тикер нужно остановить, иначе он будет бесконечно крутиться. Это логично, но если для кого-то не очевидно, то есть в доках. defer помогает только в том, чтобы выполнить его гарантированно при выходе из функции, а так можете где угодно вызывать, главное, чтобы он был вызван. Некоторые линтеры проверяют вызов функций Close(), кстати.
"safe for concurrent use" подразумевает вызов функций как таковых, а не относительной последовательности. Если вы закроете thread-safe канал в одной рутине, а в другой будете в него писать — будет паника, и это ожидаемо.
зависит от разработчика, для этого и делается кодревью.
В го легко допустить ошибки с конкурентностью — потому что конкурентность в принципе совсем не такая, как кажется на первый взгляд. Возможно есть какие-то чеклисты, можете составить свой.
Обычно такие вопросы задают в чате про Go где-нибудь в телеграме или слаке, а не тут.
В каком случае он не останавливается? Если при ticker.Stop() дожно останавливаться, в примере из документации так и написано: defer ticker.Stop(). Более того, там еще и словами написано: "Stop the ticker to release associated resources". Или вы что хотите чтобы он сделал?
Приведите пример, о чем пишите. Thread-safety означает, что тип позволяет использовать определенную операцию параллельно, не боясь словить панику при одновременной записи или чтении, например, а не то, что можно использовать разные операции в каком угодно порядке. Это ничего не говорит о том, что если состояние было изменено в одной горутине (например, канал закрыт), то это не аффектит другие места.
Если не сказано другого, sync.Mutex относится к полю структуры, идущему сразу же за мьютексом. Не помню, где конкретно про это написано, но теперь вы знаете.
В целом ничего из этого не является проблемой Go как языка. Конкурентные программы — сложная тема, и нужно хорошо понимать, что и зачем делается, чтобы не выстрелить себе в ногу. Go, по сравнению с другими языками, и так делает конкурентность простой и ванильной. Но полностью думать за разработчика компилятор пока не научился, отсюда и проблемы.
P.S.: документация в го очень хорошая и подробная, также не забывайте про примеры в документации (которые есть исполняемые тестовые файлы) и про юнит тесты тоже.
Еще много полезного есть в блоге, особенно там хорошо разжевано то, что касается конкурентности, мьютекстов и всего такого "сложного" для новичка из однотредовых языков.
Вывод простой — если вектор работы работника и руководителя не сходится (по любой причине) — работу проще сменить, чем что-то доказывать. Всем будет лучше
Да все на абапе реализуемо, как и на любом другом языке. Мы делали тул для автоматизации регрессионного тестирования, который запускал скрипты на питоне с тестами на селениуме, и потом все это забирал обратно в сап и обрабатывал (например).
Дорого — да, потому что абап разработка — это обычно не работа с нуля, а доработка того, что поставляется самим сапом, и какие-то большие велосипеды проще и быстрее выйдет писать тупо вне экосистемы сап и общаться с сапом по сети. Такова специфика.
Опенсорс — это какие-то либы и подобные инструменты. Проекта с "боевым" кодом вы не найдете, потому что это энтерпрайзный код, который ни одна контора не разрешит опенсорсить.
Не коболовским, а дедовским
Запустить просто так не получится. Либо иметь под рукой SAP, либо зарегистрировать себе демо акк SAP Cloud Platform.
Опенсорс проекты — посмотрите тут, только те, что посвежее.
И тем не менее бизнес-логику на нем тоже пишут.
По поводу go-linq — нужно смотреть бенчмарки, есть предположение, что из-за рефлексии он будет очень медленный. Но спасибо, интересное решение.
Ну вот сейчас пишу на Go, и там такого даже рядом нет :)
Есть для и этого решения, но лично я с этим не работал, поэтому не могу сказать, насколько это хуже/лучше какого-нибудь S3 :)
Откройте какой-нибудь опенсорс проект на абапе и почитайте.
Синтаксис мб непривычный для тех, кто на сиподобных сидит, но сам язык по сути от джавы не сильно отличается.
Из-за самого языка никто не страдает, страдают только из-за закрытости инфраструктуры SAP.
В целом базовый функционал примерно такой же, как в SQL:
Хотите полный функионал — смотрите доки.
Ради примера, вот кусочек более сложной динамической сортировки оттуда же:
Можно и blob в базе хранить и работать с ним. Другое дело, что с бинарями в абапе крайне редко приходится работать, но инструментарий есть всякий.
Вопрос не в функционале, а то, что это уже встроено в синтаксис. Можно и на си такое же реализовать, но чисто работать с этим будет очень многословно и неудобно. А тут под это уже все заточено из коробки, вот и все.
Да много чего, на самом деле. Если помнить, что таблица в ABAP — это массив структур, в них есть:
Может звучать не так уж впечатляюще, но для приложений, очень активно использующих данные из БД, это очень и очень полезный функционал. В других языках мне этого часто очень не хватает.
На самом деле основная претензия к ABAP — дедовский синтаксис из кобола (который потехоньку уходит в прошлое с новыми релизами), хотя большинство тех же ФП языков страдают тем же.
Что касается IDE — сейчас все стало значительно лучше, чем было лет 5 назад, т.к. у языка появилась поддержка в эклипсе, который хоть и морально устарел, но на порядок лучше того редактора, который есть в самом SAP.
А так, если не обращать внимание на синтаксис (а со временем такие вещи перестаешь замечать, просто думаешь о функционале), то ABAP — лучший язык для работы с табличными данными как таковыми, что я видел. Действительно очень хорош для своей области, но не без недостатков, конечно.
deferа в том, что тикер нужно остановить, иначе он будет бесконечно крутиться. Это логично, но если для кого-то не очевидно, то есть в доках.deferпомогает только в том, чтобы выполнить его гарантированно при выходе из функции, а так можете где угодно вызывать, главное, чтобы он был вызван. Некоторые линтеры проверяют вызов функций Close(), кстати.В го легко допустить ошибки с конкурентностью — потому что конкурентность в принципе совсем не такая, как кажется на первый взгляд. Возможно есть какие-то чеклисты, можете составить свой.
Golang blog вам в помощь, можете начать отсюда, отсюда, отсюда и отсюда.
Обычно такие вопросы задают в чате про Go где-нибудь в телеграме или слаке, а не тут.
ticker.Stop()дожно останавливаться, в примере из документации так и написано:defer ticker.Stop(). Более того, там еще и словами написано: "Stop the ticker to release associated resources". Или вы что хотите чтобы он сделал?sync.Mutexотносится к полю структуры, идущему сразу же за мьютексом. Не помню, где конкретно про это написано, но теперь вы знаете.В целом ничего из этого не является проблемой Go как языка. Конкурентные программы — сложная тема, и нужно хорошо понимать, что и зачем делается, чтобы не выстрелить себе в ногу. Go, по сравнению с другими языками, и так делает конкурентность простой и ванильной. Но полностью думать за разработчика компилятор пока не научился, отсюда и проблемы.
P.S.: документация в го очень хорошая и подробная, также не забывайте про примеры в документации (которые есть исполняемые тестовые файлы) и про юнит тесты тоже.
Еще много полезного есть в блоге, особенно там хорошо разжевано то, что касается конкурентности, мьютекстов и всего такого "сложного" для новичка из однотредовых языков.
Так DTAG то — немецкая компания :)
Очевидно, что цифры и буквы мировое правителсьтво придумало для того, чтобы людей дурачить!
Для защиты от ядерного взрыва нужны ламповае роутеры и свичи.
Злободневно. Нужно продавать как ЦОД с защитой от рейдерства.
Вывод простой — если вектор работы работника и руководителя не сходится (по любой причине) — работу проще сменить, чем что-то доказывать. Всем будет лучше
А где, простите, связь между разработкой и реверс-инженирингом?