Мицгол, давно хочу вас спросить: в стародавние времена вы, помнится, были сторонником «православного самодержавия». Сейчас, когда вы испытываете его на себе в действии, ваше отношение к нему изменилось?
Язык очень интересный, но синтаксис меня местами огорчает. Самый лучший синтаксис из си-подобных языков пожалуй у C#. Rust претендует на низкоуровневость Си (и еще очень интересно что в итоге получится со встроенными «умными указателями»), Go содержит интерейшие концепции эмбеддинга вместо наследования и интерфейсов, в D весьма много мелочей, которые упустили в С++; в общем, идеального языка опять нет.
Есть два нормальных решения: или как в Nemerle — плагины пишутся на том же языке что и основной код; компилятор делает несколько проходов и компилирует сначала плагины («макросы») а затем с их помощью основной код. Преимущества — один язык а не два, повторное использование кода (можно один код использовать как в плагинах так и в основной программе).
Второй вариант — использование для плагинов другого языка (например тот же javascript). Для С++ думаю это подойдет лучше — ибо плагины на небезопасном С++ со всеми его костылями и граблями это будет еще тот номер. Сам по себе JavaScript вполне стандартизирован и общеизвестен, все что остается — разработать и стандартизировать объектную модель для компиляторов (аналог HTML DOM для браузеров).
В том-то и дело, что делать языковые фичи на уровне компилятора НАМНОГО проще. Там это обычные «сишные» структуры данных и функции. А здесь это адские хаки, основанные на случайных свойствах языковых конструкций, изначально предназначавшихся для совершенно других вещей.
А так получается что каждый программист дописывает компилятор практически вслепую (сообщения об ошибках при метапрограммировании на шаблонах это ад). Вот даже автор не уверен что код идеально работает.
Вся проблема в том что эти возможности С++ были случайно открыты, а не спроектированы изначально. По хорошему нужно бы всю часть языка, связанную с метапрограммированием, перепроектировать заново. С новыми ключевыми словами, нормальными синтаксическими макросами, нормальным доступом к AST и т.д. А старую оставить для совмесимости, но строго рекомендовать этим не пользоваться.
Восхищаюсь теми кто может придумывать и реализовывать такие вещи. Супер!
Но с другой стороны грустно… все это — SFINAE, compile-time-последовательности чисел, вычисления на шаблонах, да те же туплы в реализации С++… это мега костыли к компилятору. Даже не костыли, а внутренности компилятора, почему-то существующие снаружи в виде библиотек и пользовательского кода и подключенные к нему многочисленными трубочками.
Почти все это должно быть в самом языке, а не в библиотеках. Все что в boost отмечено как «Language Features Emulation», «Generic Programming», «Template Metaprogramming» и много чего еще.
Конечно большинство как покупало монолитные смартфоны так и будет покупать. Но вот гики, которым хочется чего-то большего, которым хочется из смартфона получить Хакерфон, безусловно будут довольны.
Вот набросал небольшой списочек возможных модулей для такого смартфона. Дополняйте в комментариях:)
Инфракрасная (тепловизионная) камера
Цифровой SDR радиоприемник
Цифровой SDR радиопередатчик (вместе с приемником можно использовать как рацию)
Счеткик Гейгера/дозиметр
Трехмерный сканер (Project Tango)
Различные ТВ и радио тюнеры (цифровые, аналоговые)
Спутниковая телефония и спутниковый интернет
Универсальный химический анализатор
Ультразвуковой сканер
Модуль DECT телефонии
Модуль проводной телефонии/факсмодем (ну мало ли для каких хакерских целей пригодится)
Универсальный цифровой осциллограф/измеритель электрических величин
Многие из этих идей я почерпнул здесь на Хабре, в обсуждениях различных устройств-дополнений к смартфонам, разрабатываемых на кикстартере.
Супер! Такой способ, как я понимаю, подойдет и для добавления драйверов произвольных устройств в Андроид без пересборки ядра?
Купил как-то китайский адаптер ethernet to usb otg, якобы работающий с android устройствами. Китайцы в качестве андроид драйвера приложили исходники на Си:) Устройство на смартфоне не определяется (вполне возможно они имели в виду планшеты а не смартфоны).
А кстати, есть что-нибудь типа boost, но более расширенное? (без ограничений на компиляторы и т.п.)
Или хотя-бы какой-то сайт который собирает ссылки на такие библиотеки (типа общесистемных или language emulation features).
Интересно до чего еще додумались люди в мире С++:)
Из всего что я перепробовал, на данный момент есть одно работоспобное и не требующее самостоятельной сборки решение для винды — на основе среды разработки geany.
1. Скачиваем mingw, gtk2, geany, исходники geany c github.com/geany/geany; устанавливаем все это, а также сам rust.
2. В PATH прописываем пути к mingw/bin, gtk/bin и rust/bin
3. Из исходников geany берем папку data и целиком копируем ее с заменой той папки data которая была при установке geany. Там множество настроек для различных языков, включая rust
4. Создаем проект, в нем создаем файл с расширением .rs, пишем код!
Работает подсветка синтаксиса, компиляция и запуск прямо из среды, дерево символов, вывод сообщений компилятора в специальное окно среды, по щелчку на сообщении открывается соответствующая строка в коде. То есть стандартный набор возможностей, для начала более чем достаточно.
Подумалось тут… Хорошо бы, если они в дополнение к автоматическому и ручному Гугл сделал бы еще полуавтоматический режим: экран в машине, на экране схематически показана дорога, дорожная обстановка, сам автомобиль и что-то вроде вектора направления, который меняется в зависимости от положения руля. Чтобы можно было быстро перехватывать управление и видеть дорогу как-бы сверху.
Эх, жалко… Я когда-то так надеялся, что ВК уйдет куда-нибудь за границу, на какие-нибудь острова. Но увы — сначала Павел Дуров ушел, а теперь вот продали окончательно.
Но вообще интересно, почему-то всегда казалось что ВК побогаче чем мейл.ру… может потому что серивисами последней я вообще никогда не пользовался?
Второй вариант — использование для плагинов другого языка (например тот же javascript). Для С++ думаю это подойдет лучше — ибо плагины на небезопасном С++ со всеми его костылями и граблями это будет еще тот номер. Сам по себе JavaScript вполне стандартизирован и общеизвестен, все что остается — разработать и стандартизировать объектную модель для компиляторов (аналог HTML DOM для браузеров).
А так получается что каждый программист дописывает компилятор практически вслепую (сообщения об ошибках при метапрограммировании на шаблонах это ад). Вот даже автор не уверен что код идеально работает.
Вся проблема в том что эти возможности С++ были случайно открыты, а не спроектированы изначально. По хорошему нужно бы всю часть языка, связанную с метапрограммированием, перепроектировать заново. С новыми ключевыми словами, нормальными синтаксическими макросами, нормальным доступом к AST и т.д. А старую оставить для совмесимости, но строго рекомендовать этим не пользоваться.
Но с другой стороны грустно… все это — SFINAE, compile-time-последовательности чисел, вычисления на шаблонах, да те же туплы в реализации С++… это мега костыли к компилятору. Даже не костыли, а внутренности компилятора, почему-то существующие снаружи в виде библиотек и пользовательского кода и подключенные к нему многочисленными трубочками.
Почти все это должно быть в самом языке, а не в библиотеках. Все что в boost отмечено как «Language Features Emulation», «Generic Programming», «Template Metaprogramming» и много чего еще.
Вот набросал небольшой списочек возможных модулей для такого смартфона. Дополняйте в комментариях:)
Инфракрасная (тепловизионная) камера
Цифровой SDR радиоприемник
Цифровой SDR радиопередатчик (вместе с приемником можно использовать как рацию)
Счеткик Гейгера/дозиметр
Трехмерный сканер (Project Tango)
Различные ТВ и радио тюнеры (цифровые, аналоговые)
Спутниковая телефония и спутниковый интернет
Универсальный химический анализатор
Ультразвуковой сканер
Модуль DECT телефонии
Модуль проводной телефонии/факсмодем (ну мало ли для каких хакерских целей пригодится)
Универсальный цифровой осциллограф/измеритель электрических величин
Многие из этих идей я почерпнул здесь на Хабре, в обсуждениях различных устройств-дополнений к смартфонам, разрабатываемых на кикстартере.
Купил как-то китайский адаптер ethernet to usb otg, якобы работающий с android устройствами. Китайцы в качестве андроид драйвера приложили исходники на Си:) Устройство на смартфоне не определяется (вполне возможно они имели в виду планшеты а не смартфоны).
Или хотя-бы какой-то сайт который собирает ссылки на такие библиотеки (типа общесистемных или language emulation features).
Интересно до чего еще додумались люди в мире С++:)
1. Скачиваем mingw, gtk2, geany, исходники geany c github.com/geany/geany; устанавливаем все это, а также сам rust.
2. В PATH прописываем пути к mingw/bin, gtk/bin и rust/bin
3. Из исходников geany берем папку data и целиком копируем ее с заменой той папки data которая была при установке geany. Там множество настроек для различных языков, включая rust
4. Создаем проект, в нем создаем файл с расширением .rs, пишем код!
Работает подсветка синтаксиса, компиляция и запуск прямо из среды, дерево символов, вывод сообщений компилятора в специальное окно среды, по щелчку на сообщении открывается соответствующая строка в коде. То есть стандартный набор возможностей, для начала более чем достаточно.
Но вообще интересно, почему-то всегда казалось что ВК побогаче чем мейл.ру… может потому что серивисами последней я вообще никогда не пользовался?