Friday, January 27, 2017

Язык программирования Flamberg

Flamberg - это компилируемый в машинный код строго типизированный императивный язык программирования. Его модель памяти, владения и управления временем жизни не использует сборщик мусора. В общем, он в одной нише с Си, С++ и Rust.

Примеры

Hello world
Куда же без него:
"Hello world"
Более сложный пример - сделать запрос в mysql и вывести результат в консоль
mySql.connect dbName user password
..query "
     select name, id
     from users
     limit 100, {request.page}
..map: u "
     <li id="u_{u.id}">
         {u.name}
     </li>
..echo

Или инвертировать старший бит в памяти по адресу 0x12345
+unsafe
ptr(0x12345).byte ^= 0x80
Или сделать графическую сцену приложения и нарисовать ее на экране
+canvas

; определим классы
Circle = : x y r color #
   paint: canv
      canv.fillEllipse x-r  y-r  x+r  y+r  color

Rectangle = : x y w h color #
   paint: canv
      canv.fillRect x y x+w y+h color

Group = x y items #
   paint: canv
       canv.translate x y
       for items: i
           i.paint canv
       canv.translate -x -y

; создадим объекты
root = Group 10 10 []
   Circle 100 100 40 color.red
   Group 100 100 []
      Rectangle 5 5 20 40 color.black
      Circle 20 20 20 color.red

root.paint desktopWindow.canvas

Вначале пара слов о названии.

Фламбергом называется меч или шпага с волнистым (огненным) лезвием.
Утонченное эффективное оружие средневековья и нового времени.
Вначале запрещенное католической церковью а ныне ставшее церемониальным оружием ватиканской гвардии.
Меч фламберг мог прорубить рыцарский доспех.
Фламберги наносили страшные незаживающие раны и считались крайне негуманным оружием.
Итак фламберг - элегантное и жестокое оружие былых времен.
В далекой-далекой галактике фламбергом вооружен Кайло Рен.

Язык программирования. Што, опять?

Новый язык программирования появляется каждый второй день. И каждый новый язык приносит какие-то новые фишки и идеи.
Я решил построить новый язык не на добавлении новых фич, а на максимальном сокращении количества концепций. Пока удается обойтись пятью базовыми строительными блоками:
  • именование элементов и обращение к элементу по имени
  • определение и вызов функции-замыканий
  • атомы и диспетчеризация
  • модули и импорт
  • строгая типизация и приведение типа по образцу
Через эти пять концепций определяются управляющие конструкции, вложенные области видимости, все виды переменных и ссылок, структуры данных, классы и интерфейсы.
Но обо всем этом по порядку в следующих постах.

В каком состоянии проект

Дизайн языка в общих чертах закончен.
Начата разработка компилятора.
В следующих постах будет освещаться прогресс работы и основные концепции языка.

Еще пара примеров

; fizz-buzz

for 0..101: i
   echo
      if i%3:
         if i%5 :i.toString :"buzz"
      else:
         if i%5 :"fizz"     :"fizzbuzz"
;
; parse text file, filter its content, order by rules and format output as xml
;
inputFile "text.txt"
..readLines
..map: line
    name = line.getTill "|"
    age =  line.getInt
    ##
..filter: r  r.age > 30
..orderBy: r r.name
..map: r "
   <tr>
      <th>{r.name}</th>
      <td>{r.age}</td>
   </tr>
..echo

No comments:

Post a Comment