Skip to main content

Show HN: Tack, a fast lightweight scripting language for games and embedding https://ift.tt/OwI4Dg5

Show HN: Tack, a fast lightweight scripting language for games and embedding https://ift.tt/AsQU8JG Hi HN! Tack is a scripting language I've been working on sporadically for the past year or so, and intensely for the past few weeks. It originated out of a desire for something that was like Lua, but with a more familiar syntax, and without some of the other surprises in Lua such as the 1-indexed tables. It's also been a great learning project, and a very satisfying challenge! While the current version is early beta at best, I hope to continue working on it and maybe see some adoption. Despite the relative lack of optimization, I'm very pleased with the performance so far - although I haven't done a huge amount of benchmarking, it seems to be significantly faster than the stock Lua 5.4 interpreter for the quicksort test, and the btrees test (copied from the Computer Language Benchmarks Game). The language is designed for embedding in C++ programs, and is written in C++ more or less from scratch including the handwritten recursive descent parser, and a register-based compiler/interpreter. The only dependency other than the standard library is my C++ adaptation of the khash library used for the object type - a from-scratch hashmap seemed not worth the trouble. Quick code example - more examples in the repo! fn quicksort(arr) { const n = #arr if n <= 1 { return arr } " find the midpoint " let l = min(arr) let r = max(arr) if r == l { return arr } const mid = (l + r) / 2 " split array into upper and lower " const upper = filter(arr, fn(x) { return x < mid }) const lower = filter(arr, fn(x) { return x >= mid }) " recursively sort the upper and lower sub-arrays and join the result" return quicksort(lower) + quicksort(upper) } let A = [] for i in 0, 1000000 { A << random() } let before = clock() let B = quicksort(A) let after = clock() print("Time taken: ", after - before, "seconds") Building requires just cmake and a C++20 compiler - tested with MSVC 2022, g++11 on WSL and Clang 15 on M1 https://craftinginterpreters.com was a great help with implementing closures, as I had gone down a blind alley with my first approach for locating the closed-over variables. However I have taken a slightly different approach towards boxing. As I do intend to use this for some small games myself going forward, there is a standard library already, and plans to expand it. I also intend to release a GLFW-based mini game framework along with precompiled binaries, so hobbyists (and younger relatives!) may use it without needing a full compiler toolchain. I would love if anyone is interested enough to try it out! James https://github.com/PlumeCat/tack May 14, 2023 at 11:39PM

Comments

Popular posts from this blog

Show HN: Launch VM workloads securely and instantaneously, without VMs https://ift.tt/2QwJ1Kd

Show HN: Launch VM workloads securely and instantaneously, without VMs Hello HN! We've been working on a new hypervisor https://kwarantine.xyz that can run strongly isolated containers. This is still a WIP, but we wanted to give the community an idea about our approach, its benefits, and various use cases it unlocks. Today, VMs are used to host containers, and make up for the lack of strong security as well as kernel isolation in containers. This work adds this missing security piece in containers. We plan on launching a free private beta soon. Meanwhile, we'd deeply appreciate any feedback, and happy to answer any questions here or on our slack channel. Thanks! April 29, 2021 at 07:50AM

Show HN: Comment on live websites just like you comment on Google Docs/Figma https://ift.tt/GRhrjX0

Show HN: Comment on live websites just like you comment on Google Docs/Figma I'd love your feedback on this new JS plugin we launched. With this, you can comment on live websites just like you comment on Google Docs or Figma. You can use is to get Copy or UI feedback right on the website you are building. Feedback can be provided in rich formats like audio and video. You can get started by installing a JS tag in the footer of the website. You can then turn the review mode on or off on demand by adding “?review=true” to the URL. Demo video (43s): https://www.youtube.com/watch?v=cdnfBEw8TfI Demo video: https://www.youtube.com/watch?v=h6vxzXJuh8o https://ift.tt/ocLpdEu October 26, 2022 at 02:18AM