Как стать автором
Обновить
-3
0

Пользователь

Отправить сообщение
Раз он Сатоши — пускай подтвердит это переводом биткоинов из первых блоков.
Всех побила реализация типа «action engine» с приоритетом subroutine и non‐reentrant типом исполнения
Тупо non‐reentrant VI? А где хранятся данные? В контролах или сдвиговых регистрах?
При использовании variant вы получите ошибку в runtime и довольно быструю сериализацию.
Варианту же все равно надо указывать какой тип надо десериализировать, так же ж?
Если сериализовывать чем‐то вроде flatten to string (тот же variant, но можно выкинуть тип), то вы сэкономите память, но ошибку при посылке не того типа можно и не получить.
Я ж енумом выбираю как десерализировать и обрабатывать данные, какие еще ошибки?
Если сериализовывать чем‐то вроде JSON, то ошибку вы получите, но расходы на (де)сериализацию сильно увеличатся, т.к. variant ближе к представлению в памяти.
JSON и прочие XML — тормознутый буллшит для неосиляторов бинарного формата.
А почему 64‐битного?
Тип переключателя б64 стоит по-умолчанию. Я сейчас делаю новую версию прототипа Метапрога, где можно будет в качестве переключателя поставить енум.
Это для любой СУВТ так или здесь дело в том, что из‐за присутствия д64 и з64 переключатель будет в любом случае занимать по сути 8 байт из‐за выравнивания и метапрог просто не даёт об этом факте забыть?
Нет. В СУВТ переключатель хранится отдельно от значений. Кстати, в СУВТ и структуры можно вставлять, и юнионы, и указатели, и даже другие СУВТ.
Вообще‐то далеко не самый плохой выбор для UI, сама LabVIEW в этом отношении была бы хуже. И, насколько я понял, это переделка в первую очередь UI и формата хранения VI — и то, и то всё равно нужно было сделать давно, а то что это за графический язык без zoom, зато с IDE, которая падает, если падает компилятор, и который сохраняется в формате, совершенно неудобном для использования с VCS. Компилятор у NXG вроде остался тот же, на основе LLVM.
Корпорация с нехилым бюджетом и штатом программистов на зарплате не осилила вкрутить зум в классическое Лабвью? Это звездец. Так же как и неосиляторство сделать NXG на самом Лабвью. Видимо, у них тупо нет мозгов.

В общем, приглашаю попробовать прототип Метапрога: mega.nz/file/6RBkhIiQ#PCydINDpFpqznLfOyYDeA1u0hlYg11OP7xhRXezcZAI
В LabVIEW типизация статическая, но не строгая — за неявное приведение типов компилятор по рукам не даст. Хорошо хоть красную точку покажет, и позволит поискать VI с такими точками. Иногда раздражает, но красной точки обычно достаточно, чтобы выявить баги.

По-хорошему не помешало б сделать возможность запрета неявного приведения. Но, к сожалению, не от конечных пользователей это зависит, ведь код закрыт. Неспроста я начал разработку Метапрога как опенсорсной альтернативы LabVIEW.

Хотя, в целом, лабвьюшная система типов неплохая и в общих чертах повторяет сишную. Так же как и в Си есть приведение числовых типов, которое в принципе ничем не угрожает кроме нюансов типа переполнения числовых типов. Си после LabVIEW осваивать проще и такие концепты как структуры, енумы и указатели не вызывают проблем.

Кстати, в LabVIEW есть аналог сишного указателя (data value reference) — очень удобно шарить данные в параллельных VI и участках схем, при этом атомарность операций доступа к данным обеспечивается in place element structure, необходимой для доступу к ним. Советую попробовать.

Обмен командами между VI по очередям означает постоянную возню с variant и фактически динамической типизацией. При условии, конечно, что вам нужно обмениваться командами, к которым прилагаются разные данные. В Rust такое легко решается ADT. В C такое не так легко (в смысле, компилятор по рукам когда надо не даст) решается комбинацией из enum и union.

Хорошее замечание. Я в Лабвью решаю эту проблему комбинацией енума и сериализированных в строку данных, которые потом десериализируются и обрабатываются в зависимости от значения енума. Вручную делать это неудобно и в Метапроге я для подобных случаев делаю СУВТ.

Говоря по-сишному, СУВТ (структура условного выбора типа) — это комбинация из числа (которое может быть енумом) и юниона из соответствующих типов. Пример (картинка кликабельная, откройте в новом окне):

image

Если что непонятно или какие-то вопросы — не стесняйтесь уточнять.

Здесь СУВТ — это структура из беззнакового 64-битного (б64) переключателя и юниона из трех возможных типов. Значению переключателя 17 соответствует беззнаковый 8-битный (б8) тип, значению переключателя 86 — 64-битная дробь, он же float/double, значению переключателя 9 — знаковое 64-битное. Обратите внимание, что в отличие от Лабвью знаковые типы обозначаются отдельным от беззнаковых цветом (светло-голубым).

