Что нового

Какими ЯП вы владеете и за что любите/не любите AutoIt

erlik

Продвинутый
Сообщения
317
Репутация
84
AZJIO
Нужно программировать на том языке который лежит по душе, на котором быстро получается сделать, который даёт результаты труда и перспективы...
Оифгенно правильно сказал. :ok:
------------------
Сам начинал с lua - (кодил для сталкера) - язык очень простой и в чем то даже гениальный (работа с массивами построена так, что начинать код без объявления массива просто даже скучно). Кодить на нем для игр (используя экспортированный API движка игры) сплошное удовольствие. НО GUI и прочие плюшки на нем не освоил - нет хорошей русскоязычной документации, книг и т.д. Без хорошего знания английского освоить все его библиотеки тяжело. Поэтому пока забросил.
Потом захотел узнать, что такое ООП и с чем его едят. Год сидел на C#...Понял, что без ООП я вполне могу обойтись, а изучать миллион (и это не преувеличение) классов показалось как то слишком долгим и нудным ;)
Поэтому тоже пока забросил. (Ну про VBScript и MSJScript можно не упоминать - их изучил параллельно с ковыряним в Windows). И на данный момент вполне доволен кодингом на AutoIT - для полноценного изучения языка есть все: и докуменация, и книжки, и отличный форум. C минусами (отсутствие многопоточности) пришлось смириться - в конце концов я ж не профессиональный программист, а любитель-самоучка, большими проектами не занимаюсь, а пишу для себя. Пока мне хватает и того что есть. Плюсы языка: простой синтаксис, легкость обращения к WinAPI (не то что в C#) и хорошая поддержка сообщества.
...Время от времени посматриваю в сторону Perl, PureBasic, Pyton. Но всему свое время. Как верно сказал AZJIO 'когда возникнет потребность, тогда и надо переходить'.
 

sss

Продвинутый
Сообщения
332
Репутация
96
Своим основным языком считаю C++. Бесплатный, кроссплатформенный, мультипоточный, ООП, большое количество также кроссплатформенных фреймворков (Qt, Boost), приятный синтаксис, очень большие возможности. На нем пишу (не)большие программы для ПК (Windows и Linux - сборка eclipse + MinGW\GCC + Qt на этих платформах почти идентична), программирую микроконтроллеры (пока только AVR и PIC семейства, но скоро планирую взяться за ARM).

Следующим (не по симпатиям, а по списку :smile:) идет AutoIt. Соотношение мощность/простота просто зашкаливает, очень легкий для понимания синтаксис, большое количество готовых функций под все случаи жизни. Но есть пара минусов - однопоточный, интерпретируемый... Его использую в основном для обработки большого количества данных и автоматизации однотипных задач.

Завершает список моих любимых языков программирования PHP и JavaScript (HTML и CSS же не считается? :smile:) Для сайтов и промежуточных серверов - милое дело.

C# не люблю за привязанность к Windows и слишком навязчивую политику Microsoft'а (на С++ принципиально не использую Visual Studio, его компилятор и библиотеки).

А вообще, я думаю, что нельзя советовать кому-то ЯП. Человек должен сам выбрать, что ему нравится. Кто-то предпочтет Си вместо Явы, кто-то Питон вместо Делфи, кто-то что-нибудь из этого - на вкус и цвет фломастеры разные...
 

sims

Осваивающий
Сообщения
184
Репутация
24
Выбор языка программирования во многом зависит от задач, которые предстоит решать. Скажем, если нужна многопоточность, то глупо писать на AutoIt (конечно задачу можно решить в одном потоке, но какова будет цена этого?) и наоборот, если нужно что-то автоматизировать, то лучше применить специализированный инструмент, типа AutoIt.
Поэтому прежде чем посоветовать ЯП, нужно узнать каковы задачи предстоит решать и какое дополнительные условия присутствуют (платформа, требование к скорости работы и размеру программы и т. д.).

asdf8 [?]
Если бы для С/С++ была IDE
Дало не в IDE, а в организации структуры и внутреннего устройства ЯП.
Си - слишком низкоуровневый ЯП. В нем даже нет строк как таковых, а есть массивы символов, т. е. почти со всем придется работать на низком уровне, что аукнется в виде длительного времени разработки и высокой вероятность допустить ошибку.


[?]
нужно постоянно следить за типами переменных
Что же в этом плохого? Тем более что следить особенно и не надо. Видимо вы не имели дела с Си. Вот там действительно нужно следить и самому преобразовывать типы переменных (приводить к требуемому), а в PureBasic приведение типов переменных, возложено на компилятор и программисту об этом думать не нужно. Единственное что иногда следует явно указать тип переменной при ее создании. Скажем, для Float чисел (с плавающей точкой) нужно к переменой при создании добавить суффикс .f, типа
Код:
x.f = 3.14
Это же касается и строковых переменных, при объявлении которых, нужно добавить суффикс .s.

Это ведь не просто так сделано. Наличие множества типов переменных позволяет компилятору оптимизировать код, что не только уменьшит размер исполняемого файла, но и увеличит его скорость работы.

встроенные библиотеки убого сделаны, приходится много чего переписывать самому на WinApi.
Что с ними не так?

joiner [?]
то есть если в AutoIT добавить многопоточность и кроссплатформенность, то будет вполне себе ничего?
Для этого придется полностью переписать AutoIt. ;) :whistle:
 

