Вы можете использовать операторы arrayUnion и arrayRemove для добавления и удаления элементов из массива.
Например, чтобы добавить Story
db.collection('users').doc(userId).collection('matrix).doc(story.case).update(
{"success": FieldValue.arrayUnion(someStory)}
)
, эти операторы обрабатывают массив как наборы. Вы не можете получить доступ к отдельным элементам по индексу.
Официальная документация здесь: https://firebase.google.com/docs/firestore/manage-data/add-data
.
Чарли,
Я всегда ассоциировал шедевр Дейкстры с моделью программирования, в которой центральное место занимают циклы и массивы. Если вы придерживаетесь Дейкстры (например, при вычислении самых слабых предварительных условий), я думаю, вы обнаружите, что функциональные языки не подходят. Из популярных языков, которые обеспечивают хорошую поддержку императивного программирования с циклами и массивами, возможно, Python несет наименьший дополнительный багаж.
Это не означает, что функциональные языки не подходят для формальных методов - они очень хорошо подходят - -но стиль сильно отличается от Дейкстры. Предпочтительные методы делают упор на расчетные доказательства; см. статью Ричарда Берда о решении судоку (которая требует больших усилий) или учебник Ричарда Берда и Фила Уодлера.
Что касается параллелизма, это во многом зависит от того, в какую модель параллелизма (и какие формальные методы) вы верите. Concurrent ML Джона Реппи - прекрасная модель передачи сообщений. У Erlang также есть хорошая чистая ограничительная модель. С другой стороны, программирование с блокировками и критическими секциями настолько сложно, что в этой ситуации может быть больше пользы от формальных методов.
Два других попутных замечания, которые могут быть интересны для вашего базового исследования:
Единственный программист Я когда-либо встречал, кто применял методы Дейкстры на практике к реальным системам, был Грег Нельсон, работавший над Модулой-3. (Грег и Марк Манассе вместе написали оконную систему Trestle.) программирование с блокировками и критическими секциями настолько сложно, что в этой ситуации может быть больше пользы от формальных методов.
Два других попутных замечания, которые могут быть интересны для вашего базового исследования:
Единственный программист, которого я когда-либо встречал, кто применял Методы Дейкстры на практике для реальных систем был Грег Нельсон, который работал в Модуле-3. (Грег и Марк Манассе вместе написали оконную систему Trestle.) программирование с блокировками и критическими секциями настолько сложно, что в этой ситуации может быть больше пользы от формальных методов.
Два других попутных замечания, которые могут быть интересны для вашего базового исследования:
Единственный программист, которого я когда-либо встречал, кто применял Методы Дейкстры на практике для реальных систем был Грег Нельсон, который работал в Модуле-3. (Грег и Марк Манассе вместе написали оконную систему Trestle.) Modula-3 был прекрасным языком, которому Digital позволил умереть из-за безрассудства и некомпетентности. У Грега была хорошая статья TOPLAS о расширении исчисления Дейкстры.
Язык моделирования Джерарда Хольцмана SPIN основан непосредственно на языке защищенных команд Дейкстры, а также поддерживает параллелизм. Его цель - проверка модели, а не программирование, и есть несколько особенностей, но есть сильная связь с формальными методами, и действительно здорово иметь возможность проверять свои утверждения на модели. Любой, кто интересуется формальными методами, захочет это проверить.
(Правка: вот ссылка на статью Грега Нельсона или одну из них. - CRM)
Хорошая идея. Я думаю, что Scheme - хороший вариант, поскольку он позволяет применять на практике (в виде библиотек) различные абстракции с минимальным набором необходимых вещей. Также легко перевести из схемы в систему проверки, такую как PVS ( http://pvs.csl.sri.com/ )
ура
Я вырос на Lisp и Scheme и люблю их обоих. Я считаю, что это отличные языки для изучения с нуля. Но я не уверен, что кто-то с опытом программирования воспользуется этими языками. Вы не получите много просмотров на Amazon из-за вашей книги со схемой в названии. :)
C # - очень простой язык для изучения, и в нем есть все основы, которые могут потребоваться для быстрого погружения в такие темы, как параллелизм. Он имеет больше применимости, потому что вы также можете ориентироваться на объектно-ориентированные и веб-концепции. Он также довольно популярен, и вы можете заставить компании платить за книги своих сотрудников, что всегда полезно для продаж («Быть крутым программистом на C #» гораздо дальше в листе возмещения расходов, чем «Параллелизм в современном Лиспе»).
F # это интересный язык. Это' s получил функциональную красоту Lisp или Scheme (ну, не совсем, но почти) и дает вам некоторую возможность погрузиться в темы ООП, а также подключиться к .NET Framework для материалов пользовательского интерфейса, если вы хотите оживить вещи. Но сейчас это непонятно.
Я не могу разговаривать с Руби, поэтому лично я бы стеснялся и выбрал C #.
Я думаю, что вы сами должны иметь некоторый опыт работы с языком, на котором пишете свою книгу, или иметь опытный специалист для проверки вашего кода.
Лично я бы использовал Common Lisp, поскольку Я знаком с этим, и это отличный язык для реализации любой концепции. Другими вариантами могут быть Erlang, Haskell, Ruby или Python, возможно, даже какой-нибудь диалект ML. Я предвзято отношусь к семейству C (включая C # и Java), они, кажется, придерживаются более низкого уровня мышления о концепциях.
Игнорируя очевидные ответы на ваш любимый язык программирования , я вижу два полезных ответа:
С одной стороны, вы пытаетесь чтобы продемонстрировать методы тем, кто считается программистами среднего уровня. Если вы выберете один язык и благословите его в качестве языка своих книг, вы, возможно, оттолкнетесь от потенциальных читателей, которые случайно не предпочтут этот язык по той или иной причине. Поскольку вы демонстрируете методы, у вас есть возможность использовать фрагменты на языках, которые кратко иллюстрируют вашу точку зрения. Например, единственный доступный язык для демонстрации RIIA - это, вероятно, C ++, но этот же язык довольно плох для демонстрации того, как выполнять анализ исходного кода. Схема идеальна для анализа источников, но не t дает вам очень много возможностей для изучения преимуществ (и недостатков) строгой типизации. Используйте много языков.
С другой стороны, поскольку вы в основном занимаетесь методами программирования, я не совсем уверен, что вам вообще нужен настоящий язык. Хорошо определенная нотация также хороша и заставляет ваших читателей сосредоточиться на том, о чем вы говорите, а не на поверхностных деталях того или иного языка.
Честно говоря, я не могу рекомендовать Ruby для этого. Когда я занимаюсь программированием изо дня в день в коммерческом мире, мне это очень нравится, конечно, гораздо больше, чем C или Java. Но его семантика настолько нечетко определена, что я не доверяю ему и вполовину так, как C, где, хотя я могу потратить несколько часов на споры по поводу утверждения и консультации с гораздо более толстой белой книгой, которая заменила K&R, я выхожу в конец достаточно убежден, что если у меня есть соответствующий компилятор (да, я знаю, я мечтатель, но работайте со мной здесь), я знаю, что выходит с другой стороны.
Руби прекрасен во многих отношениях, но что касается формальности, они никогда не встретятся.
Я склонен голосовать за Haskell сам, потому что каждый раз, оборачиваясь, я поражаюсь тому, насколько все имеет смысл в этом определении языка. (Хотя, по общему признанию, всего через год или около того, я уверен, что не исследовал и половины углов даже Haskell 98.)
И я также понимаю, что Дикджстра против функциональности; возвращаясь назад и читая его статьи , он в очень императивном мире; Я не могу сказать, действительно ли он пошел неправильным путем. Возможно, я просто поражен тем, насколько хороши его тексты, а также его мысли. Но, похоже, ему это понравилось, так что насчет использования Algol 60 ?
Возможно, я просто поражен тем, насколько хороши его тексты, а также его мысли. Но, похоже, ему это понравилось, так что насчет использования Algol 60 ? Возможно, я просто поражен тем, насколько хороши его тексты, а также его мысли. Но, похоже, ему это понравилось, так что насчет использования Algol 60 ?