Lua:埋め込みを停止して生活を開始する方法

Lua:埋め込みを停止して生活を開始する方法





Luaは半言語の栄光にしっかりと根付いています-必要に応じて、C ++などのコンパイルされた言語で記述されたアプリケーションをスクリプト化するために組み込むことができるツールです。 それにもかかわらず、Luaは独自のインタープリター、モジュールを作成する機能、多数のライブラリーを備えた完全に独立した言語であり、同時にこのPLはアナログの中で最小サイズです。 簡単に言えば、perl、python、その他の一般的なプログラミング言語と同じアプリケーションを作成するためのすべてが揃っています。







Luaに有利な次の議論を提供できます。



Luaの機能を示すために、Luaを使用して、グラフを画像ファイルとして保存する機能を備えたポイントごとにプロットする小さなプログラムを作成する方法を示します。



グラフィカルツールキットとして、元々Luaの使用計算で作成されたクロスプラットフォームライブラリであるiupを使用します。



Lua SDKをインストールする


Luaをスタンドアロン言語として使用するというアイデアの一部として、Lua for Windowsアセンブリが作成されました。これには、指定されたOSのプログラミング時に発生する日常的なタスク(データベース、GUI、XML解析など)に必要なライブラリが含まれています アセンブリ5.1のLuaバージョンであり、5.2ではないことを気にしないでください。この2つのケースで大きな違いはありません。



アセンブリをダウンロードしてインストールします。



IUPコンセプトの概要


iupデバイスの詳細に入らずに、プログラムを作成するプロセスをペイントする方法を長い間考えていました。 そして、その基本原則を簡単に説明することにしました。

以前にTk、WxWidgets、またはWinAPIを使用してGUI用に作成したことがある場合は、これはすべておなじみのように思えます。 そうでない場合、プログラムはコメント付きで詳細にカバーされます。



プログラムコード




