Чтобы добавлять сообщения и комментарии, .

@OCTAGRAM:
OCTAGRAM

Untangling the Tale of Ada Lovelace
В сознании простого русского человека претензии «элиты» на «элитарность» всегда комичны. Как ни станет кто элитой, так это надо на газенвагенах, ой, то есть, я хотел написать, на гелендвагенах покататься. В царские времена — крепостных понасиловать и прочее, что там вытворяли те, кто стал прообразом Троекурова. Сейчас вот имеем неудовольствие посмотреть, как отдохнула природа на детях Гайдара, Михалкова, Райкина. Каждый раз, как включались социальные лифты, когда всю страну пылесосили, так имели рывок вперёд, а как возвращались в родоплеменной строй, так деградировали.

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

@OCTAGRAM:
OCTAGRAM

Забубенил себе на форуме новую шапку. Для БлэкБокса чёт не смог найти вменяемого качества картинку

@OCTAGRAM:
OCTAGRAM

Мучился когда–то с определением языка программирования в дипломе. Стыренное из википедии определение без указания авторства благополучно совпало с чьим–то дипломом и дало пару процентов неоригинальности. Пришлось искать другое определение, где бы можно было найти первоисточник.

А меж тем, оказывается, целый ГОСТ есть, ГОСТ 28397-89 (ИСО 2382-15-85). «Язык, предназначенный для представления программ.»

Нашёл ещё ГОСТов на языки программирования:
ГОСТ 21551-76 Язык программирования АЛГАМС
ГОСТ 22558-89 Язык программирования Кобол
ГОСТ 23056-78 Язык программирования Фортран
ГОСТ 23057-78 Язык программирования Базисный Фортран
ГОСТ 27787-88 Язык программирования БЕЙСИК
ГОСТ 27974-88 Язык программирования АЛГОЛ 68
ГОСТ 27975-88 Язык программирования АЛГОЛ 68 расширенный
ГОСТ 27831-88 Язык программирования АДА
ГОСТ 28140-89 Язык программирования ПАСКАЛЬ

Я раньше знал, что стандарт на Аду 83 перевели на русский, но я не знал, что это было для ГОСТ и стало таковым. И действует.
Нашёл ещё такое: ГОСТ Р 34.1702.3-92 Связь ядра графической системы с языком программирования Ада.
Этакий unit Graph, но для Ады и по ГОСТу.

@OCTAGRAM:
OCTAGRAM

Обнаружил, что GNAT уже давно автоматически использует UTF-8 как однобайтовую кодировку, а не ANSI (управляется переменной среды GNAT_CODE_PAGE). В смысле, использует её для I/O, в частности, имён файлов, где и был камень преткновения, поскольку у таких модулей, как Ada.Directories, аргументы в однобайтовых String, а не двухбайтовых Wide_String или четырёхбайтовых Wide_Wide_String. Кодировка исходников управляется -gnatW, в юникодных кодировках можно давать идентификаторам имена не на латинице и писать строковые литералы, но такие литералы должны быть достаточно широкими, потому что String по стандарту жёстко Latin-1, а всё русское требует минимум Wide_String. Есть, правда, вариант, при котором компилятор думает, что он парсит исходник в Latin-1, а он — в UTF-8 или ANSI, но как–то это не правильно, мне кажется. Идентификаторы не получится юникодные написать, и широкие строковые литералы, наоборот, будут коцаться.
Восемь назад на Windows такие строки было особо некуда деть, кроме платформозависимого Win32Ada. Нет, можно, конечно, было подключить Ada.Wide_Wide_Text_IO и пошпарить Юникодом в тексте файла, но имя файла при этом будет ограничено ANSI. Эту дырку GNAT закрыл давно. Есть у процедур открытия файла строковый параметр Form, смысл которого по стандарту определяется компилятором, и в GNAT его можно было использовать для того, чтобы указать, что имя файла — в UTF-8, а не ANSI. Так что, сконвертировав имя файла в UTF-8, можно даже было и открыть его. А вот Ada.Directories было более проблемным, там никаких параметров Form не было, чтоб отказаться от этого проклятого ANSI. Понятно, что были и Матрёшки, где диктатура четырёхбайтовых строк, не дожидаясь, когда стандарт избавится от однобайтового наследия, но состояние стандартной библиотеки тоже важно.