sss

Продвинутый
Сообщения
332
Репутация
96
нет строк как таковых, а есть массивы символов
В Си - да, а вот в Си++ есть класс std::string - полноценная строка. К тому же фреймворки сильно облегчают жизнь. А IDE помогают избежать этих самых ошибок, на лету подсказывая: аккуратнее, тут вместо сравнения присваивание стоит и т.д... В итоге получается гибкий инструмент, который позволяет легко делать довольно сложные вещи (сетевой сервер, поддерживающий несколько соединений, например), и в то же время позволяющий добраться до низкоуровневых фич.

Если бы для С/С++ была IDE
NetBeans, eclipse CDT, Code::Blocks, Visual Studio наконец - уж явно не ниже уровнем, чем SCiTe...

joiner [?]
а чем? и откуда такой принцип?
не люблю за привязанность к Windows и слишком навязчивую политику Microsoft'а
Да и просто не нравится мне эта оболочка и компилятор - моим глазам неудобно. Использую сборку eclipse CDT Indigo + w64-MinGW32 v4.7.0. Причем простым нажатием кнопки можно скомпилировать сразу под Windows и Linux. Или переключить режим и в этой же eclipse писать PHP с авто-заливкой файла на сервер по FTP. Или кодить микроконтроллер. Очень удобно!
 

sims

Осваивающий
Сообщения
184
Репутация
24
joiner, заточено под винду и этим все сказанно, а еще размер явно раздутый!


Sky-WaLkeR [?]
сетевой сервер, поддерживающий несколько соединений, например
Так это довольно просто реализуется даже без многопоточности. И я не скажу, что подобный сервер сложно реализовать.
 

sims

Осваивающий
Сообщения
184
Репутация
24
joiner, скачай DevCpp для начала.
Только сразу предупреждаю, C++ это не самый простой ЯП.
 

sss

Продвинутый
Сообщения
332
Репутация
96
sims [?]
Так это довольно просто реализуется даже без многопоточности. И я не скажу, что подобный сервер сложно реализовать.
Да я просто первое попавшееся ляпнул, естественно это не самое сложное и серьезное.


joiner [?]
и где такое можно взять?
Инструкция. Занимает много времени, но один раз настроив, последующая работа - одно удовольствие!
 

sims

Осваивающий
Сообщения
184
Репутация
24
Sky-WaLkeR, библиотека QT по ссылке, ну как бы так помягче сказать, она содержит много лишнего и в месте с прогой приходится распространять много либ, которые прилично весят! Это не оправдано для небольших программ.
Уж лучше тогда для кроссплатформы использовать упомянутый здесь PureBasic. Его исполняемые файлы не нуждаются в подобных зависимостях.
 

sss

Продвинутый
Сообщения
332
Репутация
96
sims, никто не мешает в небольших программах не использовать Qt, благо eclipse легко это позволяет. А учить еще один язык ради того, чтобы убрать несколько мегабайт (даже не десятков) - это, пардон, не мой путь.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Меня приведение типов особо не напрягает. К примеру функция требует определённого типа данных, и в чём проблема в скобках указать этот тип? В таком случае можно сказать, что напрягает и много букв в функциях String... ведь можно было двумя буквами назвать все функции, чтобы меньше печатать. То что следить за типом приходится, так это и в AutoIt3 приходится, просто он мягче относится, не вылетит с ошибкой, а воспримет текст как число или наоборот. А если требуется функцию сделать профессиональной, то надо продумать все ситуации, если в неё попадёт не тот тип данных, чтобы не воспринимать к примеру пустую строку нулём или символ NULL.

С IDE пока проблема - время на компилирование, с непривычки не понятно где ошибки, пишет на англ. яз. Заново изучать способ вывода данных для проверки или способ отладки. И это до GUI пока ещё не доходили.


sims [?]
oiner, скачай DevCpp для начала.
Она и старая есть, надо же сразу указать какую, чтобы избавить от нескольких дней ковыряния ненужного.

joiner
Вот что у меня пока есть ссылка
 

asdf8

Скриптер
Сообщения
564
Репутация
152
sims [?]
Цитата
нужно постоянно следить за типами переменных
Что же в этом плохого? Тем более что следить особенно и не надо.

Я имел в виду немного другое - в AutoIt, например, можно создать массив и набить его данными любых типов, в том числе другими массивами, если в РВ был объявлен как строковый, то ничего кроме строк в него не положишь.


Sky-WaLkeR [?]
Цитата
Если бы для С/С++ была IDE
NetBeans, eclipse CDT, Code::Blocks, Visual Studio наконец - уж явно не ниже уровнем, чем SCiTe...

Visual Studio для меня тоже не вариант. Из остальных наиболее вменяемым показался Code::Blocks, но на сегодня пользуюсь AutoIt + РВ, в немалой степени из-за наличия активных сообществ по данным ЯП, а также, по количеству затраченного времени на получение нужного результата.


