background preloader

Langdev 1

Facebook Twitter

Lisp 1

Ix. Scheme 1. Fp 1. Compiler. Ometa. Lisp 2. Scheme 2. Fp 2. The functional programming language Hope. Oberon and language design. Onyx. Onyx is a powerful stack-based, multi-threaded, interpreted, general purpose programming language similar to PostScript. It can be embedded as an extension language similarly to ficl (Forth), guile (scheme), librep (lisp dialect), s-lang, Lua, and Tcl. Distinguishing features Onyx provides truly scalable threading that utilizes the operating system's native POSIX threading. Onyx can be configured over 1000 different ways, depending on the needs of the program that it is being embedded into. This makes it possible to use Onyx in restricted environments like boot loaders and operating system kernels, without sacrificing functionality that is useful for general purpose programming.

Standard features A comprehensive set of operators that provide access to POSIX system functionality, such as file I/O, process creation and control, and signal handling. Implementing A Scripting Engine. I started when Unreal hadn't been released for very long. I was browsing their tech site and found the UnrealScript reference document. I had heard of UnrealScript of course, but didn't really know what it was. I read the document and thought the idea of a script language was really cool. I wanted to write my own, and link it to a game engine so that the whole world could easily create new content for my game. Fortunately, I got a class in Compiler Construction that semester, and as a practical assignment we had to implement a VERY simple Pascal compiler. I started working in parallel (OK, semi-parallel) on my own, better, compiler. But, let's get to a little useful info. First of all, I advise anyone who's going to program a compiler to get the Dragon book.

The book hasn't changed since 1986; this is because the underlying techniques of compiler design practically haven't changed since the 1960's. Misconstrued Language Similarity Considered Harmful. Very frequently I come across posts of the form Language X for Language Y programmers. It's not that there is anything wrong with them, but, more often than not, the underlying tone of such posts is to highlight some apparent (and often misconstrued) similarities between the two languages. Objects in Java and processes in Erlang have some similarity in the sense that both of them abstract some state of your application. But that's where the similarity ends - the rest is all gaping differences. Objects in a class oriented OO language like Java and processes in a concurrency oriented language like Erlang are miles apart in philosophy, usage, implementation and granularity. Read Joe Armstrong's Why OO sucks for details.

But for the purpose of this post, the following statement from Joe suffices to nip in the bud any logic that claims objects in Java are similar to processes in Erlang .. Similarity breeds Contentment It's always comforting to have a base of similarity. Create Your Own Programming Language. Evolutionary architecture and emergent design: Language, express. This is the second part of a two-part article illustrating how the expressiveness of computer languages helps with emergent design by allowing you to concentrate more on essence than on ceremony. A chasm between intent and result is characteristic of many decades-old languages (including the Java™ language), adding needless ceremony to problem solving.

More-expressive languages make it easier to find idiomatic patterns because the code contains less noise. This expressiveness is a hallmark of modern languages like Groovy and Scala; older but more-expressive languages like Ruby, of which JRuby is the JVM variant; or reimagined older languages like Clojure, the modern Lisp on the JVM (see Resources). In this article, I continue the demonstration I began in Part 1— implementing the traditional Gang of Four patterns from the Design Patterns book in more-expressive languages. The Decorator pattern The Gang of Four book defines the Decorator pattern as: Traditional decorator Listing 1. Summary. Fledgling Languages List. Think twice before naming your new programming language. FOSS projects in general tend to pick some generic English words as names that make them really hard to find This is related to most F/OSS projects having a crushing deficit in the marketing skills department.

Notice how most don't have a visual identity, either? And how they typically launch mostly undocumented, on somebody else's website? I had a checklist for launching A/Bingo, and held off on it for a week past when the code was ready, because the marketing wasn't. Logo, slogan, landing page, usage documentation, install documentation, live demo, domain name. There is no point in spending dozens or hundreds of engineer hours on a project if it languishes in obscurity because you were too disinterested to, e.g., put a logo on it.

