Архитектуру нужно открывать, систему команд, исходники компилятора под него. Лично мне это единственное что интересно — чисто эстетически, посмотреть как у них устроены команды, ведь это нечто непохожее ни на x86/x64, ни на ARM.
Я правильно понимаю, что это то же самое что делает одна единственная ассемблерная инструкция BSF (Bit Scan Forward)?
PS Вообще жалко что эти команды, как и битовые вращения, не вывели в операции языка C/C++ — они были бы более известны, как сдвиги например:) Для битовых сканирований можно было бы применить например унарные << и >>, для вращений бинарные <<< и >>>. Еще из полезных инструкций есть popcnt (количество единиц). А вот битового разворота (RBIT) в x86/x64 так и не завезли, к сожалению.
Давно интересовало — а почему fork? Откуда он взялся исторически, и почему такая странная (ИМХ) форма?
Кажется, гораздо более естественный способ реализации многопоточности — с помощью функции создания потока, которой в качестве аргумента передается указатель на функцию потока. pthread_create или что-то подобное.
Таблица виртуальных функций в общем и так понятна, но пример «на чистом Си» тоже пригодится — в любом случае понятнее чем на ассемблере. Кстати там лучше везде явно прописать какой-то calling convention — например _cdecl, а то в некоторых компиляторах convention у методов класса и у указателей на функции может не совпасть.
А вот таблица виртуальных таблиц (VTT), о которой данная статья, это действительно какая-то непростая штука.
Будет очень интересно!
Я пока еще не осознал всю мощь корутин, но вот замечание по поводу недостаточной низкоуровневости реализаци возникло из того, что разработчики стандарта выбрали конкретную модель реализации и уже завязали на нее некие классы стандартной библиотеки, а не предоставили универсальный языковой механизм вроде boost.context, с помощью которого (наверное?) можно было бы реализовывать любую модель.
Отличные статьи, спасибо! Правда про VTT кажется получилось немного скомканно.
А вообще, имеет ли виртуальное наследование отношение к виртуальным функциям (кроме того что используется общее ключевое слово и, судя по всему, схожие механизмы доступа)?
Интересно, но недостаточно низкоуровнево.
Можно ли было сделать поддержку всех вариантов (симметричные и асимметричные, стековые и бесстековые)?
Как это соотносится с корутинами из Boost?
Глупый вопрос: а как пользоваться Swift под Windows?
Еще вчера скачал дистрибутив, поставил… и что дальше?
При попытке собрать какое-то примитивное «hello world» из командной строки выдает какой-то мусор и ошибки.
←[1m<unknown>:0: ←[0m←[0;1;31merror: ←[0m←[1mcould not load the swift standard l
ibrary
←[0m
В режиме REPL (как интерпретируемые языки) тоже не работает.
Может есть какой-то плагин к Студии (это было бы идеальным вариантом)?
ИМХО все эти расширения gcc давно пора принять в стандарт. Они давно сделаны и давно и многократно проверены в реальном коде.
А компиляция одних исходников разными компиляторами очень полезна как раз для нахождения сложных ошибок. Сам все проекты под железо обязательно делаю максимально кроссплатформенными с одновременным написанием эмулятора под Windows. Отлаживать алгоритмическую часть очень удобно.
Я говорю не о законе, а о реальности. Да, по закону чтение скорее всего запрещено, и поэтому говорить об этом нельзя, и никто никогда не скажет и будут всячески отрицать, чтобы соблюсти букву закона и избежать даже возможных зацепок для судебных исков. Но в реальности никогда не поверю, чтобы люди с Хакерским мышлением (а другие и не будут заниматься такими проектами) не посмотрели:)
Посмотреть как устроено и скопировать это разные вещи. Вот не думаю, что они совсем не подсматривают:) Но официально конечно говорят что не подсматривают. А на практике наверняка понять многое можно только с дизассемблером и отладчиком.
А по какому праву вообще государства вмешиваются в частные отношения граждан с технологическими компаниями и во внутренние дела компаний?
Во-первых, размещение своих данных в интернете — личное дело каждого, и здесь никто никого не обязывает и не заставляет. Человек может купить хостинг в любой стране мира и выложить туда свою фотку — чем это отличается от фейсбука?
Во-вторых, это все вообще внутренняя передача данных, по сути внутри частной сети ФБ. ИМХО, они даже не обязаны раскрывать как и что у них устроено, куда и зачем они что-то там передают, это их коммерческая тайна. Может они вообще на Марс данные передают, кому какое дело?
Мне бы интересно было рассмотреть и сравнить наборы команд. Помню, еще будучи студентом, по книге Зубкова восстановил таблицу команд x86 и обнаружил там недокументированную команду с кодом 0xF1, и затем уже в инете нашел что это некая ICEBP (INT01).
Ну и таблицу команд ARM в классическом виде было бы интересно посмотреть.
Расскажите. Всегда интересно посмотреть на что-то с разных точек зрения.
Мне например интересно сформулировать максимально простую и понятную концепцию корутин, включая максимально простой и понятный синтаксис.
PS Вообще жалко что эти команды, как и битовые вращения, не вывели в операции языка C/C++ — они были бы более известны, как сдвиги например:) Для битовых сканирований можно было бы применить например унарные << и >>, для вращений бинарные <<< и >>>. Еще из полезных инструкций есть popcnt (количество единиц). А вот битового разворота (RBIT) в x86/x64 так и не завезли, к сожалению.
Кажется, гораздо более естественный способ реализации многопоточности — с помощью функции создания потока, которой в качестве аргумента передается указатель на функцию потока. pthread_create или что-то подобное.
А вот таблица виртуальных таблиц (VTT), о которой данная статья, это действительно какая-то непростая штука.
Я пока еще не осознал всю мощь корутин, но вот замечание по поводу недостаточной низкоуровневости реализаци возникло из того, что разработчики стандарта выбрали конкретную модель реализации и уже завязали на нее некие классы стандартной библиотеки, а не предоставили универсальный языковой механизм вроде boost.context, с помощью которого (наверное?) можно было бы реализовывать любую модель.
А вообще, имеет ли виртуальное наследование отношение к виртуальным функциям (кроме того что используется общее ключевое слово и, судя по всему, схожие механизмы доступа)?
Можно ли было сделать поддержку всех вариантов (симметричные и асимметричные, стековые и бесстековые)?
Как это соотносится с корутинами из Boost?
Еще вчера скачал дистрибутив, поставил… и что дальше?
При попытке собрать какое-то примитивное «hello world» из командной строки выдает какой-то мусор и ошибки.
В режиме REPL (как интерпретируемые языки) тоже не работает.
Может есть какой-то плагин к Студии (это было бы идеальным вариантом)?
А компиляция одних исходников разными компиляторами очень полезна как раз для нахождения сложных ошибок. Сам все проекты под железо обязательно делаю максимально кроссплатформенными с одновременным написанием эмулятора под Windows. Отлаживать алгоритмическую часть очень удобно.
Во-первых, размещение своих данных в интернете — личное дело каждого, и здесь никто никого не обязывает и не заставляет. Человек может купить хостинг в любой стране мира и выложить туда свою фотку — чем это отличается от фейсбука?
Во-вторых, это все вообще внутренняя передача данных, по сути внутри частной сети ФБ. ИМХО, они даже не обязаны раскрывать как и что у них устроено, куда и зачем они что-то там передают, это их коммерческая тайна. Может они вообще на Марс данные передают, кому какое дело?
Ну и таблицу команд ARM в классическом виде было бы интересно посмотреть.
Мне например интересно сформулировать максимально простую и понятную концепцию корутин, включая максимально простой и понятный синтаксис.