В данном случае в СУВТ записывается знаковая 64-битная константа 700 и в значение переключателя СУВТ автоматически записывается соответствующее этому типу число 9.

Константа СУВТ подается на операцию над структурой. В ней идет запись в СУВТ. Можно записать произвольное число в переключатель. Или можно записать значение определенного типа в соответствующий элемент СУВТ — при этом произойдет не только присвоение значения элемента юниона, но еще и запись соответствующего значения в переключатель.

Дальше начинается самое интересное, а именно условный переключатель. Для его понимания важно усвоить, что в Метапроге есть два типа проводков. Первый — это обычные данные, как в LabVIEW. Они определяют последовательность выполнения блоков по принципу потоков данных (data flow), как в LabVIEW. Второй — жесткая последовательность, не несущая данных, а только определяющая очередность выполнения блоков (в LabVIEW вместо них — возня с неудобными sequence). Жесткая последовательность может начинаться и заканчиваться в любом месте любого блока. На картинке зеленая стрелка — вход в последовательность, краснаявыход.

В некоторых блоках (таких, как ветвление по условию или цикл) есть особые области, в которых проводки (жесткие последовательности и данные), начинающиеся там, будут заставлять блоки, к которым они ведут, выполняться только в определенных условиях. Последующие (как под данным, так и по жестким последовательностям) блоки также «заражаются» определенным условием выполнения.

Также важно понимать, что строка в Метапроге — не что иное как массив байтов, то есть безаковых 8-битных, б8. На константах массивов написано, что это массив, тип элемента, размер массива. Если это строка (массив б8) — есть и показ строки.

От самого верхней области переключателя по условию («другое») идет проводок жесткой последовательности, указывающий, какой блок надо выполнить, если значение переключателя СУВТ не соответствует ни одному из заданных ниже значений (аналоги сишному и лабвьюшному default). От областей «7», «95» и «11» идут жесткие последовательности (не путать с проводками данных!) к блокам, которые выполнятся, если будут соответствующие значения переключателя. Области «другое», «7», «95» и «11» объединяет то, что от них идут последовательности на строковые константы. Данные из блоков констант, соответствующих разным условиям, «сходятся» в один проводник с данными, после чего подаются на блок печати строки в консоль, общий для всех четырех случаев.

В случае если переключатель 17 — данные типа б8 подаются на блок преобразования (каста) типа, чтобы привести их к типу з64. Дальше данные из блока преобразования «сходятся» с данными того же (з64) типа из случая, когда переключатель 9. В итоге данные подаются на блок "+1" и печатаются в консоль. Получается, что если тип данных б8 или з64, мы добавляем к числу 1 и печатем в консоль. В данном примере, так как мы записали в СУВТ знаковое 64-битное 700, произойдет печать числа в консоль числа 701.

Если же данные имеют тип д64 — мы отнимаем 1 и печатаем их в консоль специальной функцией, печатающей дробные числа. Если б мы вместо знакового 64-битного 700 записали в СУВТ дробное 300 — получили б в консоли 299.0.

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

Опять же, если что непонятно или какие-то вопросы — не стесняйтесь уточнять.

А сейчас в mallable VI по сути утиная типизация, и уже без «красных точек» где бы то ни было.

Это ужас. Когда такое ввели? Я толком не пользовался Лабвью после 2013, ради совместимости с ХР.

Удивляюсь как можно так тупить вместо того, чтобы придумать СУВТ. Да и вообще сделать LabVIEW NXG не на самом LabVIEW, а на какой-то унылой скриптухе от M$ — чистейшей воды идиотизм. При том, что я лично на LabVIEW сделал прототип Метапрога (по сути аналог LabVIEW) с нуля. За год с лишним, в свободное время, не имея доступа к исходникам LabVIEW и армии высокооплачиваемых разработчиков.
Джава, питон и прочая новомодная скриптуха намного медленнее Си и хуже поддается оптимизации. И низкоуровщину на них не делают. В джаве кастрированная система типов без беззнаковых и указателей, одни уродливые объекты. В питоне так вообще динамическая черт-пойми-какой-тип типизация, порождающая кучу багов. В Лабвью несоответствие типов (например, кластеров разных типов) сразу покажется, в питоне — ловить баги только в рантайме. Ах да, в питоне еще и потоков нет, а модули, требующие производительности и многопоточности, требуют сишного кода.

Тот же Node-RED и в подметки не годится LabVIEW. Там кривые Безье вместо прямоугольных проводков — это означает, что практически любая сложная схема превратится в ад. А уж я-то знаю толк в сложных схемах (которые еще и работают), чего только стоит прототип Метапрога:)