Incidentally, even if you can't get the exact match domain .com domain name for your project, for OSS everyone is just going to Google you anyhow. Parlog As A System Progrmming Language. Variable lookup. After the changes I mentioned in an earlier post I find that about 63% of all variable references are to arguments in the immediately enclosing lambda. In fact, more than half the variable references are to the first argument in the argument list. I'm going to guess that most of the remaining variable references end up referring to global variables, but I could be wrong. It also turns out that most of the argument references are subproblems of PrimitiveCombination1 and PrimitiveCombination2. Enabling specialization of these forms should be a big win. Without specialization, these are the steps to evaluating a PrimitiveCombination1: Now if we know that the argument to the primitive is simply going to be an argument bound in the enclosing lambda expression, we can bypass the code that evaluates it and just fetch the value:

Micheal Feathers on Programming Languages. 1. I'm Sadek Drobi, I'm here with Michael Feathers, at QCon. Michael, can you tell us about yourself and what you've been busy with lately? Yes. I am a consultant. I spend a lot of time traveling around the world helping teams with various issues. Primary thing really is dealing with people having large existing codebases that don't really have much in the way of test around them. I found "If I write a book about this, then I won't actually have to go on do this anymore. 2.

It's a simple question. Writing tests is a valuable thing to do to start approach that. 3. It's never like a decisive leap, in essence. 4. The biggest issue that you typically have when you are going to get test in place around some existing code is determining what the scope should be. Then we basically try to figure out "Do we need to go and cover with tests in one place that covers these replaces we need to make changes or is that too difficult? 6. But, sometimes, that can work against testability in a sense. 7. Ending the Era of Patronizing Language Design. Earlier this year, I was asked to speak at a Ruby Conference. I was happy to go, but I also felt a bit out of place. I haven’t done much Ruby, but I’ve admired the language from afar. I have a number of friends who’ve left C++ and Java to jump toward Ruby and Python and for the most part, they are happy. They do great work, and they enjoy it.

They are living proof that the nightmare scenarios that people imagine about dynamic languages aren’t inevitable. You can program safe, secure, high quality applications in dynamically typed languages. People do it all the time, but that’s cultural knowledge. This is pretty much the situation I’ve been in with Ruby, up to a point. Ethic of responsibility? I guess I can explain it this way. Let’s leave aside, for a minute, the debate over static and dynamic typing. I just haven’t noticed this in Ruby culture.

In Ruby, you can do nearly anything imaginable. So, why aren’t more people crashing and burning? We’ve paid a price for that attitude. Boomerang: A bidirectional programming language for ad-hoc data. A bidirectional programming language for ad-hoc, textual data. Boomerang is a programming language for writing lenses—well-behaved bidirectional transformations—that operate on ad-hoc, textual data formats. Every lens program, when read from left to right, describes a function that maps an input to an output; when read from right to left, the very same program describes a "backwards" function that maps a modified output, together with the original input, back to a modified input. Lenses have been used to solve problems across a wide range of areas in computing including: in data converters and synchronizers, in parsers and pretty printers, in picklers and unpicklers, in structure editors, in constraint maintainers for user interfaces, in software model transformations, in schema evolution, in tools for managing system configuration files, and in databases where they provide updatable views.

Mailing List Team Boomerang is developed by Nate Foster, Benjamin C. Support Binary Distribution J. J. Your Language Features Are My Libraries. At lunch today, we had a lengthy discussion about the merits of various .NET technologies, including LINQ. I complained that, although I like LINQ, and I like C#, I cannot help but be annoyed that many of these “cool” language features in C# are nothing more than libraries in Smalltalk. Joel responded that the comparison wasn’t fair; C# allows you to invent more syntax than those languages permit, and afford greater flexibility. Without disagreeing, let’s visit some specific examples. The code is written for GNU Smalltalk and written slightly Algol-y on purpose, to make it easier for non-Smalltalkers to follow. The ?? One C# feature that Joel specifically mentioned was the ?? It turns out that you can add this exact operator to Smalltalk trivially.