Попутно, пока искал, поиск выдавал мне, как обстоят дела у других разработчиков
But the problem is MSVC only accept UTF8+BOM and MinGW only UTF8-BOM
note that MinGW use UTF-8 for sources, while VC8 use ANSI
Если этот «хорошо подходящий для Windows» компилятор до сих пор форсит ANSI в исходниках (кто будет ставить BOM для UTF-8?), сочувствую тем, кто вынужден этой пакостью пользоваться.

@OCTAGRAM:
OCTAGRAM

Что значит выпуск Юбилейного обновления Windows 10 для разработчиков

@OCTAGRAM:
OCTAGRAM

Было время, когда парился, а как же теоретически сделать так, чтобы сервак был на Аде, но чтоб перезагружать не надо было. Какие–нибудь перезагружаемые на горячую модули сделать. Сейчас, в глубокой практике, когда я даже померил на стрёмном железе, что перезагрузка длится 56 миллисекунд, всё это кажется таким неактуальным.

@OCTAGRAM:
OCTAGRAM

Началось соревнование «Make with Ada» для разработчиков встраиваемых систем
AdaCore организует новый конкурс для разработчиков. Как и в прошлые разы, на подготовку даётся существенно больше времени, чем в олимпиадах по иноформатике. Это как раз подходит тем, кому не нравятся соревнования по быстрому написанию страшного кода, который потом только выбросить.

Сегодня на повестке дня — разработка для ARM на голом железе и технологии верификации. Общий призовой фонд — более 8000€.

makewithada.org

Как бы отвечая на напрашивающийся вопрос, — да, я уже посмотрел на логотип через анаглиф очки.

@OCTAGRAM:
OCTAGRAM

В погоне за любимым делом или как я оказался в Бельгии
У каждого из нас есть свои мечты, цели, увлечения (и есть работа). Иногда все эти вещи совпадают, иногда сосуществуют, и иногда и вовсе расходятся. Мне очень повезло и, по сути, я смог объединить их и найти работу своей мечты, которая прекрасно сочетала в себе мечты и увлечения.[…]
В какой-то момент меня осенило — но ведь программное обеспечение для авиации тоже пишут и делают обычные люди, не Боги же горшки обжигают, а какой самый «авиационный» язык программирования? Правильно, Ада! Аду я к тому времени уже худо-бедно знал — сосед по квартире расхваливал мне этот «прекрасный язык без переполнений буфера» и постепенно я стал втягиваться в сообщество (да, сообщество есть, в том числе и в России)[…]
вполне себе используют Ada в разработке и даже периодически появляются вакансии; ну, в общем, с десяток компаний набиралось (на весь мир!). Возникла одна проблема — из России они брать не хотели (и, как будет видно дальше, дело вовсе не в визовых заморочках). И тут пришло решение столь популярное в последнее время — пора валить.
Когда–то тоже мечтал свалить из России именно ради работы своей мечты, в те годы проблемы типа ювенальной юстиции были за пределами моего кругозора. А сейчас вполне успешно уламываю заказчиков на фрилансе. Эх, знал бы прикуп.

Пока рейтинг низкий и заказы мелкие, всё было ожидаемо довольно жёстко, ни влево, ни вправо. Но когда прокачался и заказы относительно крупные, риски успеха повышенные, и вообще заказчик не уверен, возможно ли за относительно малые (для заказчика) деньги довести дело до конца, а ещё помогает, если заказчик сначала выбрал не меня, его кинули, и тут уже из тех других, кто подавал заявку, начинают выбирать, находят меня, смотрят послужной список, это всё действует убедительно. И, в принципе, я ведь и не лукавлю, когда оцениваю перспективы в доведении проекта до желаемого состояния работоспособности. Хоть и приходится конвертить заголовочные файлы от всяких libipset в адские привязки и оборачивать их потом в высокоуровневую обёртку, но когда это готово, при отладке всплывает не так уж много сюрпризов, обычно просто дурацкие ошибки, которые проявляются, где положено, а не при случайных обстоятельствах по всему коду.

