Archive for 3月 20th, 2013
-
Hello, Win32 API(Oxygene) World!
Posted on 3月 20th, 2013 by cx20
Win32 API(Oxygene)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Oxygene にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
namespace hello; interface uses org.eclipse.swt.internal.win32.*; type Hello = class public class method Main(args: array of String); end; implementation class method Hello.Main(args: array of String); var lpText: TCHAR; lpCaption: TCHAR; begin lpText := new TCHAR(0, "Hello, Win32 API World!", True); lpCaption := new TCHAR(0, "Hello, World", True); OS.MessageBox(0, lpText, lpCaption, OS.MB_OK ); end; end.
コンパイル&実行方法
C:¥> oxygene Hello.pas -ref:rt.jar;org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar -mode:Java C:¥> java -Xbootclasspath/a:org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar -jar hello.jar
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, JSX World!
Posted on 3月 20th, 2013 by cx20
JSX
JSX は DeNA により開発された静的型付けを特徴としたスクリプト言語である。JavaScript にコンパイルすることが可能となっている。
ソースコード(JSX)
class _Main { static function main(args : string[]) :void { log "Hello, JSX World!"; } }
上記コードを JavaScript にコンパイルした場合、以下のコードが生成される。
ソースコード(JavaScript)
#!/usr/local/Cellar/node/0.6.6/bin/node // generatedy by JSX compiler 0.9.2 (2013-01-30 11:14:28 +0900; 1a8b01b71633517541daa97862da204a2005c8aa) var JSX = {}; (function () { /** * copies the implementations from source interface to target */ function $__jsx_merge_interface(target, source) { for (var k in source.prototype) if (source.prototype.hasOwnProperty(k)) target.prototype[k] = source.prototype[k]; } /** * defers the initialization of the property */ function $__jsx_lazy_init(obj, prop, func) { function reset(obj, prop, value) { delete obj[prop]; obj[prop] = value; return value; } Object.defineProperty(obj, prop, { get: function () { return reset(obj, prop, func()); }, set: function (v) { reset(obj, prop, v); }, enumerable: true, configurable: true }); } /** * sideeffect().a /= b */ function $__jsx_div_assign(obj, prop, divisor) { return obj[prop] = (obj[prop] / divisor) | 0; } /* * global functions called by JSX * (enamed so that they do not conflict with local variable names) */ var $__jsx_parseInt = parseInt; var $__jsx_parseFloat = parseFloat; var $__jsx_isNaN = isNaN; var $__jsx_isFinite = isFinite; var $__jsx_encodeURIComponent = encodeURIComponent; var $__jsx_decodeURIComponent = decodeURIComponent; var $__jsx_encodeURI = encodeURI; var $__jsx_decodeURI = decodeURI; var $__jsx_ObjectToString = Object.prototype.toString; var $__jsx_ObjectHasOwnProperty = Object.prototype.hasOwnProperty; /* * profiler object, initialized afterwards */ function $__jsx_profiler() { } /* * public interface to JSX code */ JSX.require = function (path) { var m = $__jsx_classMap[path]; return m !== undefined ? m : null; }; JSX.profilerIsRunning = function () { return $__jsx_profiler.getResults != null; }; JSX.getProfileResults = function () { return ($__jsx_profiler.getResults || function () { return {}; })(); }; JSX.postProfileResults = function (url) { if ($__jsx_profiler.postResults == null) throw new Error("profiler has not been turned on"); return $__jsx_profiler.postResults(url); }; JSX.resetProfileResults = function () { if ($__jsx_profiler.resetResults == null) throw new Error("profiler has not been turned on"); return $__jsx_profiler.resetResults(); }; /** * class _Main extends Object * @constructor */ function _Main() { } _Main.prototype = new Object; /** * @constructor */ function _Main$() { }; _Main$.prototype = new _Main; /** * @param {Array.<undefined|!string>} args */ _Main.main$AS = function (args) { console.log("Hello, JSX World!"); }; var _Main$main$AS = _Main.main$AS; var $__jsx_classMap = { "hello.jsx": { _Main: _Main, _Main$: _Main$ } }; /** * launches _Main.main(:string[]):void invoked by jsx --run|--executable */ JSX.runMain = function (sourceFile, args) { var module = JSX.require(sourceFile); if (! module._Main) { throw new Error("entry point _Main not found in " + sourceFile); } if (! module._Main.main$AS) { throw new Error("entry point _Main.main(:string[]):void not found in " + sourceFile); } module._Main.main$AS(args); }; /** * launches _Test#test*():void invoked by jsx --test */ JSX.runTests = function (sourceFile, tests) { var module = JSX.require(sourceFile); var testClass = module._Test$; if (!testClass) return; // skip if there's no test class if(tests.length === 0) { var p = testClass.prototype; for (var m in p) { if (p[m] instanceof Function && /^test.*[$]$/.test(m)) { tests.push(m); } } } else { // set as process arguments tests = tests.map(function (name) { return name + "$"; // mangle for function test*():void }); } var testCase = new testClass(); if (testCase.beforeClass$AS != null) testCase.beforeClass$AS(tests); for (var i = 0; i < tests.length; ++i) { (function (method) { if (method in testCase) { testCase.run$SF$V$(method, function() { testCase[method](); }); } else { throw new ReferenceError("No such test method: " + method); } }(tests[i])); } if (testCase.afterClass$ != null) testCase.afterClass$(); }; JSX.runMain("hello.jsx", process.argv.slice(2)) })();
実行方法(JSX による実行例)
C:¥> jsx --run hello.jsx
実行方法(Node.js による実行例)
$ jsx --executable node --output hello.jsx.js hello.jsx $ node hello.jsx.js
実行結果
Hello, JSX World!