Frog has database technology in its DNA.
If you were designing a language from scratch, wouldn't you want it to work well with databases? For that matter, wouldn't you want it to include features that exist in relational, NoSQL and object databases since the features are useful in general?
That's just what we did with Frog.
Collections are first-class types that hold items.
The collection construct is a type, just like the class construct. Anything that can be defined in a class may be defined in a collection.
All collections may have one or more indexes to improve access times and to maintain collection-level constraints.
Indexes are a part of the collection definition.
Languages do a great job of constraining an object to a domain set via typing.
Like databases, Frog takes that a step further by allowing foreign keys to collections.
Using collections, indexes and foreign keys, it is possible to define what databases refer to as a schema with in Frog.
All that's needed is a basic class.
Databases are significantly more expressive than languages when it comes to defining primitive types.
Frog has first-class primitive types on par with enterprise-grade databases.
All the familar relational algebra constructs found in SQL have analogs in Frog.
Your SQL skills will transfer effortlessly.
Due to the unique considerations of working with collections large and small, Frog supports cursors for iterating and updating collections.
Frog has first-class support for type constraints.
It also has first-class support for collection constraints, a feature found only in robust databases.
Both databases and languages have nullability but the semantics are different.
Frog takes the best of both by allowing nullable references as well as nullable values.