to post messages and comments.

← All posts tagged llvm

Об исключенных командах или за что «списали» инструкцию INTO?
Любопытно было почитать материал от разработчика компилятора, способного выжимать из процессора максимум. Ещё @Tajunu писал про ущербность LLVM по сравнению с TenDRA, но так, достаточно поверхностно, а тут — от того, кто реально в теме.

Ну и интересно было узнать, что это не чисто случайно под Аду подходит, а под PL/1 делалось, а Ада попутно получилась, как тоже нормальный язык программирования.

Экспериментирую с AdaMagic и emcc. За основу взят rtl.windows. Все скомпилированные файлы пришлось выкинуть, так как это не LLVM биткод. Настроил в %ADA_MAGIC%\SITE\config по аналогии:
be_exec_name = C:\Program Files\Emscripten\emscripten\1.35.0\emcc
linker_exec_name = C:\Program Files\Emscripten\emscripten\1.35.0\emcc
Выкинуть пришлось
be_required_flag = -mno-cygwin
linker_required_flag = -mno-cygwin

Перекомпиляция адского RTL запускается так:
cd C:\GNAT\AdaMagic-2016-07-22\AdaMagic\windows\rtl.emscripten
adacgen -ke -ga src\.bdy src\.spc
del *.tmp.bc

Результаты:
Total: 325 files compiled. 287 successful, 38 unsuccessful.
Те, что unsuccessful, содержат всякие платформозависимые штучки, их портировать надо вручную или обойтись без них. И ещё там есть несколько чисто сишных исходников. Надо ещё с этим поэкспериментировать. Может, за основу лучше rtl.linux взять? В Linux вместо kernel32 glibc, а в emscripten, предположительно, для libc аналоги функций будет проще найти, чем для kernel32.

Я как–то проводил инвентаризацию, как бы теоретически можно было писать под Cocoa для Windows:
1. Реализация Cocoa берётся из iTunesInstaller.exe
2. Компилятор либо LLVM, либо LLVM в роли ObjC => C транслятора, затем другим транслятором
3. Оставались только заголовочные файлы, которые, наверное, надо брать из XCode, вот только какой версии, не очень было понятно. Учитывая, как реализована совместимость на уровне машинных кодов в Objective-C, в принципе, можно брать самую новую и просто не использовать слишком новые методы.
Нашёл время провести более детальный анализ того, что же именно содержит Apple Application Support. Во–первых, собственно Objective-C портированных библиотеки там 2: Foundation.dll и CoreFoundation.dll. В закрытых версиях Apple есть несколько типов CoreFoundation, которые без конвертации можно привести к указателю на Objective-C (toll-free bridging). Похоже, что это оно. Если поставить iCloud, там ещё можно отрыть AOSKit.dll, экспортирующий какие–то Objective-C классы. Никаких AppKit нет.
Что касается версии, я немного позанимался дихотомией и пришёл к выводу, что Apple Application Support из iTunes примерно соответствует версиям Lion/Mountain Leopard. Если скачать с сайта ADC xcode462_cltools_10_76938260a.dmg, он же Command Line Tools (OS X Lion) for Xcode — April 2013.dmg, достать оттуда 7-zip'ом Foundation.h и взять этот же файл из command_line_tools_for_osx_mountain_lion_april_2014.dmg, то видно, что, например, добавился #import <Foundation/NSHashTable.h>, и я вижу OBJC_CLASS_$_NSHashTable в Foundation.dll, и для некоторых других новых классов тоже, но не всех. А из Maverick (commandlinetoolsosx10.9forxcode6.2.dmg) я ничего добавленного уже не вижу.
Все остальные библиотеки реализованы более менее без Objective-C. Несколько библиотек, вижу, импортируют несколько вызовов objc.dll, но, похоже, только лишь для того, чтобы поработать с blocks и libdispatch.dll.
Таким образом, реально из iTunes можно взять:
1. Коллекции и связанные с ними Property List сериализаторы
2. Quartz (CoreGraphics), которым, в частности, можно рисовать текст нормально, как на Mac OS X, без радужного замыливания
3. «Официальный» порт libdispatch
Может, ещё какие не–Objective-C библиотеки, коих там куча.
AppKit, видимо, только через GNUStep, Cocotron или YellowBox. Свои интерфейсы Safari и iTunes, видимо, как–то через C'шные библиотеки отрисовывают поверх C'шного Quartz.

В отсутствие AppKit самое интересное (для меня) остаётся в libdispatch. И libdispatch, и libuv решают похожие задачи, но кто из них лучше? У libdispatch на Windows, кроме «официального» порта есть два неофициальных, и неплохо бы было, чтобы кто–нибудь посравнивал их между собой на предмет проблемы C10k.

parasail-programming-language.blogspot.ru
С июля давно новостей не было, я уж думал, после слияния с AdaCore проект утонул. Как–никак, исследовательский. Ан нет, работа продолжается. С виртуальной машины переносят на нативный компилятор на базе LLVM.
Проект пока ещё не зрелый. Я пытался применить вместо node.js+Wind.js, но сразу наткнулся на то, что нет зелёнопоточной сети и работы с XML, а самому делать некогда было.