Difference between revisions of "Languages"
|Line 215:||Line 215:|
* http://hackaday.com/2017/01/27/forth-the-hackers-language/ [https://news.ycombinator.com/item?id=13505285]
* http://hackaday.com/2017/01/27/forth-the-hackers-language/ [https://news.ycombinator.com/item?id=13505285]
=== B ===
=== B ===
Latest revision as of 22:53, 15 August 2019
to reformat. should be more a graph..
- 1 Languages
- 1.1 Plankalkül
- 1.2 Speedcoding
- 1.3 IPL
- 1.4 FLOW-MATIC
- 1.5 Fortran
- 1.6 COMTRAN
- 1.7 ALGOL
- 1.8 COBOL
- 1.9 Lisp
- 1.10 ALGOL 60
- 1.11 JOVIAL
- 1.12 SNOBOL
- 1.13 CPL
- 1.14 BASIC
- 1.15 APL
- 1.16 BCPL
- 1.17 Simula
- 1.18 Logo
- 1.19 Forth
- 1.20 B
- 1.21 Pascal
- 1.22 Smalltalk
- 1.23 Prolog
- 1.24 C / C++
- 1.25 ML / Standard ML
- 1.26 CLU
- 1.27 Mesa
- 1.28 Modula
- 1.29 Scheme
- 1.30 Icon
- 1.31 FP
- 1.32 Mouse
- 1.33 Rexx
- 1.34 Ada
- 1.35 BBC BASIC
- 1.36 C++
- 1.37 Objective-C
- 1.38 DRAKON
- 1.39 Eiffel
- 1.40 Caml / OCaml
- 1.41 Fabrik
- 1.42 Object Pascal
- 1.43 Modula-3
- 1.44 Oberon
- 1.45 Self
- 1.46 Perl
- 1.47 HyperTalk
- 1.48 Tcl
- 1.49 Mathematica
- 1.50 A+
- 1.51 FL
- 1.52 Haskell
- 1.53 Erlang
- 1.54 J
- 1.55 Piet
- 1.56 Python
- 1.57 Q
- 1.58 Oz
- 1.59 Lua
- 1.60 R
- 1.61 OpenDylan
- 1.62 K
- 1.63 Brainfuck
- 1.64 Racket
- 1.65 SAC
- 1.66 PHP
- 1.67 Java
- 1.69 Ruby
- 1.70 Rebol
- 1.71 Dylan
- 1.72 Slate
- 1.73 C#
- 1.74 D
- 1.75 Processing
- 1.76 .NET
- 1.77 Io
- 1.78 Scala
- 1.79 Factor
- 1.80 Spec# / Sing#
- 1.81 F#
- 1.82 Agda
- 1.83 Vala
- 1.84 Sage
- 1.85 Little
- 1.86 Clojure
- 1.87 LOLCODE
- 1.88 Arc
- 1.89 Pure
- 1.90 Go
- 1.91 Dao
- 1.92 Zimbu
- 1.93 Potion
- 1.94 Rust
- 1.95 Crack
- 1.96 Ur
- 1.97 Dart
- 1.98 Elm
- 1.99 Kotlin
- 1.100 Elixier
- 1.101 Shen
- 1.102 Red
- 1.103 Gosu
- 1.104 Julia
- 1.105 Typescript
- 1.106 Nim
- 1.107 Slash
- 1.108 Idris
- 1.109 Clay
- 1.110 Babar
- 1.111 Lobster
- 1.112 Chicken
- 1.113 Z
- 1.114 Urbit
- 1.115 Ioke
- 1.116 Pyret
- 1.117 Crystal
- 1.118 Egison
- 1.119 Ceylon
- 1.120 Lobster
- 1.121 Cosmos
- 1.122 Mochi
- 1.123 Wren
- 1.124 Lasp
- 1.125 Swift
- 1.126 Eve
- 1.127 SPARK
- 1.128 Mu
- 1.129 Luna
- 1.130 klisp
- 1.131 ATS
- 1.132 Spry
- 1.133 Full Metal Jacket
- 1.134 Logic Production Systems
- 1.135 Hivemind
- 1.136 Zig
- 1.137 L.B. Stanza
- 1.138 Nit
- 1.139 Gravity
- 1.140 to sort
- 2 Other
- https://en.wikipedia.org/wiki/First-generation_programming_language - a grouping of programming languages that are machine level languages used to program first-generation computers. The instructions were given through the front panel switches of these computers, directly to the CPU. There was originally no compiler or assembler to process the instructions in 1GL.
- https://en.wikipedia.org/wiki/Second-generation_programming_language - a generational way to categorize assembly languages. The code can be read and written by a programmer. To run on a computer it must be converted into a machine readable form, a process called assembly. The language is specific to a particular processor family and environment.
- https://en.wikipedia.org/wiki/Third-generation_programming_language - a generational way to categorize high-level computer programming languages. Where assembly languages, categorized as second generation programming languages, are machine-dependent, 3GLs are much more machine independent and more programmer-friendly. This includes features like improved support for aggregate data types, and expressing concepts in a way that favors the programmer, not the computer. A third generation language improves over a second generation language by having the computer take care of non-essential details. 3GLs feature more abstraction than previous generations of languages, and thus can be considered higher level languages than their first and second generation counterparts.
First introduced in the late 1950s, Fortran, ALGOL, and COBOL are early examples of this sort of language. Most popular general-purpose languages today, such as C, C++, C#, Java, BASIC and Pascal, are also third-generation languages, although each of these languages can be further subdivided into other categories based on other contemporary traits.
- http://www.lextrait.com/vincent/implementations.html 
- http://www.stroustrup.com/applications.html - C++
- http://colinm.org/language_checklist.html 
- http://joelgrus.com/2013/12/24/why-programming-language-x-is-unambiguously-better-than-programming-language-y/ 
- http://langlangmatrix.com/ 
See also Emacs
Influenced by ALGOL, SAGE. Influenced CMS-2, Coral 66, and SYMPL.
- http://daveshields.me/2012/09/02/on-being-the-maintainer-sole-developer-and-probably-the-sole-active-user-of-the-programming-language-spitbol/ 
- https://en.wikipedia.org/wiki/Dartmouth_BASIC - the original version of the BASIC programming language. It is so named because it was designed and implemented at Dartmouth College. The language was designed by John Kemeny and Thomas Kurtz as part of the Dartmouth Time Sharing System (DTSS) and was one of the first programming languages intended to be used interactively.
Several versions were produced at Dartmouth over the years, all implemented as compile and go compilers, unlike many of the versions of the language implemented elsewhere, which were interpreters. The first compiler was produced before the time-sharing system was ready. Known as CardBASIC, it was intended for the standard card-reader based batch processing system. Like all the following versions, it was implemented by a team of undergraduate programmers working under the direction of Kemeny and Kurtz. The first interactive version was made available to general users in June 1964; the second in October, 1964; the third in 1966; the fourth in 1969; the fifth in 1970; the sixth in 1971; and the seventh in 1979.
- Conway's Game Of Life in APL
- Papers from the Lost Culture of Array Languages - 2012 is the 50th anniversary of Ken Iverson's A Programming Language, which described the notation that became APL (even though a machine executable version of APL didn't exist yet). Since then there's been APL2, Nial, A+, K, Q, and other array-oriented languages. Iverson (1920-2004) teamed with Roger Hui to create a modern successor to APL, tersely named J, in the late 1980s. The culture of array languages is a curious one. Though largely functional, array languages represent a separate evolutionary timeline from the lambda calculus languages like Miranda and Haskell. 
- https://github.com/fordhurley/thorf - massively simplified forth interpreter
- Thompson's B Manual - B is a computer language intended for recursive, primarily non-numeric applications typified by system programming. B has a small, unrestrictive syntax that is easy to compile. Because of the unusual freedom of expression and a rich set of operators, B programs are often quite compact.This manual contains a concise definition of the language, sample programs, and instructions for using the PDP-11 version of B. 
- Squeak is an open-source Smalltalk programming system with fast execution environments for all major platforms. It features the Morphic framework, which promotes low effort graphical, interactive application development and maintenance. Many projects have been successfully created with Squeak. They cover a wide range of domains such as education, multimedia, gaming, research, and commerce.
- Pharo - an open source implementation of the programming language and environment Smalltalk. Pharo offers strong live programming features such as immediate object manipulation, live update, hot recompilation. Live programming environment is in the heart of the system. Pharo emerged as a fork of Squeak.
- Strongtalk - a major re-thinking of the Smalltalk-80 programming language and system. While retaining the basic Smalltalk syntax and semantics, it contains a number of significant advances
- Open Cobalt - a free and open-source software platform for constructing, accessing, and sharing virtual worlds both on local area networks or across the Internet, without any requirement for centralized servers. The technology makes it easy to create deeply collaborative and hyperlinked multi-user virtual workspaces, virtual exhibit spaces, and game-based learning and training environments that run on all major software operating systems. By using a peer-based messaging protocol to reduce reliance on server infrastructures for support of basic in world interactions across many participants, Open Cobalt makes it possible for people to hyperlink their virtual worlds via 3D portals to form a large distributed network of interconnected collaboration spaces. It also makes it possible for schools and other organizations to freely set up their own networks of public and private 3D virtual workspaces that feature integrated web browsing, voice chat, text chat and access to remote desktop applications and services.
- TypeTalk - an attempt to replicate the classic SmallTalk/Lisp paradigm which don’t distinguish between users and programmers: you can, if you wish, take the lid off the application suite you’re currently using and tinker with it, without recompilation, restarts, or even having to save your work.Currently it’s a pile of fairly nasty hacks flying in loose formation, but it does actually work. Mostly. 
C / C++
to sort out!
ML / Standard ML
1973 / 1990 / 1997
Xerox, used on Alto and Star
Influenced Modula-2 and Java
- http://www.call-cc.org/ - chicken scheme
- STklos - a free Scheme system compliant with the languages features defined in R5RS. The aim of this implementation is to be fast as well as light. The implementation is based on an ad-hoc Virtual Machine. STklos can also be compiled as a library and embedded in an application.
- Objective-C is a general-purpose, high-level, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. It is the main programming language used by Apple for the OS X and iOS operating systems and their respective APIs, Cocoa and Cocoa Touch. Originally developed in the early 1980s, it was selected as the main language used by NeXT for its NeXTSTEP operating system, from which OS X and iOS are derived. Generic Objective-C programs that do not use the Cocoa or Cocoa Touch libraries can also be compiled for any system supported by GCC or Clang.
Caml / OCaml
- http://en.wikipedia.org/wiki/OCaml - originally known as Objective Caml, is the main implementation of the Caml programming language, created by Xavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy, Ascánder Suárez and others in 1996. OCaml extends the core Caml language with object-oriented constructs. OCaml's toolset includes an interactive top level interpreter, a bytecode compiler, a reversible debugger, a package manager (OPAM), and an optimizing native code compiler. It has a large standard library that makes it useful for many of the same applications as Python or Perl, as well as robust modular and object-oriented programming constructs that make it applicable for large-scale software engineering. OCaml is the successor to Caml Light. The acronym CAML originally stood for Categorical Abstract Machine Language, although OCaml abandons this abstract machine. OCaml is a free open source project managed and principally maintained by INRIA. In recent years, many new languages have drawn elements from OCaml, most notably F# and Scala.
- Dodekalogue - the common name for the twelve rules that define the syntax and semantics of Tcl.
- PS/Tk - provides an interface to the Tk toolkit, and is an effective tool for creating graphical interfaces. A detailed guide to using Tk from Scheme is in progress.
- AndroWish - allows to run desktop Tcl and Tk programs almost unaltered on the Android Platform while it opens the door to script a rich feature set of a mobile platform. It's sibling undroidwish uses the same code base and offers a similar feature set on various desktop and embedded platforms.
- A+: a programming language for actual programmers - a powerful and efficient programming language. It is freely available under the GNU General Public License. It embodies a rich set of functions and operators, a modern graphical user interface with many widgets and automatic synchronization of widgets and variables, asynchronous execution of functions associated with variables and events, dynamic loading of user compiled subroutines, and many other features. Execution is by a rather efficient interpreter. A+ was created at Morgan Stanley. Primarily used in a computationally-intensive business environment, many critical applications written in A+ have withstood the demands of real world developers over many years. Written in an interpreted language, A+ applications tend to be portable.
- Haskell is an advanced purely-functional programming language. An open-source product of more than twenty years of cutting-edge research, it allows rapid development of robust, concise, correct software. With strong support for integration with other languages, built-in concurrency and parallelism, debuggers, profilers, rich libraries and an active community, Haskell makes it easier to produce flexible, maintainable, high-quality software.
- GHC - a state-of-the-art, open source, compiler and interactive environment for the functional language Haskell. Highlights:
- Thinking Functionally with Haskell - 3rd Aug, 2012
- YouTube: xmonad (Haskell) on Code Deconstructed - Episode 3
- YouTube: Haskell Symposium 2012. Wouter Swierstra: xmonad in Coq.
A package is a library of Haskell modules known to the compiler. GHC comes with several packages: see the accompanying library documentation. More packages to install can be obtained from HackageDB.
Using a package couldn't be simpler: if you're using ––make or GHCi, then most of the installed packages will be automatically available to your program without any further options. The exceptions to this rule are covered below in Section 4.9.1, “Using Packages ”.
Building your own packages is also quite straightforward: we provide the Cabal infrastructure which automates the process of configuring, building, installing and distributing a package. All you need to do is write a simple configuration file, put a few files in the right places, and you have a package. See the Cabal documentation for details, and also the Cabal libraries (Distribution.Simple, for example).
- Cabal (Common Architecture for Building Applications and Libraries) is a system for building and packaging Haskell libraries and programs. It defines a common interface for package authors and distributors to easily build their applications in a portable way. Cabal is part of a larger infrastructure for distributing, organizing, and cataloging Haskell libraries and programs. Specifically, the Cabal describes what a Haskell package is, how these packages interact with the language, and what Haskell implementations must to do to support packages. The Cabal also specifies some infrastructure (code) that makes it easy for tool authors to build and distribute conforming packages.
- HackageDB (or just Hackage) is a collection of releases of Haskell packages. Each package is in the Cabal format, a standard way of packaging Haskell source code that makes it easy to build and install. These pages are a basic web interface to the Hackage package database.
- cabal-install package provides the cabal command-line tool which simplifies the process of managing Haskell software by automating the fetching, configuration, compilation and installation of Haskell libraries and programs. Those packages must be prepared using Cabal and should be present at Hackage.
- Gtk2Hs - A GUI Library for Haskell based on Gtk
- Arch Wiki: Haskell Package Guidelines
- News about Haskell on Arch Linux
- https://github.com/archhaskell/habs - AUR is out of date for haskell packages
pacman -Rncs ghc remove all haskell..
- Yesod is a Haskell web framework for productive development of type-safe, RESTful, high performance web applications.
- Snap is a simple web development framework for unix systems, written in the Haskell programming language. Snap has a high level of test coverage and is well-documented. Features include: a fast HTTP server library, a sensible and clean monad for web programming, an HTML-based templating system for generating pages
Esoteric, image based.
Good for stats, etc.
- R Package Documentation - A comprehensive index of R packages and documentation from CRAN, Bioconductor, GitHub and R-Forge.
- R packages - This is the book site for “R packages”. It was published with O’Reilly in April 2015. Packages are the fundamental units of reproducible R code. They include reusable R functions, the documentation that describes how to use them, and sample data. In this section you’ll learn how to turn your code into packages that others can easily download and use. Writing a package can seem overwhelming at first. So start with the basics and improve it over time. It doesn’t matter if your first version isn’t perfect as long as the next version is better.
sudo Rscript -e "install.packages('devtools', repos='https://www.stats.bris.ac.uk/R/')"
- R Markdown - documents are fully reproducible. Use a productive notebook interface to weave together narrative text and code to produce elegantly formatted output. Use multiple languages including R, Python, and SQL.
- http://practicaltypography.com/why-racket-why-lisp.html 
Java syntax seems unwieldy.
- http://blog.paralleluniverse.co/2014/05/01/modern-java/ 
- http://blog.paralleluniverse.co/2014/05/08/modern-java-pt2/ 
- https://gdstechnology.blog.gov.uk/2015/12/11/using-jemalloc-to-get-to-the-bottom-of-a-memory-leak/ 
- http://natureofcode.com/ - processing book
- http://overwatering.org/blog/2013/12/scala-1-star-would-not-program-again/ 
Spec# / Sing#
- A Gray Beard Explores F#
- The Agda standard library - All library modules, along with short descriptions
- Sage is a prototype functional programming language designed to provide high-coverage checking of expressive program specifications (types).
- Little (L) is a compiled-to-byte-code language that draws heavily from C and Perl. From C, Little gets C syntax, simple types (int, float, string), and complex types (arrays, structs). From Perl, Little gets associative arrays and regular expressions (PCRE). And from neither, Little gets its own simplistic form of classes. 
- Cursive - The IDE for beautiful Clojure(Script) code
Lisp dialect by PG etc. Developed in Racket.
go get ./... # run in go project directory to install dependencies
go build project.go # compile a project
- Glide - Package Management For Go. Semantic Versions and Ranges. Git, Bzr, Hg, Svn. Works with Go toolchain. Leverages vendor directory. Imports from Godep, GB, GPM, Gom. Private Repos and Forks.
- https://github.com/spf13/cobra - both a library for creating powerful modern CLI applications as well as a program to generate applications and command files.Many of the most widely used Go projects are built using Cobra, such as: Kubernetes, Hugo, rkt, etcd, Moby (former Docker), Docker (distribution), OpenShift, Delve, GopherJS, CockroachDB, Bleve, ProjectAtomic (enterprise), Giant Swarm's gsctl, Nanobox/Nanopack, rclone, nehm, Pouch, Istio, Prototool, mattermost-server, etc.
- Yu Watanabe: Interactive Go programming with Jupyter
- gokrazy - a pure-Go userland for your Raspberry Pi 3 appliances. For a long time, we were unhappy with having to care about security issues and Linux distribution maintenance on our various Raspberry Pis.Then, we had a crazy idea: what if we got rid of memory-unsafe languages and all software we don’t strictly need?Turns out this is feasible. gokrazy is the result.
- Zimbu is an experimental programming language. It is a very practical, no-nonsense kind of language. It mixes the good things of many existing languages and avoids their deficiencies. And then throws in a few brand new ideas.
- http://www.rust-lang.org/ - from mozilla
- https://github.com/llogiq/nsa - a Rust lint that never reports anything, but collects crate metadata like the composition of types and the call graph.
- Elm is a functional reactive programming (FRP) language that compiles to HTML, CSS, and JS. FRP is a concise and elegant way to create highly interactive applications and avoid callbacks.
As of Android Studio 3.0 (October 2017) Kotlin is a fully supported programming language by Google on the Android Operating System, and is directly included in the Android Studio 3.0 IDE package as an alternative to the standard Java compiler. The Android Kotlin compiler lets the user choose between targeting Java 6- or Java 8-compatible bytecode.
- Elixir is a functional meta-programming aware language built on top of the Erlang VM. It is a dynamic language with flexible syntax with macros support that leverages Erlang's abilities to build concurrent, distributed, fault-tolerant applications with hot code upgrades. Elixir also provides first-class support for pattern matching, polymorphism via protocols (similar to Clojure's), aliases and associative data structures (usually known as dicts or hashes in other programming languages). Finally, Elixir and Erlang share the same bytecode and data types. This means you can invoke Erlang code from Elixir (and vice-versa) without any conversion or performance hit. This allows a developer to mix the expressiveness of Elixir with the robustness and performance of Erlang.
From Microsoft, compiles to JS.
- Idris - Idris is a general purpose pure functional programming language with dependent types. Dependent types allow types to be predicated on values, meaning that some aspects of a program’s behaviour can be specified precisely in the type. It is compiled, with eager evaluation. Its features are influenced by Haskell and ML, and include:
- Full dependent types with dependent pattern matching
- Simple foreign function interface (to C)
- Compiler-supported interactive editing: the compiler helps you write code using the types
- where clauses, with rule, simple case expressions, pattern matching let and lambda bindings
- Dependent records with projection and update
- Interfaces (similar to type classes in Haskell)
- Type-driven overloading resolution
- do notation and idiom brackets
- Indentation significant syntax
- Extensible syntax
- Cumulative universes
- Totality checking
- Hugs style interactive environment
- https://sale.urbit.org/ - Welcome to Urbit video
Full Metal Jacket
Logic Production Systems
- https://bitbucket.org/lpsmasters/lps_corner 
- Zig - n open-source programming language designed for robustness, optimality, and clarity.
- YouTube: Zig: A programming language designed for robustness, optimality, and clarity – Andrew Kelley
- Gravity Documentation - a powerful, dynamically typed, lightweight, embeddable programming language written in C without any external dependencies (except for stdlib). It is a class-based concurrent scripting language with a modern Swift like syntax. Gravity supports procedural programming, object-oriented programming, functional programming and data-driven programming. Thanks to special built-in methods, it can also be used as a prototype-based programming language. Gravity has been developed from scratch for the Creo project in order to offer an easy way to write portable code for the iOS and Android platforms. It is written in portable C code that can be compiled on any platform using a C99 compiler. The VM code is about 2K lines long, the multipass compiler code is about 3K lines and the shared code is about 2K lines long. The compiler and virtual machine combined add less than 200KB to the executable on a 64 bit system. 
- https://github.com/basic-gongfu/cixl - a Lispy Forth in C
- Probabilistic Models of Cognition - 2nd Edition - by Noah D. Goodman & Joshua B. Tenenbaum. This book explores the probabilistic approach to cognitive science, which models learning and reasoning as inference in complex probabilistic models. We examine how a broad range of empirical phenomena, including intuitive physics, concept learning, causal reasoning, social cognition, and language understanding, can be modeled using a functional probabilistic programming language called WebPPL.
- Knuth: Programs - "I write lots of CWEB programs, primarily for my own edification. If there is sufficient interest, I'll make a large subset of them available via the Internet. For now, I'm listing only a few. The first two show (by quite different methods) that exactly 2,432,932 knight's tours are unchanged by 180-degree rotation of the chessboard. The third was used to compute some of the tables in Axioms and Hulls that several people have asked about. The fourth was used in one of my otherwise unpublished lectures in the Computer Musings series. The next few were requested by members of the Academy of Recreational Mathematicians in Japan. And so on."
- cola (aka idst, jolt, etc.) - an ongoing project to create a springboard for investigating new computing paradigms. Everything in it is late-bound, the intention being that any paradigm (existing or yet to be invented, formal complexity notwithstanding) be easily and efficiently mapped to it and made available to the user. It is a small part (the implementation vehicle) of the reinventing computing project.