И это даже лучше, чем если бы я нашёл вакансию адаиста. На обычной работе разработчика прикован к своему участку работы, есть риск, как у одного бывшего коллеги, стать хорошим специалистом в купюроприёмниках, но и только. А на фрилансе постоянно что–нибудь новое, интересное, и можно выбирать. Пока работаешь, развиваешься, наработки остаются на разные темы.

@OCTAGRAM:
OCTAGRAM

Конец адского мандата
Когда–то Ада была обязательна при выполнении проектов для минобороны США, ну а попутно это двигало смежные индустрии.

Это однозначно положительно сказывалось на качестве этих проектов, но вредило языку. Производители инструментария знали, что они могут сделать до некоторой степени любую фигню, и если она пройдёт тесты на сертификацию, то получит право на бренд «Ада», и огромной куче фирмёшек, работающих на оборонку, придётся приткнуться к одному из таких производителей. А производитель может однажды вложившись, снимать сливки, и адаистов такая ситуация напрягала. Например, первый транслятор Ada в машинные коды GNAT появился в результате гранта минобороны, а до этого делали интерпретатор байт–кода, и хватит. Это уже потом пошли ObjectAda, PowerAda, AdaMagic, Irvine, и мы сейчас знаем Ada только как язык, компилируемый в машинные коды (JVM и .NET не очень приживаются за ненадобностью).

Ну что ж, теперь в 2016м году плоды конкуренции в полной мере пожаты. Из реализаций современного стандарта остался только один, но качество инструментария и впрямь довольно неплохое. Я наблюдаю это с 2005го года, и вижу, как качество GPS неуклонно возрастало, переболев детскими болезнями.

Однако, додики, оставшись без законодательных ограничений, свалили с Ады и пишут всякие Flash runtime и CLR отнюдь не на Аде, и поэтому у них там баги без конца.

И непонятно, как бы это разрулить, чтоб всеобщее счастье было. Может, надо периодически вводить–снимать мандат, чтоб балансировать между плохими средствами разработки и плохим ПО.

@OCTAGRAM:
OCTAGRAM