Object extend [ ?? Let’s test it: st> 5 ?? Perfect. Well, almost. Thankfully, it turns out that we can fix that easily, too. Object extend [ ?? St> 'foobar' ?? Most Smalltalks actually already have this operator, calling it ifNil:. LINQ to SQL. Languages Design Resources. This page was built to host links to language design resources, and to provide a directory of new or lesser known languages. Resources 5 Questions 5 Questions About Language Design by Paul Graham Language Syntax Syntax Accross Languages for language designers, users and lovers Ulf's Notes Ulf's Home-Page of Programming Language Design C2 Wiki A content wiki with a focus on patterns in software development. PiLuD PiLuD: Free talks on Programming Language Design Langsmiths Discussion group for folks writing their own object oriented programming languages #proglangdesign Discussing programming languages designs, new or lesser known languages comp.lang.misc Different computer languages not specifically listed Languages Cobra :: Chuck Esterbrook Cobra is a general purpose programming language with a clean, high-level syntax, static and dynamic binding, first class support for unit tests and contracts, and compiled performance with scripting conveniences.

Ioke is a folding language. MiniD :: Jarrett Billingsley. Nimrod Programming Language. Subtext home. On programming language design. In a recent post I claimed that Python’s lambda construct is broken. This attracted some angry responses by people who thought I was confused about how Python works. Luckily there were also many useful responses from which I learnt. This post is a response to comment 27, which asks me to say more about my calling certain design decisions in Python crazy. Language design is like architecture. The architect is bound by the rules of nature, he has to take into account the properties of the building materials, and he must never forget the purpose that the building will serve. Likewise, the designer of a programming language is bound by the theorems of computability theory, he must take into account the properties of the underlying hardware, and he must never forget that the language is used by programmers.

When I teach the theory of programming languages, I tell my students that there is a design principle from which almost everything else follows: Undefined values (NULL, null, undef, None) Gel-generic-language - Google Code. Jose Falcon, William R. Cook Department of Computer Science University of Texas at Austin Abstract Both XML and Lisp have demonstrated the utility of generic syntax for expressing tree-structured data. But generic languages do not provide the syntactic richness of custom languages.

Generic Extensible Language (Gel) is a rich generic syntax that embodies many of the common syntactic conventions for operators, grouping and lists in widely-used languages. Prefix/infix operators are disambiguated by white-space, so that documents which violate common white-space conventions will not necessarily parse correctly with Gel. With some character replacements and adjusting for mismatch in operator precedence, Gel can extract meaningful structure from typical files in many languages, including Java, CSS, Smalltalk, and ANTLR grammars. Download original paper: Gel: A Generic Extensible Language from IFIP Working Conference on Domain Specific Languages (DSL WC) Getting Started Examples.

Programming Languages: Application and Interpretation by Shriram. Breaking News: Second Edition! This page is for the first edition of the book. I have since completely rewritten the book from scratch. Though the general principles underlying this book remain the same, the new book has better prose, updated material, a somewhat different (and better) technical presentation, and fewer pages. The second edition is available online, and I update it frequently. The PDF version is still a bit rough, and needs more attention to formatting. Because my focus is on this new edition, I am requesting that you not send me bug reports about the current edition. Why Does This Book Exist? Please see my brief essay about the educational philosophy behind this book.

Does Anyone Use This Book? At present, I am aware of 52 universities (and some high-schools) that have used part or all of the book. If you're an educator (teaching at a University, College, High School, Grammar School, Hochschule, Gymnasium, etc.), please let me know! Get the Book Get the Software #lang plai. The Falcon Programming Language: a brief tutorial. The Falcon Programming Language is a typeless language born for rapid development, prototyping, and ready-made integration.

We may also describe Falcon as a "scripting" language with features that enable the programmer to create even complex multi-threaded applications. It mixes several different programming paradigms into an unique blend of constructs, overcoming the limitations and partialities of other languages. The objective of this brief article is to be very practical with code examples as well as step by step simple instructions. I won't reprise the historical and technical details that led us to developing this new programming language.

Please feel free to visit the main Falcon Programming Language site for plenty of details. The Falcon p. l. presents multiple programming paradigms with a unique blend of interconnected concepts. Falcon has native strings, numbers, arrays and dictionaries. Bash-3.2$ falcon -i Falcon compiler and interpreter. And would be: Nasal - Not another scripting language. Nexus Programming Language. Parameterized Notions of Computation. Let's make a programming language! Automatically Generating the Back End of a Compiler Using Declar. Timber. Designing a language is hard, and M won't change that. Colm: Computer Language Manipulation. Self-esteem gone overboard: The perils of a global namespace. The BitC Programming Language. ChucK - [Language Specification] The Droscript Specification. Cecil language. The Nice programming language.

To build a programming language. Concepts. Requirements for a restricted execution runtime. K - FSL.