Ikon (programmeringsspråk)

ikon
Semantik multiparadigm : imperativ , logisk
Språkklass programmeringsspråk
Utförandetyp tolk
Framträdde i 1974
Författare Ralph E. Griswold
Släpp
Typ system dynamisk
Stora implementeringar Ikon, Jcon, Unicon
Blivit påverkad Snobol , Algol
påverkas Pytonorm
Hemsida cs.arizona.edu/icon
ikon

WinIcon v.9.3.2 skärmdump som kör VQUEENS.ICN exempel, en del av IPL.
Sorts Översättare
Utvecklaren Ralph E. Griswold , Gregg Townsend
Operativ system Unix ( Linux- och BSD - byggnader testas ), MacOS och Microsoft Windows med Cygwin
Första upplagan 1977
senaste versionen 9.5.1 ( 6 juni 2013 )
Licens GNU GPL
Hemsida cs.arizona.edu/icon/
Unicon

Skärmbild UniconIDE v.12.0.2
Sorts Översättare
Utvecklaren Clint Jeffery
Operativ system Linux och Microsoft Windows
Första upplagan 1977
senaste versionen 12.1.0 [3] ( 27 augusti 2012 )
Licens GNU GPL
Hemsida unicon.sf.net

Icon  är ett programmeringsspråk som ärvde ideologin från ett tidigare språk av samma författare, Snobol . Språkets namn har inget med "ikoner" att göra utan är en förkortning för ordet engelska.  ikonoklastisk (ikonoklastisk), används i betydelsen att bekämpa konformism i utvecklingen av programmeringsspråk.

Det är ett programmeringsspråk på superhög nivå som integrerar mönstermatchning och backtracking , vilket för det närmare logiska programmeringsspråk .

Språket är dynamiskt skrivet och har inbyggda kraftfulla datatyper. Procedurer i Icon är förstklassiga värden , vilket innebär att variabler kan tilldelas värdena för själva procedurerna och inte resultatet av deras exekvering .  Det finns en samuttrycksmekanism som låter dig skapa koroutiner .  

Grundläggande syntax

Icons syntax ärvs från Algol -familjen av programmeringsspråk och liknar syntaxen för C eller Pascal . Icon är mer lik Pascal, den använder tecknet :=, nyckelordet procedureetc. för uppgiften. Icon, å andra sidan, använder C-liknande hängslen för att gruppera språkpåståenden, och programmet börjar med en procedur som kallas "main".

Procedurer är den grundläggande byggstenen i Icon-program, men till skillnad från Pascal-procedurer kan de (som C- och Pascal-funktioner) returnera värden; det finns inget nyckelord functioni Icon.

procedure doSomething(aString) write(aString) end

Målmedvetet utförande

Vilken mening som helst (operatör) av ikonspråket är faktiskt ett uttryck och kan returnera värden. Uttryck i Icon, förutom deras faktiska returvärden, som kan vara valfritt antal, producerar ett av två tillstånd - framgång Eng.  framgång eller misslyckande engl.  misslyckande . Framgången eller misslyckandet för uttryck används istället för booleska värden av Icon-kontrollstrukturerna. Tack vare detta kan vi skriva konstruktioner som:

if a := read() then write(a)

Dessutom, eftersom det "misslyckade" tillståndet tenderar att bubbla upp från kapslade funktionsanrop som ett resultat av en yttre funktion, kan även kortare idiom användas, såsom:

while write(read())

för att läsa ingångsströmmen och duplicera den till utströmmen (eko).

Jämförelseoperationer som >och <kan lyckas och producera ett resultat som är lika med värdet av deras andra argument, eller misslyckas och ger inget resultat. Tack vare detta kan uttryck som if a < b < c then… skrivas i Icon.

Konceptet förknippat med framgång och misslyckande kallas målmedvetet utförande i Icon .  målstyrt utförande . Det är ett sätt på vilket en beräkning kan fortsätta tills ett visst mål uppnås. I ekoexemplet ovan är målet att läsa hela innehållet i indatafilen tills slutet av filen påträffas. Målet sätts direkt, inte med ytterligare kontroller för returkoder eller liknande. Målmedveten beräkning implementeras med hjälp av backtracking , vilket är en mycket kraftfull mekanism.

Generatorer

En stor innovation av språket är generatorer som generaliserar mekanismen för iteratorer [4] . Det var från ikon som idén om generatorer hittade sin väg in i språk som Python [5] .

Thomas W. Christopher, författare till Icon Programming Language Handbook skriver, "Den största skillnaden mellan Icon och andra programmeringsspråk är att uttryck i Icon är generatorer."

Ett exempel på användning av en generator:

procedure main() L:=["1","22","333"] # Lista över strängar varje skriver(" ",! L) slutet ---- Resultat: 1 22 333

Inflytande på efterföljande språk