--   iup require("iuplua" ) require("iupluacontrols") require("iuplua_pplot") --     Canvas,      require("cdlua") require("iupluacd") require("string") --        --    plots_number = 5 --  ,          tabs = {} --    vboxes = {} --    ,    checkboxes = {} --         coords = {} --      legends = {} --     global_legend = {} --   ,  Lua    split function string:split(sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) self:gsub(pattern, function(c) fields[#fields+1] = c end) return fields end --         function draw_plot(pwidget, pnum, data) x = data[1].value:split(",") y = data[2].value:split(",") if checkboxes[pnum].value == "OFF" then return end if not (#x == #y) or #x == 0 then iup.Message("", "      " .. pnum) return end iup.PPlotBegin(pwidget, 0) iup.PPlotAdd(pwidget, 0, 0) for i = 1,#x do iup.PPlotAdd(pwidget, x[i], y[i]) end iup.PPlotEnd(pwidget) end --       plot_btn = iup.button{ title = ""} --    " " function plot_btn:action() --    plot = iup.pplot { expand="YES", TITLE = "Simple Line", MARGINBOTTOM="65", MARGINLEFT="65", AXS_XLABEL = global_legend[1].value, AXS_YLABEL = global_legend[2].value, LEGENDSHOW="YES", LEGENDPOS="TOPLEFT", size = "400x300" } --      -          iup.PPlotBegin(plot, 0) iup.PPlotAdd(plot,0,0) plot.DS_LEGEND = "" iup.PPlotEnd(plot) --     for i = 1, plots_number do --        print(legends[i].value) plot.DS_LEGEND = legends[i].value --   draw_plot(plot, i, coords[i]) end --        save_btn = iup.button{ title = "" } --    ,     plot_dg = iup.dialog { iup.vbox --   ,       { plot, save_btn }, } --     function save_btn:action() --        --          EMF fs_dlg = iup.filedlg{DIALOGTYPE = "SAVE", FILTER = "*.emf" } iup.Popup(fs_dlg) --    if tonumber(fs_dlg.STATUS) >= 0 then --      pic = fs_dlg.value if not (string.sub(pic, string.len(pic)-3) == ".emf") then pic = pic .. ".emf" end --  -,    tmp_cv = cd.CreateCanvas(cd.EMF, pic .. " 400x300") --     iup.PPlotPaintTo(plot, tmp_cv) --     cd.KillCanvas(tmp_cv) end end --     plot_dg:showxy(iup.CENTER, iup.CENTER) --       if (iup.MainLoopLevel()==0) then iup.MainLoop() end end --    ,       --    for i=1,plots_number do --   ,      coords[i] = {} for j = 1,2 do coords[i][j] = iup.text { expand="HORIZONTAL", multiline = "YES", VISIBLELINES = 5 } end --       legends[i] = iup.text{ expand = "HORIZONTAL" } --        vboxes[i] = iup.vbox { iup.hbox { iup.label { title = " :" }, legends[i] }, iup.hbox { iup.label { title="X : ", }, coords[i][1] }, iup.hbox { iup.label { title="Y : ", }, coords[i][2] }; expand="YES", } --    vboxes[i].tabtitle = " " .. i --  ,     ,    --       checkboxes[i] = iup.toggle{ title= "" .. i, value = "ON" } end --        tabs = iup.tabs{unpack(vboxes)} --        global_legend[1] = iup.text{} global_legend[2] = iup.text{} --       frame = iup.frame { iup.vbox { iup.label{ title=" :", expand="HORIZONTAL" }, iup.vbox { unpack(checkboxes) }, iup.label{}, --       iup.label{title = ""}, iup.hbox { iup.label{ title = " X "}, global_legend[1] }, iup.hbox { iup.label{ title = " Y "}, global_legend[2] }, iup.label{}, plot_btn }; expand = "VERTICAL", } --            dg = iup.dialog { iup.hbox { frame, tabs }, title=" ", size = "HALF" } --        dg:showxy(iup.CENTER, iup.CENTER) if (iup.MainLoopLevel()==0) then iup.MainLoop() end
      
      







展開に関するいくつかの言葉


次のコマンドを使用して、スクリプトを実行できます。



 lua plotter.exe
      
      







この場合、ライブラリはサブディレクトリclibs /から接続されます。サブディレクトリは、Lua for Windowsがインストールされたディレクトリにあります。 別のマシンに転送するためにスクリプトとライブラリをできるだけコンパクトにパックするには、次のファイルを1つのフォルダー(Luaインストールディレクトリからの相対パスで示されている)にコピーするだけで十分です。



 lua.exe lib/lua5.1.dll clibs/cd.dll clibs/cdlua51.dll clibs/iup.dll clibs/iup_pplot.dll clibs/iupcd.dll clibs/iupcontrols.dll clibs/iupgl.dll clibs/iuplua51.dll clibs/iuplua_pplot51.dll clibs/iupluacd51.dll clibs/iupluacontrols51.dll clibs/freetype6.dll
      
      







スクリプトをプログラム自体と一緒にこのフォルダーに配置することを忘れないでください。 これで、このフォルダを別のマシンに転送し、上記のコマンドでプログラムを開始できます。 同時に、ライブラリとランタイムをインストールするための他のアクションは必要ありません。



残念ながら、このバージョンのLua for Windowsのcd.dll、cdluad51.dllおよびiupcd.dllファイルは正しく動作しない可能性があるため、以下のリンクを使用してアーカイブから取得することをお勧めします。



まとめ


作業バージョンのアーカイブはこちらにあります 。便宜上、app.batランチャーが追加されています。



スクリーンショット:











その結果は、「真面目な」プログラミング言語で書かれたのと同じ機能を持つ、気取らないユーティリティでしたが。 同時に、簡単に展開でき、総重量は2 mb未満です。 メモリ消費-約7 mb ソースコードは編集可能で、Lua自体はインタラクティブに理解可能であるため、このようなソフトウェアの改良をローカルで簡単に行えます。



私の意見では、これは学校や研究機関向けの教育用ソフトウェアの作成や、企業での内部使用に最適です。 CIS全体の同様の場所にはまだ弱いマシンが豊富にあるため、特にデスクトップでのLinuxの漸進的な出現を考慮すると、この方法でLuを使用することをお勧めします。 さらに、自作ソフトウェアのひどい中毒によりソースコードが失われる傾向は、国家の災害と同一視することができます。



All Articles