И где там типы? Насколько я понимаю, там динамическая типизация — а это, опять же, ад еще тот. В LabVIEW пристойная система типов, практически уровня Си — после него сишные типы понимаются довольно легко. Проблема только с доисторической текстовой формой их записи — то, что в Метапроге будет решено. Да уже решено — прототип вот есть, ссылку я дал.
Высокие цены на подобные препараты гарантируют, что медицинские исследователи имеют капитал, необходимый им для финансирования своих исследований, в результате которых создаются такие чудесные лекарства, как Zolgensma. Ограничения этих цен со стороны регулирующих органов, фактически остановили бы медицинские инновации — и предотвратили бы разработку будущих «Zolgensma».

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

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

Выход тут только один: сильная государственная наука. Создание условий, при которых изобретатели смогут сосредоточиться непосредственно на изобретениях, а не отвлекаться на зарабатывание денег и разного рода юридический бред.

Разумеется, нельзя полностью отрицать роль частного бизнеса. В нынешних условиях он вынужден брать на себя функции, которые в нормальной ситуации должно брать на себя государство. Кроме предмета поста, есть еще более яркий пример — крионика. Эта наука способна почти любого неизлечимого по нынешим меркам больного перенести в будущее, в котором эти болезни станут излечимыми. И кого это интересует? Никого кроме трех жалких частных лавочек (две фирмы в США и одна в РФ). Поэтому самый дешевый тариф на криоконсервацию — 18 тысяч долларов — только мозг в КриоРус, в США крионика существенно дороже. О серьезных исследованиях в области крионики (таких, обратимая консервация мышей в жидком азоте) говорить в такой ситуации сложно.

Мы живем в неправильном мире. Об этом надо хотя бы начать говорить вслух!
LabVIEW — отличная вещь, в принципе годящаяся для «взрослых» проектов любой сложности (об этом ниже), при этом оно легко и просто осваивается не-программистами. Однако лицензионая политика жадин из NI убивала и убивает популярность LabVIEW. Либо вываливай тысячи баксов, либо качай с торрентов, либо не познаешь мир визуального программирования.

Выпуск Community Edition вроде бы показывает, что у них наконец-то начинают образовываться мозги. Но тут же вываливается куча ограничений — как чисто юридических, так и технических: версия только под Windows и в целом ограниченный бекенд, который невозможно подправить самостоятельно.

Ограниченность и закрытость LabVIEW вынудила меня начать делать Метапрог — свою универсальную графическую среду программирования. В Метапроге можно, как в Лабвью, собирать полноценные программы мышкой, но при этом идет опора на Си. Метапрог позволяет использовать сишные функции и в целом оперирует сишной системой типов, но со своими «плюшками». Кстати, в графике (как LabVIEW, так и Метапроге) система типов выглядит куда нагляднее, чем в тексте. Важным преимуществом в сравнении с LabVIEW является возможность непосредственно вызывать функции из библиотек на Си (которых огромное множество) — в LabVIEW большие проблемы с библиотеками, которых на Си написано намного больше.

Планирую написать про Метапрог полноценный пост. Пока что текущую версию его прототипа можно скачать тут: mega.nz/file/6RBkhIiQ#PCydINDpFpqznLfOyYDeA1u0hlYg11OP7xhRXezcZAI

Исходный код прототипа Метапрога открытый (под свободной лицензией) и прилагается в архиве. Сделан прототип на LabVIEW — оцените какие сложные проекты можно делать, не обращаясь к текстовым языкам программирования (за исключением Си как бекенда для Метапрога).