sims [?]
Цитата
встроенные библиотеки убого сделаны, приходится много чего переписывать самому на WinApi.
Что с ними не так?

Если бы были попытки воспользоваться ими, таких вопросов не возникало бы.
Простой пример :
нужно воспроизвести аудиофайл, дождаться окончания его воспроизведения и выйти из программы.
или :
изменить размер двумерного массива не меняя его размерности.
 

sims

Осваивающий
Сообщения
184
Репутация
24
asdf8 [?]
Я имел в виду немного другое - в AutoIt, например, можно создать массив и набить его данными любых типов, в том числе другими массивами, если в РВ был объявлен как строковый, то ничего кроме строк в него не положишь.
Открою вам секрет, в других ЯП алалогично. В том же Си. Если вы создали массив Int'ов, то туда можно записать только Int'ы. И это нормально, поскольку позволяет добится высокой производительности программы.


нужно воспроизвести аудиофайл, дождаться окончания его воспроизведения и выйти из программы.
И в чем сложность?
Код:
InitSound()
LoadSound(0, "C:\Плюшки.wav")
PlaySound(0)
While SoundStatus(0) <> #PB_Sound_Stopped
  Delay(100)
Wend
Если вас такой вариант не устраивает, то можно сделать на WinAPI в одну строчку.
Код:
PlaySound_("C:\Плюшки.wav", 0, #SND_FILENAME | #SND_SYNC)

изменить размер двумерного массива не меняя его размерности.
Как измениь размер не меняя его размера? :scratch: ;)
Случайно не это нужно?
Код:
Dim x(10, 10)

x(10, 10) = 100
Debug x(10, 10)

Dim x(20, 20)
x(20, 20) = 200
Debug x(20, 20)
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
На Си массив является перечислением данных в строке, двумерный: я1.1,я1.2,я2.1,я2.2 и т.д. из этого ясно что обрезать массив можно просто отсечением конца, кратно строке.
А сам массив AutoIt3 видимо массив указателей на выделенные в памяти ячейки. Поэтому каждая ячейка является независимой от типа.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
в питоне вообще сказка. мало того, что типизация динамическая, так еще и любые переменные это всего лишь ссылки/указатели. повышает производительность на ура, хотя и вызывает кучу наступлений на грабли на начальном этапе освоения.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Работа с массивами в Python'e меня просто положила на лопатки (в хорошем смысле)...

Код:
myarray = [1, 2, 3.14, 'text']
print myarray[1:3]

# вывод 2 и 3.14

myarray1 = [1, 2, 3, 4]
myarray2 = [5, 6, 7, 8]
print [x + 1 for x in myarray1 + myarray2]

# объединяет myarray1 с myarray2 и к каждому из значения прибавляет 1
# вывод 2, 3, 4, 5, 6, 7, 8, 9
 

asdf8

Скриптер
Сообщения
564
Репутация
152
sims [?]
Открою вам секрет, в других ЯП алалогично.

Я сравнивал AutoIt с РВ.


Цитата
нужно воспроизвести аудиофайл, дождаться окончания его воспроизведения и выйти из программы.
И в чем сложность?

А теперь то-же для версии 4.61, или мне надо будет 5000 строк кода переписывать под версию 5.11? Да - можно на WinAPI, я как раз об этом говорил, и да - в последней версии некоторые косяки убрали.


Как измениь размер не меняя его размера?
think.gif
wink.gif
Случайно не это нужно?

То, что я имел в виду на AutoIt выглядело бы примерно так :
Код:
Dim $aData[10][2]
ReDim $aData[100][2]


В РВ, несмотря на то, что тоже есть функции Dim и ReDim, менять размер массива придется через одно место.
Остальные библиотеки написаны теми-же руками.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
asdf8

Я думаю с такими возможностями как в PureBasic, такие мелкие проблемы пугать не должны.

И в справке ясно написано "Если ReDim используется с многомерным массивом, то только последний размер может быть изменен.", то есть:

Код:
Dim ar(2, 2)

Debug ArraySize(ar(), 2)

ReDim ar(2, 100)

Debug ArraySize(ar(), 2)
Если такой вариант не устраивает, то можно так:

Код:
Structure ITEMS
  Array item.i(2)
EndStructure  

Dim ar.ITEMS(1)

Debug "Array size: " + Str(ArraySize(ar.ITEMS()))
ar.ITEMS(0)\item(0) = 100
ar.ITEMS(0)\item(1) = 200
Debug ar.ITEMS(0)\item(0)
Debug ar.ITEMS(0)\item(1)

ReDim ar.ITEMS(2)

Debug "Array size: " + Str(ArraySize(ar.ITEMS()))
ar.ITEMS(0)\item(0) = 300
ar.ITEMS(0)\item(1) = 400
ar.ITEMS(1)\item(0) = 500
ar.ITEMS(1)\item(1) = 600
Debug ar.ITEMS(0)\item(0)
Debug ar.ITEMS(0)\item(1)
Debug ar.ITEMS(1)\item(0)
Debug ar.ITEMS(1)\item(1)
 
Верх