Språken Icon och Snoball fungerade som ett slags testområde för vissa programmeringsspråk , särskilt för konstruktioner som innehåller &&eller ||och det första språket som använder reguljära uttryck (om än i en annan form än den nuvarande). Därefter användes dessa mekanismer i Unix- miljön, i C , AWK och Perl-språken .

Här är ett exempel på ett sådant idiom:

[ $ringer != 0 ]&&echo Telefonen ringer!!!

Ett annat exempel, låt oss ha en skalkonstruktion :

xview -root ` gtk-shell -t "Vilken bild?" -fs` _

Även om du inte väljer ett namn för bildfilen kommer xview fortfarande att köras. Och på Icon-språket skulle detta aldrig hända.

Reguljära uttrycksanaloger är en del av själva språket, vilket tillåter användning av textbehandlingssystem med obegränsad komplexitet.

Språkets flexibilitet gör att du kan spela in ett mycket stort antal handlingar utan att försämra textens läsbarhet .

Implementering och dialekter

Författarens implementering av Icon, skriven vid University of Arizona (den så kallade Arizona-ikonen ) distribueras under GNU GPL-licensen .

Icon 9.3 (den senaste versionen som har inbyggt Windows- stöd ) implementerades som en kompilator till bytekod, och genererade en körbar fil som innehåller en tolk för den bytekoden. Sedan version 9.4 har Arizona Icon implementerats som ett klassiskt Unix -skriptspråk .

Efter språkförfattarens död frystes utvecklingen av den klassiska Arizona-ikonen under lång tid, den näst sista versionen av Icon v.9.4.3 släpptes den 14 november 2005 , men nu har dess stöd återupptagits av hans elev Greg Townsend. Den 12 april 2010 släpptes en ny version av översättaren.

En aktivt utvecklande gren av Icon är språket Unicon , vars översättare är baserad på dess kod och även distribueras under GNU GPL-licensen . Det är en objektorienterad dialekt av språket, med förbättrad integration med OS - miljön , inklusive till exempel stöd för interaktion med databasen . I likhet med icon v.9.3 är Unicon en kompilator inriktad på att generera körbara filer.

ObjectIcon-dialekten fortsätter att utvecklas, baserad på tidigare versioner av Unicon och är en gaffel av den senare. ObjectIcon, som namnet antyder, är en utökad objektorienterad version av Icon, i synnerhet, till skillnad från Unicon, har ObjectIcon metodåtkomstfältsmodifierare. I ObjectIcon har sammansättningen av bibliotek ändrats kraftigt (de flesta av IPL har omarbetats kraftigt - vissa moduler har tagits bort, grafikbibliotek har ändrats helt.), Unicode-stöd har lagts till, namnutrymmesstöd har lagts till, multipelt arv och automatisk initialisering av konstanter och variabler har lagts till - och nu är det ett modernt och kraftfullt OOP-språk. Utvecklad av Robert Parlett och distribuerad under MIT -licensen. Tillgänglig för nedladdning på SourceForge och körs på Linux/Unix.

Efterkommande språk

Laurence Tratt, en av utvecklarna av Icon 9.5 och ObjectIcon, är också författare till det liknande designade språket Converge [6] .

2015 introducerade Greg Townsend språket Goaldi (från Goal Direction ). Det är ett objektorienterat språk implementerat i Go som ärver många av funktionerna i Icon. Den implementerar stängningar , parallell programmering , namnutrymmesstöd och Unicode-hantering . Samtidigt saknar den sådana ikoniska funktioner som att skanna strängar som en grundläggande språkoperation (istället använder den jämförelse på funktionsnivå med reguljära reguljära uttryck ) och relaterade datatyper som teckenuppsättningar, det finns ingen godtycklig precisionsaritmetik, och fel är inte omvandlas till backtracking-hanterade misslyckanden utan hanteras av undantagsmekanismen [7] .

Litteratur

Anteckningar

  1. https://www2.cs.arizona.edu/icon/v95u.htm
  2. 1 2 https://github.com/gtownsend/icon/releases
  3. Unicon Sourceforge . Hämtad 26 mars 2013. Arkiverad från originalet 10 september 2012.
  4. Michael Lee Scott. 6.5.4. Generatorer i ikon // Pragmatik för programmeringsspråk . - III ed .. - Morgan Kaufmann, 2009. - S.  268 . — 941 sid. — ISBN 9780080922997 .
  5. Steve Holden, David M. Beazley. app. 2. Ändra sedan Python 2.0 // Python Web Programming. - Sams Publishing, 2002. - S. 612. - 691 sid. — ISBN 9780735710900 .
  6. Laurence Tratt. Erfarenheter med ett ikonliknande uttrycksutvärderingssystem  // Proceedings of the 6th Symposium on Dynamic Languages. — New York, NY, USA: ACM, 2010-01-01. — S. 73–80 . — ISBN 9781450304054 . - doi : 10.1145/1869631.1869640 . Arkiverad från originalet den 14 augusti 2016.
  7. Goaldi-projektGitHub

Länkar

Dialekter och distributioner