Обучение программирования и формальных методов

Вы можете использовать операторы 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

.

22
задан Charlie Martin 26 August 2013 в 17:27
поделиться

6 ответов

Чарли,

Я всегда ассоциировал шедевр Дейкстры с моделью программирования, в которой центральное место занимают циклы и массивы. Если вы придерживаетесь Дейкстры (например, при вычислении самых слабых предварительных условий), я думаю, вы обнаружите, что функциональные языки не подходят. Из популярных языков, которые обеспечивают хорошую поддержку императивного программирования с циклами и массивами, возможно, Python несет наименьший дополнительный багаж.

Это не означает, что функциональные языки не подходят для формальных методов - они очень хорошо подходят - -но стиль сильно отличается от Дейкстры. Предпочтительные методы делают упор на расчетные доказательства; см. статью Ричарда Берда о решении судоку (которая требует больших усилий) или учебник Ричарда Берда и Фила Уодлера.

Что касается параллелизма, это во многом зависит от того, в какую модель параллелизма (и какие формальные методы) вы верите. Concurrent ML Джона Реппи - прекрасная модель передачи сообщений. У Erlang также есть хорошая чистая ограничительная модель. С другой стороны, программирование с блокировками и критическими секциями настолько сложно, что в этой ситуации может быть больше пользы от формальных методов.

Два других попутных замечания, которые могут быть интересны для вашего базового исследования:

  • Единственный программист Я когда-либо встречал, кто применял методы Дейкстры на практике к реальным системам, был Грег Нельсон, работавший над Модулой-3. (Грег и Марк Манассе вместе написали оконную систему Trestle.) программирование с блокировками и критическими секциями настолько сложно, что в этой ситуации может быть больше пользы от формальных методов.

    Два других попутных замечания, которые могут быть интересны для вашего базового исследования:

    • Единственный программист, которого я когда-либо встречал, кто применял Методы Дейкстры на практике для реальных систем был Грег Нельсон, который работал в Модуле-3. (Грег и Марк Манассе вместе написали оконную систему Trestle.) программирование с блокировками и критическими секциями настолько сложно, что в этой ситуации может быть больше пользы от формальных методов.

      Два других попутных замечания, которые могут быть интересны для вашего базового исследования:

      • Единственный программист, которого я когда-либо встречал, кто применял Методы Дейкстры на практике для реальных систем был Грег Нельсон, который работал в Модуле-3. (Грег и Марк Манассе вместе написали оконную систему Trestle.) Modula-3 был прекрасным языком, которому Digital позволил умереть из-за безрассудства и некомпетентности. У Грега была хорошая статья TOPLAS о расширении исчисления Дейкстры.

      • Язык моделирования Джерарда Хольцмана SPIN основан непосредственно на языке защищенных команд Дейкстры, а также поддерживает параллелизм. Его цель - проверка модели, а не программирование, и есть несколько особенностей, но есть сильная связь с формальными методами, и действительно здорово иметь возможность проверять свои утверждения на модели. Любой, кто интересуется формальными методами, захочет это проверить.

      (Правка: вот ссылка на статью Грега Нельсона или одну из них. - CRM)

18
ответ дан 29 November 2019 в 05:10
поделиться

Хорошая идея. Я думаю, что Scheme - хороший вариант, поскольку он позволяет применять на практике (в виде библиотек) различные абстракции с минимальным набором необходимых вещей. Также легко перевести из схемы в систему проверки, такую ​​как PVS ( http://pvs.csl.sri.com/ )

ура

1
ответ дан 29 November 2019 в 05:10
поделиться

Я вырос на Lisp и Scheme и люблю их обоих. Я считаю, что это отличные языки для изучения с нуля. Но я не уверен, что кто-то с опытом программирования воспользуется этими языками. Вы не получите много просмотров на Amazon из-за вашей книги со схемой в названии. :)

