{"id":801,"date":"2026-04-16T16:23:22","date_gmt":"2026-04-16T15:23:22","guid":{"rendered":"http:\/\/magnusmanske.de\/wordpress\/?p=801"},"modified":"2026-04-16T16:23:22","modified_gmt":"2026-04-16T15:23:22","slug":"from-php-to-lua","status":"publish","type":"post","link":"http:\/\/magnusmanske.de\/wordpress\/archives\/801","title":{"rendered":"From PHP to Lua"},"content":{"rendered":"<p>A minor tech announcement for <a href=\"https:\/\/mix-n-match.toolforge.org\/\">Mix&#8217;n&#8217;match<\/a>:<\/p>\n<p>Code fragments for Mix&#8217;n&#8217;match catalogs are switching from PHP to Lua. User-supplied PHP is not secure enough, and will not scale for future development. I have converted many code fragments from PHP to Lua already, and new code fragments have to be Lua.<\/p>\n<p>Lua is not exactly my favorite language, but it has a sweet spot between the number of people who know it or can easily learn it, and safety\/resource usage etc. for letting user-written code run within Mix&#8217;n&#8217;match\/Toolforge.<\/p>\n<p>PHP code that was not &#8220;translated&#8221; yet will be supported for a while, but not forever. Existing PHP code will be shown as a &#8220;hint&#8221; for Lua, for the time being.<\/p>\n<p>Example: https:\/\/mix-n-match.toolforge.org\/#\/code\/7098<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A minor tech announcement for Mix&#8217;n&#8217;match: Code fragments for Mix&#8217;n&#8217;match catalogs are switching from PHP to Lua. User-supplied PHP is not secure enough, and will not scale for future development. I have converted many code fragments from PHP to Lua already, and new code fragments have to be Lua. Lua is not exactly my favorite [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-801","post","type-post","status-publish","format-standard","hentry","category-wikimedia-2"],"_links":{"self":[{"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/posts\/801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/comments?post=801"}],"version-history":[{"count":1,"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/posts\/801\/revisions"}],"predecessor-version":[{"id":802,"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/posts\/801\/revisions\/802"}],"wp:attachment":[{"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/media?parent=801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/categories?post=801"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/magnusmanske.de\/wordpress\/wp-json\/wp\/v2\/tags?post=801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}