Сегодня смог продолжить разбираться с libipset ( #2826442 ). Из спортивного интереса попытался обойтись без C, заюзать GCC'шные фичи через доступ к фичам GCC из GNAT. Так вот, эта штука успешно заимпортировалась:
procedure VA_Start (Arg_Ptr : in out System.Address; Prev_Param : System.Address);
pragma Import (Intrinsic, VA_Start, "__builtin_va_start");

Однако, при попытке ею воспользоваться из адской процедуры получается error: 'va_start' used in function with fixed args. Пытался полечить, добавив функции GCC'шный аттрибут. Атрибуты в GNAT можно навешивать через pragma Machine_Attribute, а сам список атрибутов можно посмотреть здесь. Там всякая всячина, но вот заставить функцию быть varargs там нету. Так что я в печали. То немногое из C, что недоступно в GNAT, всё–таки добралось до меня. Можно попробовать найти не–built-in версию va_start, в Delphi прокатывало, либо подключать libffi, заодно и трамплин будет, чем сделать.

@OCTAGRAM:
OCTAGRAM

What is Microsoft Project Centennial?
По слухам, только в конце 2016го года станет возможно писать под Metro на нормальных языках программирования.

According to a blog post by ZDNet’s Mary Jo Foley, the App-V client will be built-in to the Redstone 1 release of Windows 10, due sometime in the first half of 2016, and Redstone 2 looks set to include full support for Project Centennial apps, in fall 2016.

@OCTAGRAM:
OCTAGRAM

RT @Flyingmana:
В клиенте и сервере Git нашли удалённое выполнение кода
seclists.org

RT @andreasdotorg:
Сколько ещё таких уязвимостей нужно, чтобы люди перестали писать на Си?

Да, всяких там хаскеллистов и эрлангистов, у которых, чуть только понадобился натив, куда–то очень быстро улетучивается их прогрессивность, и они начинают писать нативный код на Си, а не на Аде, как положено, это тоже касается.

@OCTAGRAM:
OCTAGRAM

Genode as Desktop OS
Genode is a new operating-system architecture that promises to prevent most classes of security problems by design. Genode-based systems are created out of surprisingly simple primitives: Each program runs in a dedicated sandbox and gets granted only those rights and resources that are needed for its actual task. Programs can create and manage sub-sandboxes out of their own resources, thereby forming hierarchies where policies can be enforced at each level. Thanks to this rigid regime, the attack surface of security-critical functions can be reduced by orders of magnitude compared to contemporary operating systems.И эту штуку теперь портировали на адский, точнее, спарковский, Muen

@OCTAGRAM:
OCTAGRAM

Ada 202x уже в седьмом черновике

@OCTAGRAM:
OCTAGRAM

Средства разработки для ПЭВМ «Эльбрус 401‑PC»
Не меньший интерес из‑за своей экзотичности вызывает технология защищённого исполнения программ на языках C/C++, где использование указателей предоставляет обширный круг возможностей выстрелить себе в ногу. Концепция контекстной защиты, совместно реализуемая компилятором на этапе сборки и процессором на этапе выполнения, а также операционной системой в части управления памятью, не позволит нарушить область видимости переменных, — будь то обращение к закрытой переменной класса, частным данным другого модуля, локальным переменным вызывающей функции. Любые манипуляции с изменением уровня доступа допустимы только в сторону уменьшения прав. Блокируется сохранение ссылок на короткоживущие объекты в долгоживущих структурах. Предотвращаются также попытки использования зависших ссылок: если объект, на который некогда была получена ссылка, уже был удалён, то даже расположение другого, нового объекта по тому же адресу не будет считаться оправданием для доступа к его содержимому. Пресекаются поползновения использовать данные в качестве кода и передачи управления невесть куда.
Напоминает CHERI. Вот уж, где не ждал увидеть. И если CHERI/BERI — университетские прототипы, то Эльбрус всё же помассовее будет.
Интересно, а что, в МЦСТ и ядро Линукса заставили плясать под эту дудку? Или glibc. Там же наверняка куча кода не предусматривает такую работу.

интерпретаторы: erlang 15.b.1, gawk 4.0.2, lua 5.1.4, openjdk 1.6.0_27 (jvm 20.0‑b12), perl 5.16.3, php 5.4.11, python 2.7.3, slang 2.2.4, tcl 8.6.1;Зачёт.

Сеанс гадания на кофейной гуще за сим давайте закончим, пока не дофантазировались до совсем уж нелепых предположений. Будем надеяться, что однажды справочник команд и руководство по программированию и оптимизации станут достоянием общественности.
По уровню минимальности утечек информации наш МЦСТ прямо как Apple. Подумать только, сидят русские программисты и изучают русский же компьютер как шпионы какие–то. Ну и времена.

@OCTAGRAM:
OCTAGRAM

Репозитории Hacked Team
Оу, какая отличная реклама Ады!

@OCTAGRAM:
OCTAGRAM

Как пишут в IRC, FOSDEM состоялся. Жалко, что такие ништяки уже не в России и ещё не в Китае

@OCTAGRAM:
OCTAGRAM

Ada Generator
Чё–то тут мутят по поводу превращения адских пакетов в утилиты командной строки

@OCTAGRAM:
OCTAGRAM

Максим Резник, главный разработчик Gela похвастался в своём Google+, что реализовал инкрементальный лексический и синтаксический анализ по мотивам идей Тима Вагнера

Здорово, что у адаистов остаётся немного времени, свободного от выживания на территории бывшей Украины

@OCTAGRAM:
OCTAGRAM

AdaCore вышли на GitHub. Я про эти проекты даже и не знал.

@OCTAGRAM:
OCTAGRAM

out
Адаисты балуются с физикой и генетическими алгоритмами

@OCTAGRAM:
OCTAGRAM

parasail-programming-language.blogspot.ru
Развивается проект неспешно

@OCTAGRAM:
OCTAGRAM

Выполнил не так давно проект на Ada, теперь на Delphi пишу. Вот что чувствуется, так это то, что в Delphi тоже есть раннее объявление типов, но полностью объявлен тип должен быть в том же блоке type. Нельзя разорвать этот блок константами или процедурами. Приходится всё перетасовывать.
В Ada каждое объявление типа, подтипа, переменной или константы — отдельный элемент, там просто разрывать нечего.

@OCTAGRAM:
OCTAGRAM

Ada/Em — компилятор/интерпретатор на базе Ada/Ed
Ada/Ed — это компилятор/интерпретатор Ada 83, самый первый, прошедший проверку на соответствие стандарту по тестам Ada Compiler Validation Suite на IBM PC. Так как это интерпретатор, а Ada мыслится как язык, прежде всего компилируемый в машинные коды, да и стандарт хотелось бы не меньше 95–го, то долгое время до него почти никому не было дела, и в июле 2012 его сорцы (на C) выложили в открытый доступ.
Предъистория вопроса: есть у нас доступный в куче браузеров и этим интересный JavaScript, но вот есть у него один большой недостаток: надо время от времени возвращать управление. Программисту, чтобы не свихнуться, проще писать в синхронном стиле, а браузер выполняет только асинхронный код. Это решается часто просто использованием CPS (continuation-passing style). Теоретически можно любую синхронную программу переделать в асинхронную с помощью CPS. Везде, где я смотрел, это сделано руками, как–то все уже попривыкли. Но есть и парсеры/трансляторы, такие, как Wind.js, которые автоматически могут разрезать синхронную программу по швам и превратить в асинхронную CPS–лапшу.
Далее, вот есть у нас Asm.js, чрезвычайно оптимизируемое подмножество JavaScript. Если браузер поддерживает Asm.js и распознал специально помеченный кусок JavaScript кода как соответствующий всем требованиям модуль Asm.js, то генерируется быстрый машинный код. Однако, при написании программ, транслируемых в быстрый машинный код, есть один недостаток. Да всё тот же. Необходимость время от времени возвращать управление на самый верх, к браузеру. Через стек функций, через обработчики исключений — на самый верх. И тоже есть автоматические способы разпилить программу по швам и превратить в лапшу, но не CPS. Wind.js тут сработает, но требования Asm.js будут нарушены применением CPS, зато для Asm.js есть свой аналог: asincify. На его странице так и написано:
Другие возможные реализации
Closures (ломают asm.js)
Далее, читаем сравнение с asincify на странице emterpreter:
ASYNCIFY has a bad worst-case of large code size: If it needs to modify many methods, it can grow code size very significantly (even 10x more was seen).То есть, подход asyncify может настолько значительно раздувать код, что становится оправданным применение интерпретатора emterpreter.
Далее, читаем статью Почему мобильные web–приложения медленные. Одна из главных идей — не пользоваться сборщиком мусора, особенно в мобильных приложениях. Применительно к JavaScript это значит — применять Asm.js, а не обычный JavaScript, который безальтернативно со сборщиком мусора.
Вот именно такого сравнения не видел, но, когда смотрю на графики в статье, напрашивается предположение, что код, работающий на интерпретаторе в Asm.js, может работать даже быстрее, чем его CPS–аналог на JavaScript, за счёт того, что не вызывает сборку мусора так часто.
И в этот момент мы вспоминаем, что старый забытый Ada/Ed как раз уже устроен таким способом, который, так уж вышло, наилучший для браузеров. Написан на C, интерпретируемый. Так как в MS-DOS не было потоков операционной системы, Ada/Ed приходится содержать в своём составе многозадачный планировщик. В #2785610 я всё думал, где бы мне многозадачный планировщик для Asm.js взять. Вот, нашёл!
Так что берём Ada/Ed, компилируем его интерпретатор или даже компилятор emscripten, и вот она — радость! Пишем код для браузера в синхронном стиле, не сходим с ума от CPS–лапши, и с учётом архитектуры браузеров, работает это наилучшим образом, даже на мобильных устройствах. Для полного счастья нам понадобится мост между emterpreter и интерпретатором Ada/Ed. А то, что получилось, так и напрашивается быть названным Ada/Em.

@OCTAGRAM:
OCTAGRAM

А Twitter–mode, я так посмотрю, в GNAT GPL 2015 так и остался:
Default_Exception_Msg_Max_Length : constant := 200;

Ни на сколечко не больше, чем минимально требует стандарт

@OCTAGRAM:
OCTAGRAM

Давно не было новостей в блоге про ParaSail. За лето–то могли бы взять интерна. Хотя может и взяли. В прошлый раз интерн сделал компиляцию в LLVM, а написали про неё только в январе.

@OCTAGRAM:
OCTAGRAM

На irc.gnu.org (FreeNode) #ada химичат с чатом по GIOP'у. Один выставил порт на весь Интернет, другие цепляются и пишут

@OCTAGRAM:
OCTAGRAM

Типичная ситуация, когда пишут большой проект не на Аде

@OCTAGRAM:
OCTAGRAM

Project Centennial: Converting your Normal Windows App (Ada, Delphi, SOM) to a Metro Windows App for Distribution in the Windows Store
В Microsoft наконец зачесались, а чёй–то так мало приложений под Metro, наверное, средства разработки были трешовые, значит, надо дать возможность нормальными средствами разработки делать приложения для Metro

@OCTAGRAM:
OCTAGRAM

19.11.39 — antranigv: excuse me for this dumb question, but, how do I use gnat?
19.14.56 — specing: antranigv: you need: 1. candles 2. pentagram 3. black robe 4. ...
19.15.11 — antranigv: lol

@OCTAGRAM:
OCTAGRAM

Farewell Robert...
It fills me with with great sadness to announce that Robert Dewar passed away yesterday at home, surrounded by his family. His passion for Ada and software engineering, which was the driving force behind the GNAT compiler, was no more evident than in his discussions with customers, on community forums, with his students at NYU, and in the presentations he gave at numerous conferences. He will leave a big, big hole in many peoples' lives not least here at AdaCore. RIP Robert and thank you for everything.

@OCTAGRAM:
OCTAGRAM

libre.adacore.com
Ну вот и GNAT GPL 2015! Микроконтроллёрные платформы стали поразнообразнее
youtube.com

@OCTAGRAM:
OCTAGRAM

forge.open-do.org
Недавно заметил, что там уже лежит в сорцах LLVM компилятор ParaSail. Точнее, он перегоняет байткод в инструкции LLVM, а байткод генерят компиляторы всех 4х экспериментальных языков, то есть, и Sparkel (Ада–подобный), и Parython (Python–подобный), и Javallel (Java–подобный), и ParaSail, который помесь всех трёх.
Однако, вчитавшись в последние посты по сабжу, увидел такое:
parasail-programming-language.blogspot.ru
At first we thought the built-ins needed to be translated to llvm code to successfully link with our generated llvm. To accomplish this, we used a tool called AdaMagic to convert the Ada source code (in which the built-ins are currently written) and Ada's run time system (RTS) to C source code then used the llvm C front-end "clang" to compile the rest of the way. Clang complained with hundreds of warnings, but, it worked. We were able to print integers, floats, and characters! We couldn't do much more with the built-ins at the time because we didn't yet have type descriptors working (see below).

After all the effort and dealing with the messy generated C code, we found out that the system linker could link object files compiled with the llvm backend called "llc" together with object files produced by the GNAT Ada compiler with no problem. That was a relief, as we really didn't want to go mucking around in the generated C code more than we had to.
Я–то хотел попускать зелёные потоки в web, да ещё в asm.js. А теперь вижу, что сами зелёные потоки скомпилировать в Asm.JS можно, а библиотеку времени выполнения — нет. Впрочем, подумав ещё немного, решил, что оно и не нужно. Поток там, считай, один, это уже немного менять рантайм. Ну или, если с WebWorkers, то, наверное, можно больше потоков, но тогда будет нужна коммуникация, которой в библиотеке для натива всё равно нет.

Наверное, если бы я этим занимался, я бы как–нибудь вообще обошёлся без LLVM, с одним только интерпретатором, зато прикрутил бы стандартный сетевой стек, JSON и XML, и портанул бы мои сетевые быдлоскрипты с node.js на нечто более человеческое и привычное. А если, так уж получилось, есть компиляция в LLVM, то всё это надо двинуть в UI и наладить взаимодействие между зелёными потоками клиентов и сервера. Есть предположение, что AdaCore не хотят пускать язык в массы пока он не устаканился, а создание компилятора в натив — это один из тестов, по результатам которого в языке могут что–то поменять.

@OCTAGRAM:
OCTAGRAM

godunko: Первый эксперимент по использованию транслятора Ada в JavaScript дал положительные результаты.
godunko: dom.ada-ru.org
godunko: Щелкнуть на "Стена", потом щелкать на поле с точечками.
godunko: Отрисовка выполняется JS кодом с помощью WebGL,. а вот внутренние структуры данных и расчёты границ при сопряжении стен выполнены на Ada.

@OCTAGRAM:
OCTAGRAM

cafepress.com
Теперь можно купить атрибутику с талисманом языка Ада.
I'm surprised how many sales went through already. I guess the Ada Mascot idea was better than I thought :)

@OCTAGRAM:
OCTAGRAM

gnoga.com
Победитель конкурса на лучший символ–талисман для языка Ada #2751624 получил приз в 700 USD.
linkedin.com
I am happy to announce the winner of the Ada Mascot Competition — Entry #5 — "Lady Fairy" the hummingbird. The mascot was designed by Leah Goodreau.

gnoga.com

Leah writes "My mascot was inspired by Ada Lovelace's adolescent fascination with flight and Charles Babbage's nickname for her, "Lady Fairy." The coloration of the mascot references the Asian fairy-bluebird, while the silhouette is a hummingbird because of their famed speed and sleekness."

@OCTAGRAM:
OCTAGRAM

bitbucket.org

Году так в 2009м исходя из той картины мира, которой я тогда руководствовался, я считал, что на языке Ада будет здорово писать, если будет полное WinAPI, чтоб и ACL поманипулировать, и оконными сессиями, и в пространство объектов NT забраться можно было. Win32Ada оставляли желать лучшего по охвату современного API. Делать я это намеревался не через сишные заголовки, в которых часть метаинформации безнадёжно потеряна, а вкрутив мозги джедаям. То есть, есть группа JEDI, которая делает неплохие привязки, но вот одна проблема, они это делают для Delphi, а не для Ada. Так как языки похожи, неплохо бы одно в другое сконвертировать, причём, по возможности, автоматом, и не AST в AST, а текст в текст.

Поначалу я пытался наладить конвертацию на препроцессоре GEMA, даже получилось, но это было явно больше, чем на что был расчитан GEMA, да и писать тяжело. Чем более зрелую реализацию пытаешься сделать, тем в большее количество ограничений упираешься. Для тех, кто не знает, там какое–то продвинутое программирование начинает становиться похожим на продвинутое программирование в bash. То есть, мы не можем сделать переменную x ассоциативным массивом, зато можем понаплодить переменных x[*], и работать дальше как будто у нас есть ассоциативный массив.

Решил поискать альтернативу. Смотрел в сторону GPP. Смотрел в сторону Refal. Как остановился на Icon, уже точно и не помню. Примерные соображения таковы, что когда–то раньше мне было интересно, чтобы «for а := 1 to 3 do B;» было не единым узлом синтаксического дерева, а чтоб 1 to 3 сам по себе что–то значил, присваивание было бы таким же присваиванием, как и в других местах, и for мог перебирать не только это, но и другие выражения, и как–то так получилось, что такой язык действительно есть, и так как он по описанию хорошо подходит для обработки текста, и в нём есть backtracking, его и решил взять. Так я и начал писать на Icon. Начало не из лёгких. Одно дело переписать что–нибудь с одного императивного языка на другой (а на Icon можно писать в императивном стиле). Другое дело — нужно было переписать шаблоны. На GEMA уже кое–что было написано, упирающееся в ограничения GEMA, надо было разобраться в Icon и переписать на него. Долго мучился, пока не начал думать «в две стороны». В Icon каждое выражение — это генератор, и функции — это тоже генератор, и особенно важно научиться писать функции, которые не обычные функции, как в императивном языке программирования, а пробуют распознать текст по шаблону и переписать в другой текст, и сами при этом такие же, как они, преобразователи для своей работы используют. Чтобы их писать, надо думать в две стороны: что случится, если выполнение идёт вперёд, и что случится, если начнётся откат.

Переписал. И пошёл дальше этим путём, насколько смог. Времена у меня были не из лёгких, 2005-2010 года самые паршивые в жизни получились, да и сейчас до сих пор не сахар. Довёл до такого состояния:

bitbucket.org
bitbucket.org

У меня на сайте написано:
Хочу как вот этот парень (Л. Поттеринг), и есть идеи, чем бы я мог заняться, а получается так, что мой поезд жизни едет и едет по своим рельсам, а мне только и остаётся, что жадно смотреть в окно.
Это как раз тот случай. «Посмотрел в окно» — и дальше по своим рельсам. Специальность у меня приборостроитель, диплом придётся на левую тему делать, совместить образование с учёбой в очередной раз не получается. Сейчас бы я, впрочем, за кое–что другое взялся.

Когда я пишу про то, чтобы взять Cocoa и GNUStep и сделать мост в SOM, а потом, может быть, и сам GNUStep переделать, это для меня выглядит вполне посильно. Есть BridgeSupport XML, есть опыт преобразования текст=>текст (в том числе #1435793). Самые разые способы достигать этих целей.

@OCTAGRAM:
OCTAGRAM

Есть в Delphi и Ada приятная плюшка, собирать несколько пакетов в динамические библиотеки для совместного использования (.bpl в Delphi). Приятно это тем, что всё прозрачно. Вчера собирал всё статически, завтра решил, что вот этот, этот и вот этот пакеты должны быть отдельно в другой динамической библиотеке, и это вынесение происходит без лишних изменений кода. Не приходится вставлять макросы типа «если объект динамической компоновки в этом проходе такой–то, то экспортируем эту функцию, иначе импортируем её». Но вот есть ещё SOM, который решает проблему хрупкого базового класса и другие аналогичные проблемы, которые возникают хоть в C++ библиотеках, хоть в .bpl, они в этом плане не отличаются. Если делать SOM эмиттеры для Delphi и Ada, лучше с самого начала предусмотреть ситуацию, когда .bpl и SOM .dll применяются одновременно, так как хрупкость .bpl может нивелировать преимущества SOM. То есть, допустим, реализован у нас какой–то SOM класс в каком–то юните, который попал в какой–то .bpl и оттуда переэкспортируется в .dll, откуда может быть использован SOM потребителями. А юниты, соседствующие с юнитом SOM класса внутри .bpl, конечно, будут искать структуры ClassData не через .dll, а обращаться напрямую в юнит. Кроме того, так могут поступать и юниты из соседних .bpl. И тут может быть такая проблема, что интерфейс SOM класса мы поменяли, и SOM это изменение поддерживает, вот только интерфейс .bpl изменился, и это изменение может сломать весь код, который ходил в структуры ClassData через .bpl в обход SOM. С другой стороны, если попытаться это исправить наивным способом, то даже .bpl будет ходить в свой собственный класс через .dll, что не должно происходить. Пока я решение вижу в том, чтобы отрезать все меж–.bpl'ные связи между компонентами, которые собираются независимо. То есть, если у нас скрипт собирает 3 .bpl синхронно, между ними связь разрешена, иначе нужно ходить через .dll. Теперь надо подумать, как это лучше сделать. В реализации CORBA для Delphi, например, делается три разных юнита с разными суффиксами для каждого класса, один для импорта, второй для экспорта, и ещё третий для чего–то. Но CORBA клиент и сервер обычно живут в разных процессах, а SOM — это внутрипроцессная CORBA. В моём случае юнитов, импортирующих одно и то же, будет столько же, сколько и независимо собираемых компонентов. Вплоть до того, что у каждого, получается, должно быть своё видение SOM API. Либо будет NoBPL версия, которую нельзя заворачивать в .bpl, а для .bpl нужно автоматизировать клонирование импортирующих юнитов в другое пространство имён. То есть из SOM.pas делается Baz.SOM.pas, из SOM.ClassManager.pas делается Baz.SOM.ClassManager.pas, и uses у них внутри переписываются. Либо надо посмотреть, можно ли включить юнит внутрь .bpl, но чтоб он наружу не светился, тогда этого делать не придётся. У всех независимо собираемых компонент будет свой взгляд на мир за счёт статического включения импортирующих юнитов, но не придётся называть эти юниты по–разному.

@OCTAGRAM:
OCTAGRAM

octagram.name

Оказывается, SOM эмиттер для Ada уже был!

web.archive.org
sci-hub.org

В ответ на мою просьбу мне пришёл ответ от OC Systems:

We haven't done anything with this in a very long time, but you're welcome to look at what we have:

ocsystems.com

Of course we offer it as-is, with no guarantee that it's good for anything.

Note that there are copyrights in some of the files that you must consider.

@OCTAGRAM:
OCTAGRAM

gnoga.com

250 USD тому, кто придумает и нарисует лучший талисман для языка Ада.

linkedin.com