1 Eylül 2019 Pazar

Bayt kod ve Nesne dosyaları oluşturma

8. bölüm "Derleme, Yürütme ve Hatalar" 'da ele aldığımız üzere Lua, *.lua script dosyasını yürütmeden önce çalışma zamanında ona bir ön-derleme çeker(bayt kodlara çevirir). Bunu çalışma zamanında yapmak yerine çalıştırmadan önce yaparsak-yaparak ne kazanırız:

1-Çalışma zamanı derleme aşamasına ihtiyaç olmadığı için belli bir zaman kazanımımız olur.
2-Belki bazıları için önemli olacak, kodlarımızı insanın okuyabileceğinden insanın okuyamayacağı duruma getirerek kodlarımızı amatör ellerden-gözlerden saklamış-gizlemiş oluruz(?!.).


Tüm yorumlanan diller aynısı yapar misal Java'da "insaninokuyabilecegikod.java" dosyası
"insaninokuyamayacagibaytkod.class" dosyasına javac ile çevrilir-derlenir. Lua da aynı imkan var. Bunu aşağıdaki istemci satırı komutlarından biriyle yaparız, hangisi size uyarsa(bu imkan için kaynak koddan derlenmiş luajit.exe ve beraberinde gelen-oluşan jit dosyalarına ihtiyaç duyuluyor bilginize):

luajit -b test.lua test.out                 # test.out dosyasına bayt kodları kaydet
luajit -bg test.lua test.out                # hata ayıklama-debug bilgisini tutarak kaydet
luajit -be "print('hello world')" test.out  # komut satırından script kaydet

luajit -b test.lua test.obj                 # nesne dosyası üret
# test.obj 'i uygulamanızla linkler ve require("test") ile onu yüklersiniz


Örnek uygulama:

--main.lua  Lua program dosyamız:
print("main.lua dan selam")

//app.c C program dosyamız
#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"

int main(int argc, char **argv)
{
  int status;
  lua_State *L = luaL_newstate();
  luaL_openlibs(L);
  lua_getglobal(L, "require");
  lua_pushliteral(L, "main");
  status = lua_pcall(L, 1, 0, 0);
  if (status) {
    fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
    return 1;
  }
  return 0;
}


1-*.lua script dosyasını nesne dosyasına çevirme

luajit -b main.lua main.obj

2- C uygulamamızı derleme

gcc -O2 -Wall -Wl,-E -o app app.c main.o -lluajit -lm -ldl




Hiç yorum yok:

Yorum Gönder