Page 2 of 2

Posted: Wed Nov 30, 2011 6:01 pm
by Egor
...

(3). В топике, где выкладывают скрипты для AkelPad, подавляющее большинство скриптов написано на JS, но для WSH (как мне казалось) обычно пишут на VBS, это какое-то религиозное предпочтение? Просто лично я не люблю JS, у него смнтаксис тупой какой-то, в коде разобраться трудно.

Posted: Thu Dec 01, 2011 6:02 am
by Fr0sT
(3) Есть несколько скриптов на VBS, а так да, основной - JS, видимо, потому, что похож на С :)

Posted: Thu Dec 01, 2011 9:15 am
by FeyFre
обычно пишут на VBS
Обычно делают то что умеют лучше. В данном случае большинство народа лучше всего умеют писать на ECMA262, так как он более распространен(ибо развелось школоты аля программисты - веб программисты). Как только WSH научится Lua я перейду на него. А если научится С++ - тем более.

Posted: Thu Dec 01, 2011 2:50 pm
by opk44
Egor(3).
Кроме синтаксиса есть и иные различия. Пусть и малозаметные, но иногда "вдруг" становящиеся важными.
Например в списке методов AkelPad есть начинающиеся с символа подчеркивания: _TCHAR, _TSTR, _TSIZE, _X64. В VBS такие имена недопустимы, поэтому если такие методы вам в скрипте понадобятся, то очевидно, что этот скрипт будет написн на JS. А когда что-то кем-то ранее написано на JS, то логичнее не изобретать велосипед на VBS, а просто "подворовывать" из имеющегося. Но с другой стороны, в Jscript нет, например, полного аналога паре Asc()/Chr() из VBScript (если возникает необходимость работать не с юникодом, а именно с байтовыми кодировками), поэтому отказываться от VBScript окончательно ни к чему.

Posted: Thu Dec 01, 2011 6:15 pm
by Egor
opk44 wrote:В списке методов AkelPad есть начинающиеся с символа подчеркивания: _TCHAR, _TSTR, _TSIZE, _X64. В VBS такие имена недопустимы, поэтому если такие методы вам в скрипте понадобятся, то очевидно, что этот скрипт будет написн на JS
Понятно. А почему они начинаются именно с "_" — это какая-то неизбежная необходимость или просто разрабам "так захотелось"?

Posted: Thu Dec 01, 2011 7:24 pm
by Serge Yolkin
Egor
Вы исключаете вероятность тьго, что "разрабы" не знают Васика и ограничений его синтаксиса?

(Я не знаю)

Posted: Thu Dec 01, 2011 7:33 pm
by Infocatcher
Так, вроде, открытым текстом написано:

Code: Select all

  'VBScript deny names start with (_) underscope
  if AkelPad.IsOldWindows() then
    TCHAR="A"
    TSIZE=1
    TSTR=0
  else
    TCHAR="W"
    TSIZE=2
    TSTR=1
  end if
(Scripts-Rus.txt)

А вот аналога для _X64 что-то не видать.

P.S. И да, underscore :)

Posted: Thu Dec 01, 2011 10:03 pm
by FeyFre
А почему они начинаются именно с "_" — это какая-то неизбежная необходимость или просто разрабам "так захотелось"?
А почему у нас правостороннее дорожное движение, а у японцев и англичан левостороннее?
В общем легенда такая.
Заметили что эти константы имеют общее? А именно: _T
Так такая вот комбинация символов используется в Microsoft SDK для унификации структуры приложений которые должны быть совместимы на разных версиях оболочки: на ANSI-версиях и на UNICODE-версиях. Ну а так как это довольно таки удобно, то почему бы его тут не сделать?

Posted: Fri Dec 02, 2011 6:10 pm
by Egor
Я все-таки так и не понял: когда разрабы создавали AkelPad и его объектную модель, они были _вынуждены_ использовать символ "_" в начале некоторых констант, или они просто решили, что это типа прикольно ("похоже на C++")? Я не программист и не имею ни малейшего представления, как там WSH прикручен к AkelPad, я рассуждаю, наверное, тупо, но: если плагин Scripts основан на WSH, а под WSH пишут либо на JS, либо на VBS, то почему произошло так, что VBS применительно к AkelPad претерпел "расовую дискриминацию":)?

Posted: Fri Dec 02, 2011 7:28 pm
by FeyFre
Egor
Также у программистов принято начинать с символа _ или называть только символом _ переменные либо функции, которые не имеют значения для процесса решения прикладной задачи(служебные) либо вообще не нужны. Например, код для обмена двух переменных значениями:

Code: Select all

int supernumberone = 55;
int supernumbertwo = 66;
// меняем используя временную пременную
int _temp = supernumberone;
supernumberone = supernumbertwo;
supernumbertwo = _temp;
В этом примере переменная _temp не играет никакой полезной прикладной роли в отличии от supernumberone и supernumbertwo, а потому её назвали с подчеркиванием в голове. Конечно могли назвать и temp, но тогда при обилии таки временных переменных среда разработки засоряла бы список подсказки на слова начинающиеся с temp, и вместо того что-бы сразу же подсказать например какого-нибудь temperature_last_known, оно засорит его temp1,temp2,temp2, и т.д. и вся польза от подсказки улетучится.
Второй пример:

Code: Select all

const _TCHAR* format = _T("Super format string %s%s%s");
_tprintf(format,_T("Hello"),_T(", "),_T("World!\n"))
В этом примере макросы _T, _TCHAR и _tprintf - служебныу макросы, суть которых знать не обязательно, ибо прикладной задачи не несут. Потому оформлены с _. Так удобно, ибо программист знает что полезной прикладной функции они не несут.

Posted: Mon Dec 05, 2011 10:07 am
by Fr0sT
FeyFre
но все же надо признать, что это фича в основном сишная. И как большинство сишного, неинтуитивная (а ведь есть еще и двойное "_" ...)

Posted: Mon Dec 05, 2011 10:49 am
by FeyFre
Fr0sT, игнорируя свою практику, говорю: судя по тому чего напринимали в ISO/IEC 14882:201 (известен как C++11) то нам понадобятся не только _T но и хз ещё что.