C # - очень простой язык для изучения, и в нем есть все основы, которые могут потребоваться для быстрого погружения в такие темы, как параллелизм. Он имеет больше применимости, потому что вы также можете ориентироваться на объектно-ориентированные и веб-концепции. Он также довольно популярен, и вы можете заставить компании платить за книги своих сотрудников, что всегда полезно для продаж («Быть ​​крутым программистом на C #» гораздо дальше в листе возмещения расходов, чем «Параллелизм в современном Лиспе»).

F # это интересный язык. Это' s получил функциональную красоту Lisp или Scheme (ну, не совсем, но почти) и дает вам некоторую возможность погрузиться в темы ООП, а также подключиться к .NET Framework для материалов пользовательского интерфейса, если вы хотите оживить вещи. Но сейчас это непонятно.

Я не могу разговаривать с Руби, поэтому лично я бы стеснялся и выбрал C #.

3
ответ дан 29 November 2019 в 05:10
поделиться

Я думаю, что вы сами должны иметь некоторый опыт работы с языком, на котором пишете свою книгу, или иметь опытный специалист для проверки вашего кода.

Лично я бы использовал Common Lisp, поскольку Я знаком с этим, и это отличный язык для реализации любой концепции. Другими вариантами могут быть Erlang, Haskell, Ruby или Python, возможно, даже какой-нибудь диалект ML. Я предвзято отношусь к семейству C (включая C # и Java), они, кажется, придерживаются более низкого уровня мышления о концепциях.

1
ответ дан 29 November 2019 в 05:10
поделиться

Игнорируя очевидные ответы на ваш любимый язык программирования , я вижу два полезных ответа:

С одной стороны, вы пытаетесь чтобы продемонстрировать методы тем, кто считается программистами среднего уровня. Если вы выберете один язык и благословите его в качестве языка своих книг, вы, возможно, оттолкнетесь от потенциальных читателей, которые случайно не предпочтут этот язык по той или иной причине. Поскольку вы демонстрируете методы, у вас есть возможность использовать фрагменты на языках, которые кратко иллюстрируют вашу точку зрения. Например, единственный доступный язык для демонстрации RIIA - это, вероятно, C ++, но этот же язык довольно плох для демонстрации того, как выполнять анализ исходного кода. Схема идеальна для анализа источников, но не t дает вам очень много возможностей для изучения преимуществ (и недостатков) строгой типизации. Используйте много языков.

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

7
ответ дан 29 November 2019 в 05:10
поделиться

Честно говоря, я не могу рекомендовать Ruby для этого. Когда я занимаюсь программированием изо дня в день в коммерческом мире, мне это очень нравится, конечно, гораздо больше, чем C или Java. Но его семантика настолько нечетко определена, что я не доверяю ему и вполовину так, как C, где, хотя я могу потратить несколько часов на споры по поводу утверждения и консультации с гораздо более толстой белой книгой, которая заменила K&R, я выхожу в конец достаточно убежден, что если у меня есть соответствующий компилятор (да, я знаю, я мечтатель, но работайте со мной здесь), я знаю, что выходит с другой стороны.

Руби прекрасен во многих отношениях, но что касается формальности, они никогда не встретятся.

Я склонен голосовать за Haskell сам, потому что каждый раз, оборачиваясь, я поражаюсь тому, насколько все имеет смысл в этом определении языка. (Хотя, по общему признанию, всего через год или около того, я уверен, что не исследовал и половины углов даже Haskell 98.)

И я также понимаю, что Дикджстра против функциональности; возвращаясь назад и читая его статьи , он в очень императивном мире; Я не могу сказать, действительно ли он пошел неправильным путем. Возможно, я просто поражен тем, насколько хороши его тексты, а также его мысли. Но, похоже, ему это понравилось, так что насчет использования Algol 60 ?

Возможно, я просто поражен тем, насколько хороши его тексты, а также его мысли. Но, похоже, ему это понравилось, так что насчет использования Algol 60 ?

Возможно, я просто поражен тем, насколько хороши его тексты, а также его мысли. Но, похоже, ему это понравилось, так что насчет использования Algol 60 ?

2
ответ дан 29 November 2019 в 05:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: