|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Привет! Выработали в московском офисе Code Guidlines для Cache ObjectScript. Это рекомендация для публикации проектов на Cache в github.com/intersystems-ru , но помоему это хорошая рекомендация для любых проектов на COS вообще. Замечания и предложения приветствуются - добавляйте ваши issues , разумное внесем. Блог InterSystems на Хабре http://habrahabr.ru/company/intersystems/ Каталог статей по технологиям InterSystems http://intersystems.ru/cache/devcorner/habrahabr.html Видеоканал InterSystems Russia http://www.youtube.com/user/intersystemsrus ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2015, 23:19 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Исправьте синтаксическую ошибку: Set obj = Do ##class(Sample.Person).%New(initexpresion) Стоит ли настаивать на #dim? - псевдодекларации в бездекларативном языке могут вводить в заблуждение неофитов, - автодополнение в последних версиях Студии и без #dim работает неплохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 09:50 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey MaslovИсправьте синтаксическую ошибку: Set obj = Do ##class(Sample.Person).%New(initexpresion) Пофиксили Alexey MaslovСтоит ли настаивать на #dim? - псевдодекларации в бездекларативном языке могут вводить в заблуждение неофитов, - автодополнение в последних версиях Студии и без #dim работает неплохо. Да. Ну впрочем это в Recommendation Part, а не в Mandatory. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 10:10 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey Maslov, У нас есть внутренний инструмент coslint, написанный Сашей Кобловым, который пропагацию типов в выражениях делает на основе информации из #dim. (Да синтаксис многословен, и выглядит чуждо, и скорее не по мампсовому а по бейсиковому, но это единственной что есть и что будет) Для Atelier будет написан свой linter (уже на java) но работать он будет по схожему принципу. Посему, считайте это forward compatble рекомендацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 10:49 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Timur Safin, Давайте попробуем честно (без скрытой рекламы) ответить на простые вопросы. Вот мои варианты ответов. 1) В языке COS есть декларируемые типы данных? - Их нет. 2) Студия справляется с автодополнением без #dim? - Да. 3) Но Ateleir не справляется, как ему помочь? - Это проблемы разработчиков Atelier. Студия 5-летней давности тоже не справлялась. 4) Нужны ли в языке синтаксические конструкции, не соответствующие его семантике, а служащие лишь костылями для сыроватых инструментов? - Воздержусь от ответа :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 11:45 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey Maslov2) Студия справляется с автодополнением без #dim? - Да. Не всегда, есть особо хитрый код, когда это не работает. и опять же #dim был придуман для сырой Студии ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 11:56 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
DAiMorНе всегда, есть особо хитрый код, когда это не работает.Кто же спорит, и даже не особо хитрый: достаточно воспользоваться косвенностью или рекомендуемыми вместо неё $method/$classmethod - и никакой #dim не поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 12:27 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey MaslovTimur Safin, Давайте попробуем честно (без скрытой рекламы) ответить на простые вопросы. Вот мои варианты ответов. 1) В языке COS есть декларируемые типы данных? - Их нет. 2) Студия справляется с автодополнением без #dim? - Да. 3) Но Ateleir не справляется, как ему помочь? - Это проблемы разработчиков Atelier. Студия 5-летней давности тоже не справлялась. 4) Нужны ли в языке синтаксические конструкции, не соответствующие его семантике, а служащие лишь костылями для сыроватых инструментов? - Воздержусь от ответа :) Некоторые разработчики пишут #dim не для Code Completion в студии, а для большей читаемости кода, чтобы понимать, что это объектная переменная и именно такого класса. Я ленюсь так делать, но когда вижу чужой код с #dim - это более читаемый код. Т.е. еще раз - это рекомендация, а не обязательное требование. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 12:29 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Шваров ЕвгенийЯ ленюсь так делать, но когда вижу чужой код с #dim - это более читаемый код.Я тоже ленюсь :), кроме того, меня раздражает, что в эту переменную можно поместить всё что угодно, и "мне за это ничего не будет". Значит, увидев такую команду в чужом коде, я не могу быть ни в чём уверен. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 12:41 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey MaslovДавайте попробуем честно (без скрытой рекламы) ответить на простые вопросы. Вот мои варианты ответов. Это не скрытая реклама, это опыт вынесенный из жизни. Сашин линтер берет информацию о типах из аргументов и #dim, и для того, чтобы сделать его более счастливым при анализе моего кода приходилось расставлять #dim. Даже и без линтера #dim добавляют читабельность коду, посему эту практику решили рекомендовать в своих проектах. Еще раз, это рекомендация, и каждый волен её проигнорировать или принять к сведению. Мы свои аргументы рассказали. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 12:58 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Аргументы понятны. Читабельность улучшается, с этим не спорю. Timur SafinСашин линтер берет информацию о типах из аргументов и #dim...Встречный вопрос: будет ли этот инструмент опубликован? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 13:52 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey MaslovВстречный вопрос: будет ли этот инструмент опубликован? Может быть, как просить, много неподдерживаемого там замешано (API не будет никогда опубликовано, серверная поддержка там заморожена из-за Atelier, и все такое). Как минимум, можно попробовать поиграться с объектным кодом, для конкретной версии. Давайте проведем это через официальные каналы? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 14:49 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
С другой стороны, в Atelier линтер предполагатся реализовать на стороне IDE на Java. С использованием инфраструктуры созданной для Atelier. И сообщество здесь может помочь получить этот результат скорее раньше чем позже... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 14:52 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Timur SafinКак минимум, можно попробовать поиграться с объектным кодом, для конкретной версии.Спасибо, без исходников неинтересно. Если развитие заморожено, то тем более. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 15:34 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey MaslovСпасибо, без исходников неинтересно. Если развитие заморожено, то тем более. Непонятно, Алексей Игоревич, а почему неинтересно? Если этот инструмент будет делать свою уникальную функцию и делать в отсутствие альтернативы еще около года или более? Кого-то смущает отсутствие исходников кода, который, скажем, раскрывает короткие инструкции в полные в Студии (Ctrl+E)? Или который делает рефакторинг переименованием? Или который увеличивает отступы в выделенном блоке? Нет, это всего лишь функции набора инструментов, используемого сегодня разработчиками в Cache'. И так получилост что у нас есть еще и (неидеальное, но) решение для еще одной полезной функции - статической проверки кода, которая, кстати, была сделана на базе того же набора классов, что и используется кодом рефакторинга. Да, этот серверный фреймворк, в силу текущих приоритетов, не будет меняться, а будет создаваться (когда-нибудь) клиентская поддержка. Но такая стабильность серверного API сегодня - даже может быть и хорошо, это значит, что при смене версии (неподдерживаемый официально) API не поплывет, и инструмент продолжит работать. Да и кого из сообщества когда останавливал статус неподдерживаемого API? Если он был полезен уже _сегодня_? Вот вы в СП.АРМ и многие в других местах используете %Net.RemoteConnection, кого-то останавливает что это API давно deprecated? :) P.S. Если кому очень нужен COS linter - обращайтесь, мы найдем способ донести его (в том или ином виде) до ваших серверов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 01:49 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
То, что я скажу - вкусовщина, но тем не менее. Для чего нам нужны большие буквы? Они нам нужны для выделения акцентов или разделения компонент в сложных идентификаторах. Для чего рекомендовать полные длинные ключевые слова? Чтобы читающий программист увидел, что Set - это Set? Как минимум каждая вторая строка - Set. Зачем делать на ней акцент? Я понимаю, есть смысл выделить, например, имя класса, но зачем для постоянно используемых ключевых слов это делать? "s", "d", "q" более чем достаточно. Для более редко используемых ключевых слов достаточно их полного названия. Я понимаю, в случаях, когда предполагается чтение кода программистами, не знающими COS использование длинных ключевых слов повышает читаемость кода, но там ли часто мы пишем для них? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 05:45 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Блок А.Н...."s", "d", "q" более чем достаточно. ...Относительно "s" и "d" соглашусь - по факту ключевые, а по смыслу шумовые слова, наследие чистых интерпретаторов. Basic давно избавился от "let", MUMPS'у от "set" не избавиться, по-видимому, никогда. А quit quit-у рознь, иногда хочется выделить выход из цикла. Впрочем, конечно, всё это вкусовщина :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 06:58 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Timur SafinНепонятно, Алексей Игоревич, а почему неинтересно?Потому что будь он в исходниках, мы, возможно, доработали бы его под свои нужды. А так - нет его, и Аллах с ним. Напишем свой. P.S. С трудом верится, что использование внутреннего API может быть причиной закрытия исходников. В cachesys полно открытого кода, использующего всевозможные внутренние API, полно кода потенциально опасного, (который я естественно не буду цитировать на форуме), однако это никого не волнует. P.P.S. А то что API сегодня рекомендуется, завтра заморожено, послезавтра снова разморожено - к этому привыкли и не боимся, слава Богу, уже 15 лет в Cache :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 07:06 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey Maslov, Ладно, по поводу quit соглашусь. Я тоже for, open, if не сокращаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 07:55 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Alexey MaslovБлок А.Н...."s", "d", "q" более чем достаточно. ...Относительно "s" и "d" соглашусь - по факту ключевые, а по смыслу шумовые слова, наследие чистых интерпретаторов. Basic давно избавился от "let", MUMPS'у от "set" не избавиться, по-видимому, никогда. А quit quit-у рознь, иногда хочется выделить выход из цикла. Впрочем, конечно, всё это вкусовщина :) Согласен, что set и do можно было бы вообще упразднить. По поводу длинных команд: сам пишу в сокращенном виде, но студии есть комбинация Alt+E, которая все команды превращает в длинную форму - делаю это перед коммитом. Читабельность кода на мой взгляд повышается. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 12:28 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Шваров Евгенийно студии есть комбинация Alt+E, которая все команды превращает в длинную форму Ctrl+E ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 12:46 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Полные имена команд в mandatory... Кто-то будет икать. Долго :) Шваров Евгенийно в студии есть комбинация Ctrl+E ДокументацияCtrl+E In an ObjectScript document, commands in a selection are replaced with their full names. Т.е. Ctrl+A и Ctrl+E каждый раз на каждом классе. Можно было бы понять и простить автоматизировать как здесь , но есть ли API? Шваров ЕвгенийСогласен, что set и do можно было бы вообще упразднить. С set чревато, например Код: plaintext
Вместо лаконичного и стремительного М - многословный COS с вшитым UpperCase, %New, ##class. Теперь еще #dim - красоты не добавит и большинства проблем не решит. Что слышно насчет нового языка ( js )? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2015, 21:34 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
doublefintШваров ЕвгенийСогласен, что set и do можно было бы вообще упразднить. С set чревато, например Код: plaintext
Я не понял чем чревато? (Пример был дан с if-ом старой формации, тогда как Женя говорил про ненужность ключевого слова if и do для парсинга присвоения и вызова функции при LL(n) грамматике) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 01:44 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Еще раз попытаюсь донести причины обязательного полного именования инструкций: - мне все равно как пишут старые мампсеры, в своих внутренних проектах они могут по-прежнему использовать голый односимвольный MUMPS; - но мне не все равно как код, который мы выложили в своих внешних open-source репозиториях, будет выглядеть в глазах новичков. Я не хочу чтобы у них сразу взорвался мозг, и хочу чтобы наши проекты были хотя бы частично понятны любому новичку со средним бекграундом с JavaScript/Basic/другой язык общего назначения. С первого взгляда. Это сложная, но решаемая задача: надо пытаться писать писать просто, без извращенных идиом, без точечного синтаксиса, правильно используя отступы в блоках "нового" вида, разумно комментируя и разумно именуя. Полное написание языковых конструкций и встроенных функций с этой точки зрения - первый, обязательный шаг. Код должен быть понятен. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 02:38 |
|
Правила хорошего COSa
|
|||
---|---|---|---|
#18+
Timur SafinЯ не понял чем чревато?Тем, что если упразднить set, надо будет как-то разделять оператор присваивания от оператора сравнения Код: plaintext 1. 2.
Timur SafinПолное написание языковых конструкций и встроенных функций с этой точки зрения - первый, обязательный шаг Точка зрения понятна. Вопрос остался - можно ли это автоматизировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 10:25 |
|
|
start [/forum/topic.php?fid=39&msg=39127991&tid=1556518]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 157ms |
0 / 0 |