All Projects → snowflake-language → snowflake

snowflake-language / snowflake

Licence: other
a language

Programming Languages

rust
11053 projects
Nix
1067 projects

Projects that are alternatives of or similar to snowflake

Sonyflake Rs
🃏 A distributed unique ID generator inspired by Twitter's Snowflake.
Stars: ✭ 91 (+468.75%)
Mutual labels:  snowflake
Yuniql
Free and open source schema versioning and database migration made natively with .NET Core.
Stars: ✭ 156 (+875%)
Mutual labels:  snowflake
DiscordLookup
DiscordLookup | Get more out of Discord with Discord Lookup! Snowflake Decoder, Guild List with Stats, Invite Info and more...
Stars: ✭ 86 (+437.5%)
Mutual labels:  snowflake
Snow Stamp
Get the timestamp from a Discord snowflake ❄
Stars: ✭ 95 (+493.75%)
Mutual labels:  snowflake
Go Katsubushi
ID generator server
Stars: ✭ 118 (+637.5%)
Mutual labels:  snowflake
Snowflakes
❄️ Snowflakes in JavaScript
Stars: ✭ 170 (+962.5%)
Mutual labels:  snowflake
Sql Runner
Run templatable playbooks of SQL scripts in series and parallel on Redshift, PostgreSQL, BigQuery and Snowflake
Stars: ✭ 68 (+325%)
Mutual labels:  snowflake
Excelerator
This is an Excel Addin for Windows that reads and writes data to Snowflake
Stars: ✭ 53 (+231.25%)
Mutual labels:  snowflake
Did
高性能的ID生成器, 基于rpcx和Memcached协议提供网络服务调用
Stars: ✭ 120 (+650%)
Mutual labels:  snowflake
Fluentmigrator
Fluent migrations framework for .NET
Stars: ✭ 2,636 (+16375%)
Mutual labels:  snowflake
Gosnowflake
Go Snowflake Driver
Stars: ✭ 108 (+575%)
Mutual labels:  snowflake
Snowflake
java edition of [Twitter Snowflake](https://github.com/twitter/snowflake), a network service for generating unique ID numbers at high scale with some simple guarantees.
Stars: ✭ 114 (+612.5%)
Mutual labels:  snowflake
Idworker
idworker 是一个基于zookeeper和snowflake算法的分布式ID生成工具,通过zookeeper自动注册机器(最多1024台),无需手动指定workerId和datacenterId
Stars: ✭ 171 (+968.75%)
Mutual labels:  snowflake
Snowflake
A simple to use Go (golang) package to generate or parse Twitter snowflake IDs
Stars: ✭ 1,314 (+8112.5%)
Mutual labels:  snowflake
onionfruit
OnionFruit™ Connect - Tor access client with country selection, bridge configuration, pluggable transports and experimental DNS support
Stars: ✭ 150 (+837.5%)
Mutual labels:  snowflake
Locopy
locopy: Loading/Unloading to Redshift and Snowflake using Python.
Stars: ✭ 73 (+356.25%)
Mutual labels:  snowflake
Terraform Provider Snowflake
Terraform provider for managing Snowflake accounts
Stars: ✭ 165 (+931.25%)
Mutual labels:  snowflake
DBTestCompare
Application to compare results of two SQL queries
Stars: ✭ 15 (-6.25%)
Mutual labels:  snowflake
sno
Compact, sortable and fast unique IDs with embedded metadata.
Stars: ✭ 77 (+381.25%)
Mutual labels:  snowflake
Sqitch
Sensible database change management
Stars: ✭ 2,320 (+14400%)
Mutual labels:  snowflake

snowflake

a fast, low-level, and expressive programming language designed for minimal usage of hierarchy

a brief history

snowflake, the language, originally started as a collection of ideas to improve programming that somewhat resembled a mashup of go and rust (more heavily influenced by go at the time, but with the lower-level-ness of rust and some additional features superwhiskers, the author, thought would be nice to have in go).

snowflake in 2018

further on in conceptualization, it gradually shifted to be more and more rust-like, until the point where it became rust but with a few tweaks such as the removal of ownership to allow for fully manual memory management by default, and other extensions (that in hindsight wouldn't make sense to create what was essentially a fork to implement).

eventually, it shifted to become more like lisp (retaining strong typing and manually managed memory) and had some things, such as most types and other unnecessary (in superwhiskers' opinion) language items/features stripped out to make a really portable language. in addition, macros were buffed to add in an all-powerful file-wide macro kind that could be used to implement alternative syntaxes on top of a lispy syntax to allow people to use the language the way they wanted

snowflake but lispy

snowflake but lispy (no methods)

later on, methods were removed (as seen above) and tagging was created/discovered/applied to the language. this discovery heavily influenced the language later on, as even though superwhiskers was hesitant to apply it everywhere at first, it gradually made its way in, creating the language you see today

snowflake but ml

more recently, the lispy syntax was outright removed to simplify the parser and make it easier to implement, but alternative syntaxes are not completely gone, as they are now intended to be done using plugins. however, technically speaking, the current ml-like syntax you see now has existed since the lispy one, as it was intended to be the "default syntax", used in most cases as it would be drastically easier to work with (typed lisps are a pain).

the language itself

snowflake is a language designed from the start to be low level. ideally, it should take very little to port snowflake to a new platform than c (due to very little types existing in the language itself and because it assumes very little about the underlying platform). aside from that, other goals/features include (but are not limited to):

  • non-hierarchical programming (in both module system and type system)
  • speed (due to the expressiveness of macros and such + optimizations + low-level-ness, one can get more performance out of equivalent code in other languages without needing to rely on the implementation)
  • a primarily functional programming style (without sacrificing speed)
  • clean, easy to read syntax that should be familiar to users of other functional languages

an explaination of tagging

tagging is essentially applied set theory; it is based entirely upon single-layer collections of objects that can have operations applied to them in order to construct new tags. these operations can be listed as such:

  • intersection, which returns a tag containing all of the common items between the operands
  • union, which returns a tag containing all of the items in both sets regardless of presence
  • difference, which returns a tag containing the items in the first set minus the ones that exist in the second
  • symmetric difference/xor, which returns all of the items not in both sets

aside from that, snowflake tweaks the set theory model to create two kinds of tags: primary and secondary tags. primary tags are just mathematical sets, and secondary tags are mathematical sets without a uniqueness restriction. there is also one more change, the sets exclusively contain name-value bindings (like a map/key-value store/whatever) and primary tags only need to be unique on the name

if you don't understand this, you can visualize it like how set theory is taught really early on in grade school: as a venn diagram, where intersections are the overlapping parts of components, unions are two components combined, etc...

the event system

the snowflake event system is a portion of the standard library that is designed to cleanly abstract over additional concurrency systems as well as provide a model for how to implement concurrency in a potential "snowflake os"

it loosely works like this

  • program has a central definition of event datatypes and the event handlers that take them
  • program starts with a "genesis" event
  • event handlers respond to this
  • event handlers then emit new events (yes, they can emit multiple) (they can also emit nothing and those chains die)
  • new event handlers respond to those
  • the cycle continues

the idea behind it is that events are decoupled from their handlers and this would provide a more modular means of concurrency. it also avoids "coloring" functions because all handlers can be called like normal functions and can have their outputs chained to successive handlers in that chain of events.

a roadmap

  • implement a parser from scratch to improve error messages and make it less hacky
  • redo the interpreter to actually typecheck, then make it compile to bytecode for better performance
  • add in tag typing (tagging applied to compound types)
  • add in macros
  • consider implementing dependent typing around this time (go down to literature to see some references/examples of what we're looking at)
  • consider implementing algebraic effects
  • look at adding in a distinction between purity / impurity & safe / unsafe, potentially done without a language feature using algebraic effects
  • implement a compiler backend using qbe (see literature)
  • polish more of the core language, smoothing out rough edges and taking feedback
  • add a minimal standard library + core library and polish things
  • implement the event system
  • selfhost and implement llvm post-selfhosting as well as port existing things depending on the rust impl
  • attempt to implement a jit
  • write a package manager

literature

compiler backends

dependent typing

examples

hello world

def main =>
    *println "hello, world"

(there isn't much else that isn't likely to change)

links

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].