Что нового

Обсуждение AutoIt бета-версий

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вот что добавлено.
Код:
Добавлено: DriveGetType() обновлена и теперь может определять SSD и другие типы дисков (SATA, USB, etc.).
Добавлено: Интерпретатор может работать с 64 битными hex числами
Добавлено: Новое ключевое слово Null
Добавлено: Третий параметр в функции ObjGet() для указания конкретного экземпляра объекта.
Добавлено: Операторы присваивания для свойств объектов
Добавлено: Доступ через точку в выражениях вида: ObjCreate("Shell.Application").GetSystemInformation("DirectoryServiceAvailable")
Добавлено: Доступ к массиву в выражениях вида: StringSplit("a,b", ",")[1]
Добавлено: Пустые массивы
Добавлено: Функции теперь можно присваивать переменным и функции можно вызывать через переменные
Добавлено: Новая функция: FuncName()
Добавлено: Встроенные функции которые принимают функции обратного вызова теперь могут быть переданы непосредственно. Встроенные функции теперь тоже могут быть переданы напрямую. (будьте осторожны, ожидается что функции соответствуют тому, что ожидает вызывающий)
Добавлено: Тернарный оператор на подобии C++: Local $fResult = ("foo" = "bar") ? True : False
Добавлено: В параметрах по умолчанию функции теперь можно использовать выражения.
Добавлено: With...EndWith теперь можно использовать в выражениях допускающих доступ через точку.
Добавлено: With...EndWith могут быть вложены.
Добавлено: Функция Call() теперь может вызывать встроенные функции.
Добавлено: Допускается использования ByRef в функции Call()
Добавлено: Поддержка еще большего количества COM VARIANT типов.
Добавлено: @OSVersion теперь поддерживает Windows 8.1 и Windows 2012 R2
Добавлено: Регулярные выражения теперь использует родной 16битный режим, а также скомпилирован с полной поддержкой UCP. Используйте префикс (*UCP) для активации.
Добавлено: @LocalAppDataDir возвращает путь к local AppData, (@AppDataDir - путь к roaming)
Добавлено: StringReverse() функция теперь совместима со строками в кодировке UTF-16
Добавлено: Новая функция: FileReadToArray()
Добавлено: FileInstall() в качестве первого параметра может принимать @ScriptFullPath. Удобно для добавления исходника скрипта.
Добавлено: Новое поле Monospaced в разделе справки Fonts
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Yashied [?]
Все эти бета версии (3.3.9.x) хороший пример деградации языка.
Уважаемый Yashied. Изменилось ли ваше мнение в связи с выходом релиза 3.3.10? Стоит ли обновляться или лучше повременить? Спасибо.
Просто я ознакомился с историей изменений... и не понял, какие нововведения связаны с деградацией :-[
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Я еще толком не вникал в 3.3.10.0, но Jon убрал некоторые вещи, которые ввел trancex, когда еще был разработчиком. Судя по истории, ничего координально плохого не произошло, кроме вмешательства в WinAPIEx UDF. Но в этом виноват только jpm.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
К структурам можно получать доступ через "точку", так же как и к свойствам объектов.
Вот например, раньше делали так:
Код:
$t = DllStructCreate('int test')
DllStructSetData($t,'test',123)
$out = DllStructGetData($t,'test')
ConsoleWrite($out & @LF)

Теперь можно так:
Код:
$t = DllStructCreate('int test')
DllStructSetData($t,'test',123)
$out = $t.test
ConsoleWrite($out & @LF)


Вот еще я считаю интересное свойство доступа к объектам:
Код:
$obj = ObjCreate('Scripting.Dictionary')
$obj('test') = 123
$read = $obj('test')
ConsoleWrite($read & @LF)

Это ассоциативный массив, только немного другой синтаксис, вместо квадратных скобок тут круглые.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
проще говоря, вид работы со структурами стал как с объектами..стало удобнее?
или будет больше путаницы?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Я думаю - дело в привычке. Никто же не путает знак "=" в присваивании и в сравнении. Да и префиксы переменных никто не отменял.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
А что там в новых версиях с типом переменной Table?
Убрали?

Я поставил последнюю бету - обнаружил в некоторых скриптах зависание в случае наличия функции GUICtrlCreateMenu, глюки с созданием статус-баров, и проблемы с UDF GDIP(ее, видимо ,внедрили в GDIPlus.au3 ?)
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
WSWR [?]
ее, видимо ,внедрили в GDIPlus.au3
Насколько я понял из сравнения списков #CURRENT# - перенесли больше половины. Плюс добавили функции, которых не было и в GDIP.


Добавлено:
Сообщение автоматически объединено:

WSWR [?]
глюки с созданием статус-баров
Есть такие http://www.autoitscript.com/trac/autoit/ticket/2588
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Очень хотелось бы увидеть в AutoIt пространства имён, с их помощью можно было бы избежать конфликтов в именах переменных и функций, на это меня навёл PureBasic, после того как опробовал, понравилось, очень удобно, можно даже привести простейшие примеры как это было бы в AutoIt

Код:
Module MyUDF1
    Global $iSeq

    Func Screwed()
        $iSeq += 1
    EndFunc

    Func Show()
        ConsoleWrite('Счётчик №1: ' & $iSeq)
    EndFunc
EndModule

Module MyUDF2
    Global $iSeq

    Func Screwed()
        $iSeq += 1
    EndFunc

    Func Show()
        ConsoleWrite('Счётчик №2: ' & $iSeq)
    EndFunc
EndModule

MyUDF1.Screwed()
MyUDF1.Screwed()
MyUDF1.Show()      ;~ Вывод "Счётчик №1: 2"

MyUDF2.Screwed()
MyUDF2.Show()      ;~ Вывод "Счётчик №2: 1"

Теперь интерпретатор давал бы имена переменным и функциям такого рода

Код:
$MyUDF1_iSeq
$MyUDF2_iSeq

MyUDF1_Screwed()
MyUDF1_Show()

MyUDF2_Screwed()
MyUDF2_Show()
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А как решаются конфликты пространств имен?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
inververs [?]
А как решаются конфликты пространств имен?

Ну началось :smile: я же не говорю чтобы сделали, я говорю что хотелось бы увидеть, имена пространств имён совпадают с другими гораздо реже чем переменные и функции в разных UDF, да и просто это удобно.

А ещё лучше если бы было так:

Код:
Module MyUDF1
    Global $iSeq

    Declare Screwed()
    Declare Show()

    ; или перед "Func" ставить Public, Private
    ;
    ; Private Func Test()
    ;    Return 1
    ; EndFunc

    Func Test()
        Return 1
    EndFunc

    Func Screwed()
        $iSeq += Test()
    EndFunc

    Func Show()
        ConsoleWrite('Счётчик №1: ' & $iSeq)
    EndFunc
EndModule

Module MyUDF2
    Global $iSeq

    Declare Screwed()
    Declare Show()
    Declare $iSeq

    Func Screwed()
        $iSeq += 1
    EndFunc

    Func Show()
        ConsoleWrite('Счётчик №2: ' & $iSeq)
    EndFunc
EndModule

MyUDF1.Test()       ;~ Ошибка, доступ к данной функции не возможен вне модуля
MyUDF1.Screwed()
MyUDF1.Screwed()
MyUDF1.Show()      ;~ Вывод "Счётчик №1: 2"

MyUDF2.Screwed()
MyUDF2.Show()      ;~ Вывод "Счётчик №2: 1"
MyUDF2.$iSeq        ;~ Доступ к переменной в не модуля
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ganibal95 [?]
Viktor1703 [?]Цитата
; или перед "Func" ставить Public, Private
мне кажется это БОРЩ!

При том что она тоже ставится перед Func


Добавлено:
Сообщение автоматически объединено:

В любом случае пространства имён (возможно) появятся в AutoIt не раньше чем в версии 4.0 если конечно он доживёт, а сейчас у разработчиков и так есть огромная работа как например разделение WinAPI UDF (уже закончили)
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Viktor1703
Все равно полноценный компилятор не заменит...
Лучше бы все оптимизировали на скорость выполнения строк/задач (имеется ввиду саму обработку строк).
И при желании добавили многопоточность, но этого как видно не ожидается... :(
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ganibal95 [?]
Все равно полноценный компилятор не заменит...

Тогда можно было ни чего в нём не делать, оставить GUI и пару функций, при чём тут компилятор...

И при желании добавили многопоточность, но этого как видно не ожидается...

Есть другие языки для этого

P.S. я так понял что никому от AutoIt ничего не нужно кроме потоков
 
Верх