Вместе с Метапрогом поставляется Метапрог Онлайн, который включает в себя чат для общения разработчиков и систему контроля версий. Если интересует разработка открытой визуальной среды разработки — обращайтесь в Метапрог Онлайн!
Добавить интерактивную подсветку и прочие плюшки. В двух текстовых файлах в блокноте тоже надо долго всматриваться, если б не было специальной утилиты.
Пока так:
image
Опять же, это всего лишь прототип.
HDL
Использовании Си в Метапроге не является догмой в последней инстанции и другие языки тоже можно будет добавлять как бекенд.
Добавить/изменить код, даже без принятия в upstream — гораздо сложнее, чем просто поменять редактор на более соответствующий нуждам
Были времена когда даже текстовые редакторы (ed, vi, Emacs) казались чудом (после набивания перфокарт), но при этом были ужасно сложны в использовании (в сравении с современным блокнотом) и требовали постоянной доработки. К тому же, современные IDE для текстовых языков тоже простыми не назовешь.
графические редакторы сложнее текстовых
Этого не отнять, но если они могут работать со своим же кодом — то эта сложность компенсируется графикой.
Чтобы не было слива персональных данных, надо их просто не оставлять. Тогда и сливаться будет нечему.
Что добавило необходимость знать C, когда в этих библиотеках обнаружится ошибка. Или когда в метапрог протечёт какая‐та абстракция. Ну и при использовании библиотек на C в более безопасных языках кому‐то придётся писать безопасные binding’и — или программисты будут «радостно» ловить SEGV.
Совершенно верно. Но если сделать базовые блоки из сишных функций — проблем быть не должно.
Если вы действительно претендуете на универсальность, то напомню ещё про такие вещи, как Web и FPGA. Со вторым, кстати, LabVIEW, неплохо справляется. Но библиотек на C ни там, ни там, вы не получите (с Web ещё есть шансы из‐за emscripten, с FPGA — никаких).
Микроконтроллеры вроде на Си программируют, а на чем программируют FPGA? К тому же, Си — всего лишь одна из целевых платформ, можно для разных платформ, не совместимых с Си, сделать свои трансляторы.
Тогда у вас меню с кучей похожих иконок. По моему мнению, когда иконки слишком похожи, вытащить VI из окна проекта проще, чем из меню.
Я так и делаю. В Метапроге тоже ничто не помешает сделать меню из списка названий функций.
В вашем редакторе будет то, чего не хватает вам. Но все остальные программисты — не вы. У текстовых языков есть выбор, про графические с альтернативными редакторами я не слышал.
Метапрог с открытым кодом, даже начиная с прототипа. Можно добавлять нужные конкретно вам фичи и слать патчи в главный проект. Так, собственно, и работает опенсорс.
Религизоный? В бога я не верю.
Еще не легли они спать, как городские жители, Содомляне, от молодого до старого, весь народ со всех концов города, окружили дом
5
и вызвали Лота и говорили ему: где люди, пришедшие к тебе на ночь? выведи их к нам; мы познаем их.
6
Лот вышел к ним ко входу, и запер за собою дверь,
7
и сказал: братья мои, не делайте зла;
8
вот у меня две дочери, которые не познали мужа; лучше я выведу их к вам, делайте с ними, что вам угодно, только людям сим не делайте ничего, так как они пришли под кров дома моего.
Любящий папаша, не так ли?
Еще Платон рассуждал о превращении олигархии в демократию, а демократии в тиранию.
Пост о технике. Что вам непонятно?
Что там неверно? Я тоже могу «авторитетно» заявить что вы неправы, не утруждая себя аргументацией.
До Плутона за месяцы я, конечно, погорячился (увидел цифру в одной статье). Но как насчет Луны? Вы этим занимаетесь? Можете статью на Хабр написать? Я по электрореактивным двигателям статей тут не нашел.
А, ну шикарно, надо ещё и создать робототехнику фундаментально более высокого уровня, чтобы ваша затея могла работать…
Да. Какой сейчас век на дворе? Но это уже не об аэрокосмической системе (которая преимущественно из существующих технологий), а об освоении самого космоса.
ион может захватить «лишние» электроны, выпущенные катодом-нейтрализатором)

Нейтрализовать ионы необязательно. Чтобы на корабле не накапливался отрицательный заряд — сделать второй ускоритель, для электронов, чтобы ионы с электронами уходили равномерно. Лучше даже чтобы у корабля был слегка отрицательный заряд, чтоб ионы охотнее уходили.
Кстати, как нейтральный атом в вакууме может стать отрицательным ионом? Отрицательный анион — это из области электрохимии.
вы не просто отказываетесь от космодромов и всё, а вместо них, уже давно построенных и действующих
Вы в угоду десятка космодромов отказываетесь от тысяч аэродромов, способных принимать Ан-225. Которые легко могут быть превращены в космодромы. Одна беда: на этом не попилишь так много денег, как на «Восточном».
хотите создать радикально новую и фантастически масштабную инфраструктуру (космопланы, предприятия по их массовому обслуживанию, огромный флот космических буксиров, новые спутниковые платформы, рассчитанные на такой метод выведения и т.д. и т.п.)
И это все будет делаться не только с целью найти воду на Марсе или вывести коммерческий спутник. Это все будет делаться для промышленного освоения космоса. Орбитальные буксиры на высокоэффективных (выхлоп 200-300 км/с) электрореактивных двигателях с атомным реактором смогут летать даже на орбиту Плутона за месяцы.
Вы лучше подумайте сколько уходит в черную дыру под названием «финансовый сектор». Когда в СМИ говорят о космонавтике, сразу же вспоминают что это дорого, когда говорят о ядерной энергетике, не забывают упомянуть Чернобыль, а вот о том какие суммы уходят в оффшоры и о том, что за финансовые кризисы никто не несет никакой ответственности, олигархические СМИ скромно умалчивают.
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность