95 в крестах, из них 15 добавлены последними стандартами. И это кресты, который претендуют на звание самого сложного языка, в котором совместимость совместимостью погоняет, поскольку он еще и включает себя Си.
чтобы программировать например под WinAPI – и этих конструкций достаточно
У WinAPI интерфейсы сишно-асмовые. Еще бы интерфейсы MS DOS всомнил.
ну просто в жопе свербит, что ли? есть код, он работает, кушать не просит
По факту есть код, который требует каждый год приносить ему в жертву девственниц. И комерс, как правило, предпочтет предсказуемо жертвовать девственниц, чем попытаться убить дракона с неясными перспективами.
теперь ты предлагаешь однократно переписать все эти гомны исторические наслоения. и ты серьёзно думаешь, что это обойдётся дешевле? разбираться с глюками, почему твоя переписанная семантика отлична от оригинальной, исходной, проверенной годами в соответствующей духу времени среде. отлаживать и переписывать ещё раз, пока все эти твои глюки однократного лол переписывания полностью не вылезут. отлаживать и переписывать их ещё раз, когда потребуется их изменять и интегрировать. каждый раз проходить этот геморой
Как правило, бизнес-процессы не стоят в каменном веке десятилетиями. Появляется необходимость вводить новые технологии, которые через прокладки общаются с новой системой. Когда прокладок и новых технологий становится много — есть смысл как раз заняться переводом всей системы целиком. Конечно же нет смысла обновлять систему, которая работает, всех устраивает, и не требует никаких дополнительных расходов.
(function()
local base = CroApp.GetBank():GetVocabulary():GetBase("XX")
if !base then return BaseIsNull end
local v=0,rst = base.RecordSet
if !rst then then return rstIsNull end
rst:Sort{
{field=5, descent=true, case=false},
{field=7, descent=false, case=false},
{field=10, descent=false, case=false}
}
for rec in rst.Records do
v = v + 1
arrSimpleConv[v] = {
Type = rec:GetValue(5),
LegName = rec:GetValue(10),
PickName = rec:GetValue(11),
Rules = {},
FlagHierarch = tonumber(rec:GetValue(30)),
HyTable = nil
}
arrStrRules = rec:GetValue(20, 0)
for i,p in ipairs(arrStrRules) do
arrSimpleConv[v].Rules[i] = table.unserialize(p)
end
end
end)()
https://github.com/leafo/pgmoon
Some socket library is required, depending on the environment you can chose one:
OpenResty Langauges: C 100.0%
LuaSocket Langauges: C
cqueues Langauges: C 79.0%
Ты собрался мерить проивзодительность языка, или производительность дергания нативных библиотек?
По ссылке выше тебе даны чистые вычисления, где можно замерить скорость интерпретатора. Ты же, предлагая измерять на реальных задач, отдаешь себе отчет, что из жса можно ровно так же дергать нативные биндинги? Что ты в итоге мерить будешь? Скорость ввода вывода? Переключения контекста? Потребление памяти? GC luajit кстати уже умеет адресовать более 2ГБ памяти, м?
Давай - пишешь zero-dependices скрипт, используя только встроенные возможности рантайма, без сторонних библиотек, с решением своей реальной задачи для запуска в бинаре lj. Потом я тебе пишу скрипт на js, решаюющий такую же реальную задачу, так же без сторонних зависимостей, кроме самого рантайма жс.
Давай - пишешь zero-dependices скрипт, используя только встроенные возможности рантайма, без сторонних библиотек, с решением своей реальной задачи для запуска в бинаре lj. Потом я тебе пишу скрипт на js, решаюющий такую же реальную задачу, так же без сторонних зависимостей, кроме самого рантайма жс.
Тебе в луа никто не запрещает индексов ать нулём элемент массива. Единственное - этого никто не ожидает, например, оператор взятия длинны. (который, емнип, тоже можно переделать через метатаблицы)
Про return - меня так учили, что не надо делать много в разных местах. Return должен быть один. Уж лучше goto к нему.
Ну и, строго говоря, это мелкий, относительно-осмысленный кусочек из сценария на 2000 строк по конвертации одной удивительной БД, в другую не менее удивительную.
Покажу самое удивительное место из той конвертилки )
-- Нулевая дата для HyTech версии 2.1 - 1 января 1872 года,
-- (а по документации к 2.5 должна быть 01-01-1900)
-- причём там явная ошибка с 29 февраля 1900 - такой даты НЕ БЫЛО,
-- а количество дней считается как-будто было (юлианский календарь?),
-- поэтому руками откусываем один день если дата больше 28-02-1900
dtZeroHyDate = DateTime("01.01.1872 00:00:00")
dtsDays = DateTimeSpan()
function DateStringFromHyTech(iDaysFromZero)
local Ret = nil
if iDaysFromZero > 0 then
if (iDaysFromZero > 10285) then iDaysFromZero = iDaysFromZero - 1 end
dtsDays.Days = iDaysFromZero
Ret = (dtZeroHyDate + dtsDays):ToString("%d.%m.%Y")
end
return Ret
end
И сразу с упреждающими ответами - вынес в глобальную область dtZeroHyDate и dtsDays потому что точно знаю, что они еще пригодятся дальше по коду, но не знаю как Lua себя будет вести - он каждый раз будет создавать эти объекты если они будут локальные или догадается, что не надо каждый раз из под них память освобождать и заново создавать?
И, да, мне нравится венгерская нотация )
И, да, я простой эникейщик, а не узкий специалист. Чего дадут - того и делаю. Хоть Lua, хоть 1С, хоть php, хоть zfs собрать. Давеча вот по работе открыл для себя способ восстановления всеми забытого пароля от почты, но сохраненного в клиенте в зашифрованном виде, методом подмены зашифрованного оригинального сервера на свой подставной без шифрования с последующим отловом его в трафике - жуть как доволен собой, а поделиться не с кем )
в каждом языке своя система понятий и нет единственно правильной
Но в случае с правилами нумерации элементов массива, ты сам же отказываешься луа в праве самостоятельно определять понятия, мол, чейта они не делают как общепринято
Так и не осилил, в интернете одни хеллоуворлды их которых сути луа не понять
Прочитай родную книжку Иерусалимски: если без описания стандартной библиотеки - 200 страниц. Написана изумительно, читается легко и приятно. После прочтения - влюбишься
Про встраивание понятно. Жс можно также встроить и не будет никакой разницы. Это вопросы обвязки и наработанных в этой области решений, т.к. что с луа это делают уже много лет, а в8 только начали пытаться везде вкорячивать. В сухом остатке что?
Ты требуешь
Мне заявляют, что оно язык крутой и мощный, я хочу узнать, чем __язык__ такой крутой и мощный.
Для иного есть иное.
Да нихрена нет. Везде одно и тоже императивное говнецо. Динамика - это шаг хоть куда-то, остальные тупо косплеят жабку и всякое ооп-уродство.
Два раза спрашивал чем так крут этот ваш луа - все молчат
Мне, например, импонирует минималистичность и стабильность. Реализована масса элегантностей: на нем, например, сам бог велел кроме плагинов делать конфиги и файлы данных. Очень легко и прозрачно можно сделать песочнице.
А ещё он реально очень быстро связывается с и и обратно. Я делал опыт, писал программку, чтоб из луа рисовались линии на контексте cairo. Например на событие перемещения мыши все перерисовывалось. Постепенно удесятерял количество линий на кадр. Так вот, видимо лагать начало со ста тысяч линий за кадр. Потом убрал луа и рисовал прямо из си - то же самое. То есть каиро уже стал не успевать, а луа успевал.
Такая скорость позволяет на нем хоть кадр отрисовывать. Love2D смотри. Я не говорю что js плох, но он большой и постоянно меняется, а луа маленький и нет ощущения что его всю жизнь надо учить, чтоб знать
Вкусовщина, конечно, но никто обратного и не обещал
Это все к тому, что дело на самом деле все не в инструменте, а в навыке использования
«когда вы говорите, у меня ощущение, что вы бредите» (с) Инженер Тимофеев
Ну так приделай к ПК. Смартфон и выкинь основную клавиатуру. Дело ж не в инструменте по назначению, а в навыке. Потренируйся. И паять зажигалкой. И шурупы закручивать ножом. И так далее.
Луа не считают полноценным языком даже те, кто его использует. Так, встройка, костыль для си без амбиций.
В принципе - да. Об этом сам автор пишет чуть ли не на первой странице единственно-верной книги. Ну и ещё как высокоуровневый клей, язык конфигов и данных. Как ты справедливо заметил, на полноценный язык не претендует, только лишь - набор костылей, зато клёвых.
в «исходной» эвристике было один вход - один выход ; в «го» деферами подкрепили привычку чуваков комнаты 1120 не загоняться вложенностями.
... Шире только ...Никто, кроме нас
dtZeroHyDate = DateTime("01.01.1872 00:00:00")
dtsDays = DateTimeSpan()
function DateStringFromHyTech(nDays) --iDaysFromZero
if nDays <= 0 then return nil end
dtsDays.Days = nDays - ((nDays > 10285)and 1 or 0) --Скобка Айверсона
return (dtZeroHyDate + dtsDays):ToString("%d.%m.%Y")
end
зы. переписывание алгебраических выражений из КрИстала али каких Русских(Эйлер там ..) учебников по алгебре( в 18..19 смысле)
Они пишут на языке, где грамматикой не предусмотренны всякие хитрые суффиксы и приставки, а так же склонения и спряжения. А в русском языке слова в начальной форме для конструкций в коде выглядят всегда очень не к месту.
Они пишут на языке, где грамматикой не предусмотренны всякие хитрые суффиксы и приставки, а так же склонения и спряжения. А в русском языке слова в начальной форме для конструкций в коде выглядят всегда очень не к месту.
Ну пиши все в именительном падеже, тоже мне проблема
Практически не видел. Иногда там есть ограниченные не Тьюринг-полные условия.
Или просто неприемлешь?
This. Конфиги с исполняемым кодом невозможно редактировать автоматическими инструментами (команды внесения изменений: crudini и т.п., GUI редакторы настроек), только руками.
Британские Колониальные Компании ввели и вели бумажное делопроизводство редуцируя(постепенно - обусловлено практикой) флексии
сия практика постепенно распространилась через трендсетеров- обитателей дворца Якова (али какие Вестминстерсие аля Версали) в толщу народную
как итог за несколько веков от Шекспира язык всё удобней и удобней для автообработки
Конфиги с исполняемым кодом невозможно редактировать автоматическими инструментами (команды внесения изменений: crudini и т.п., GUI редакторы настроек), только руками.
if winda then
window_caption = "ССЗБ"
tmp_dir = "C:\Users\sszb\Desktop"
else
window_caption = "That's my boy"
tmp_dir = "/tmp/myapp/"
end
потому что избыточно и этот ненавидимый мною delphi/pascal синтаксис := (присваивание) если есть общий формат операции присваивания просто = то зачем это нужно сейчас := ?
Это пока ещё можно. Но такое несложно обрабатывать специальным парсером без всяких Lua. Зачем например циклы нужны в конфигах — не понятно. А они могут повесить программу на этапе чтения конфигов и надо будет долго искать что не так.