Сделать на паскале аналог луаджита? Да, ты сказочник еще тот. И портировать его со всем грузом RTTI куда-нить, например в датчик интернета вещей, да? Под АРМ, в смысле? Ну да, конечно. Как же я сам не догадался.
ПС А за работу - большое человеческое спасибо. Действительно есть за что.
grumbler1
Реализовать LuaJIT на Паскале проще, чем на Си. По той причине, что Паскаль читабельнее и быстрее компилируется.
Насколько я знаю, сам компилятор Lua достаточно прост и компактен, значительно сложнее исполнение команд и дополнительные библиотеки типа io или strings
Что до генерации бинарных кодов, у меня например, есть такая библиотека:
https://github.com/d-mozulyov/OpcodeLib
:)
вопрос не в реализации. Реализовать можно что угодно и как угодно, хоть на луа сделать компилятор для себя же в опкод, как это в луаджите есть. Вопрос в скорости, компактности и энергопотреблении. Эти три вектора развития кода на паскале очень тяжело удержать в единой связке. И главный вопрос - зачем? Неужели есть прикладные задачи, которые надо реализовывать на паскале в свете развития инета вещей, параллельный вычислений, светофотоники и искусственного интеллекта, т.е. технологий будущего?
grumbler1
Ну на Паскале мне удавалось весьма эффективно реализовать некоторые задачи
Например, мой менеджер памяти работает быстрее гугловского и интеловского
Поэтому вполне допускается, что ядро CrystalLUA можетбыть написано на Паскале
Профит использования Си - хорошое качество кода под ARM (у Delphi хромает), можно делать ассемблерные ARM-вставки. Ну и можно заимствовать или подглядывать часть кода из оригинала. Тот же парсинг.
Собственно ты придрался к Паскалю совершенно зря
Да, ответ на твой вопрос. На сегодняшний момент скрипты далеки от идеала ввиду исполнения на виртуальной машине, низкого качества оптимизации и особенностей типа сборки мусора. Технологии движутся в сторону скриптования. Так вот есть возможность создать сверхпростой скрипт на нативной скорости с дебагом и элементарным биндингом.
Когда я тоже писал биндинг для Lua и тоже не познав дзен самой Lua :), то чтобы избежать двоеточий, придумал, смею считать, более чистый способ — замыкание на объект-первый аргумент __index, http://ideone.com/77JxX7:
obj_class = { __index = function(obj, func) return function(...) return getmetatable(obj)[func](obj, ...) end end, add = function(obj, x, y) obj.x = obj.x + x obj.y = obj.y + y end } local obj = setmetatable({ x = 1, y = 2 }, obj_class) obj.add(200, 400) -- yay! print(("x = %.9g, y = %.9g"):format(obj.x, obj.y))
Потом отказался от этой идеи, т. к. только вносит путаницу.
runewalsh
Да, можно через замыкания. Я думаю, путаница с точками и двоеточиями связана с тем, что Lua не совсем логично развивалась с точки зрения ООП
Свойства методов или таблиц запрашиваются через точку. А вызов метода - через двоеточие
Часто ли встречается необходимость вызывать функцию через точку? Практически никогда. А через двоеточие - практически всегда
Поэтому мной было принято решение внести свой вклад в удобство этого языка - всё делать через точку. Но двоеточие тоже работает, а во-вторых, препроцессинг можно отключить
ну эээ... запонить-то просто
obj:method() print(self.name) end == obj.method(self) print(self.name) end
clc
Да, но кто-ж пишет так: "obj.method(obj)"?
Никто )
ну да. все пишут отак
s = s:sub(2)
Кто хоть раз разобрался в синтаксисе луа и понял, где ставится двоеточие - проблем не возникнет. Более того, это тренирует внимательность и понимание происходящего.
Зато после олдкульного Луа понять, почему не падает
s = s.sub(2) в кристаллуа будет непросто.
равно как и объяснить, почему падает
m = require('module')
m.myfunc()
В общем, упрощенный синтаксис - это хорошо, но не всегда и не для всех.
grumbler1
Некоторые делают биндинги с замыканиями, и там запись s = s.sub(2) - вполне корректна
Тут кому как удобнее. Я не хочу париться с двоеточиями - мне парсинг в самый раз. Ты хочешь париться - ты отключай
Одним словом удовольствие на все случаи жизни )
DevilDevil
> Я не хочу париться с двоеточиями
А что именно тебя парит? Ставить двоеточие тяжелее чем точку, потому что нужно нажимать две клавиши вместо одной?
Заменять двоеточие на точку - абсурд. Это усложнит чтение кода. Как понять где вызывается метод, а где свойство?
DevilDevil
> Я думаю, путаница с точками и двоеточиями связана с тем, что Lua не совсем
> логично развивалась с точки зрения ООП
Да какая может быть путаница?
ant0n
> Как понять где вызывается метод, а где свойство?
Метод вызывается со скобками
Раз уж пошла такая пьянка, : с точки зрения ООП операция бессмысленная. ООП предполагает, что операции проводятся над объектом. Ручное передавание self - это костыль по недоразумению внедренный в язык, а : призван хоть как-то нивелировать это недоразумение. Но и здесь возникает путаница между с . в свойствах. Ещё раз напомню, режим обращения по . в CrystalLUA является опциональным и обсуждать здесь нечего
нет путаницы, но есть плохие объяснения. Есть свойства, свойства могут быть функциями и есть синтаксический сахар для первого аргумента
Тема в архиве.