Когда смешать языки?

Я уверен, что Apple раздражала многих людей этим изменением. Я разрабатываю приложение для бухгалтерии для iOS и имею онлайн-сервис для синхронизации изменений, сделанных на разных устройствах. Служба поддерживает базу данных всех устройств и изменений, которые необходимо распространить на них. Поэтому важно знать, какие устройства какие. Я слежу за устройствами, использующими UIDevice uniqueIdentifier, и за то, что оно того стоит, вот мои мысли.

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

  • Создать UUID и сохранить в цепочке для ключей? Это был мой план, поскольку он сохраняется даже при удалении приложения. Но при восстановлении резервной копии iTunes на новое устройство iOS цепочка для ключей передается, если резервная копия зашифрована. Это может привести к тому, что два устройства будут содержать один и тот же идентификатор устройства, если и старое, и новое устройства находятся в эксплуатации. Они должны быть указаны как два устройства в онлайн-сервисе, даже если имя устройства совпадает.

  • Сгенерировать хеш MAC-адрес и идентификатор пакета? Это выглядит как лучшее решение для того, что мне нужно. Хэшируя с идентификатором пакета, сгенерированный идентификатор устройства не позволяет отслеживать устройство между приложениями, и я получаю уникальный идентификатор для комбинации приложение + устройство.

Интересно отметить, что собственная документация Apple относится к проверке Mac квитанций App Store путем вычисления хэша системного MAC-адреса плюс идентификатор комплекта и версия. Так что это кажется допустимым политикой, независимо от того, проходит ли это через проверку приложения, я пока не знаю.

7
задан Dan Rigby 2 May 2012 в 19:52
поделиться

11 ответов

Что ж, наиболее очевидная (и наиболее распространенная) ситуация возникает, когда вы используете какой-либо язык высокого уровня для большей части своей программы, извлекая преимущества быстрой разработки и надежности, в то же время используя некоторые язык более низкого уровня, такой как C или даже ассемблер, для увеличения скорости там, где это важно.

Кроме того, часто бывает необходимо взаимодействовать с другим программным обеспечением, написанным на каком-либо другом языке. Хорошим примером здесь являются API-интерфейсы, предоставляемые операционной системой - они обычно написаны с учетом C (хотя я помню некоторые старые версии MacOS с использованием Pascal). Если у вас нет родной привязки для инфраструктуры компилятора языка, вам нужно написать некоторый интерфейсный код, чтобы «склеить» вашу программу с «другой стороной».

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

И последнее, но не менее важное: иногда у вас под рукой есть кучи старого и проверенного кода, написанного на другом языке, от использования которого вы могли бы извлечь пользу. Вместо того, чтобы изобретать колесо на новом и лучшем языке, вы можете просто связать его со своей новой программой. Это, вероятно, самый обычный (если не единственный) случай, когда языки, предназначенные для схожего использования, смешиваются вместе (вы упомянули C ++ и Fortran?).

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

5
ответ дан 6 December 2019 в 07:07
поделиться

Например, в видеоиграх мы используем разные языки для разных целей:

  • Код приложения (игры) : должен быть быстрым, организованным и в большинстве случаев кроссплатформенным. (по крайней мере, следует предусмотреть MacOS), часто на платформах с высокими ограничениями (консолях), поэтому используется C ++ (а иногда и C и asm).
  • Средства разработки : инструменты проектирования уровней генерируют данные, которые код игры будет играть с. Такие инструменты не обязательно запускать на целевой платформе (но если можно, их проще отлаживать), поэтому часто они создаются с помощью языков быстрой разработки, таких как C #, Python и т. Д.
  • Система сценариев : некоторые части игр должны быть изменены дизайнерами с использованием переменных или скриптов. Это' На самом деле проще и дешевле встроить язык сценариев вместо того, чтобы писать его, поэтому часто используются Lua или другие подобные языки сценариев.
  • Веб-приложение : иногда игра требует предоставления некоторых данных в Интернете, чаще всего в базе данных доступ с помощью SQL. Затем веб-приложение написано на языке, который может быть C #, Ruby (ROR), Python, PHP или любым другим, подходящим для работы. Поскольку это касается Интернета, вам также придется использовать HTML / Javascript.
  • и т. Д.

В моей игре я также использую HTML / Javascript для графического интерфейса.

PHP или что-нибудь еще, что подходит для работы. Поскольку это касается Интернета, вам также придется использовать HTML / Javascript.
  • и т. Д.
  • В моей игре я также использую HTML / Javascript для графического интерфейса.

    PHP или что-нибудь еще, что подходит для работы. Поскольку это касается Интернета, вам также придется использовать HTML / Javascript.
  • и т. Д.
  • В моей игре я также использую HTML / Javascript для графического интерфейса.

    [EDIT]

    Отвечу на вашу правку: язык, который вы знаете лучше всего, не всегда является наиболее эффективным инструментом для работы. Вот почему, например, я использую C ++ для своей самодельной игры, потому что я знаю его лучше всего (я мог бы использовать множество других языков, поскольку целями являются Win / Mac / Linux, а не консоли), но я использую Python для всего, что связано с процессом сборки , манипулирование файлами и т. д. Я не знаю Python глубоко, но с ним легче выполнять быстрые манипуляции с файлами, чем с C ++. Я бы не стал использовать C ++ для веб-приложений по очевидным причинам.

    В конце концов, вы используете то, что эффективно для работы. Вот чему вы научитесь, работая в условиях реального мира, имея в виду деньги, время и качество.

    11
    ответ дан 6 December 2019 в 07:07
    поделиться

    В зависимости от того, к какой парадигме относится язык, у него есть свои плюсы и минусы. Например, можно использовать возможности графического интерфейса пользователя C #, но использовать эффективные возможности обратного отслеживания или возможности искусственного интеллекта Prolog (язык в логической парадигме) чтобы вычислить некоторые детали перед их отображением.

    Упрощенный пример

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

    (Потенциально) Я бы:

    1.) Создание визуальных элементов с помощью библиотек графического интерфейса Windows.

    2.) Рассчитайте возможные ходы с помощью Prolog и выберите лучший / наиболее жизнеспособный ход.

    3.) Получить результаты шага 2 из Prolog в моем коде C # и отобразить результаты.

    4.

    1
    ответ дан 6 December 2019 в 07:07
    поделиться

    Я знаю, что в своем вопросе вы как бы исключили это, но для разных доменов используются разные языки.

    Прямо сейчас я работаю над визуализатором данных, данные в базе данных, поэтому, конечно, есть SQL, но это вряд ли имеет значение, потому что он небольшой и часто требуется. Данные превращаются в серию графиков, я использую R, который похож на MATLAB, но с открытым исходным кодом. Это уникальный статистический язык с некоторыми расширенными функциями построения графиков.

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

    Как вы тщательно разрабатываете javascript и html на основе структуры базы данных, которая меняется по мере того, как остальная часть моей команды делает успехи? Они создаются программой Perl (на самом деле однопроходный сценарий), которая считывает в базу данных некоторую структуру и ключевую информацию, а затем выводит более 300 килобайт HTML / js. Это тоже не совсем тривиальный html, карты изображений, которые тщательно выровнены с графиками R, и некоторый javascript onclick () позволяют пользователю фактически взаимодействовать с графиком простого изображения, поэтому все это выглядит как реальное приложение браузера / визуализатора данных.

    Это четыре «языка», пять, если считать SQL, просто для создания единого конечного продукта.

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

    4
    ответ дан 6 December 2019 в 07:07
    поделиться
    • Когда 2 головы лучше, чем одна.

      Я часто видел игры, в которых флеш-память была встроена в C # - с ИИ и другим тяжелым кодом, работающим на C ++ DLL.

    • Когда вынуждали

      Написание нового кода для расширения новой системы, поддерживаемой старой framework

    0
    ответ дан 6 December 2019 в 07:07
    поделиться

    Прекрасным текущим примером было бы написание методов для создания XML-документов в VB.NET, который имеет функцию «XML-литералы», которой нет в C #. Поскольку это оба языка .NET, нет причин не вызывать один из другого:

    Public Function GetEmployeeXml (ByVal salesTerritoryKey As Integer) As XElement
        Using context As New AdventureWorksDW2008Entities
            Dim x = <x>
                    <%= From s In context.DimSalesTerritory _ 
                    Where s.SalesTerritoryKey = salesTerritoryKey _
                    Select _
                    <SalesTerritory 
                        region=<%= s.SalesTerritoryRegion %>
                        country=<%= s.SalesTerritoryCountry %>>
                        <%= From e in s.DimEmployee _
                            Select _
                        <Employee firstName=<%= e.FirstName %> lastName=<%= e.LastName %>>
                             <%= From sale in e.FactResellerSales _
                                 Select _
                            <Sale 
                                orderNumber=<%= sale.SalesOrderNumber %>
                                price=<%= sale.ExtendedAmount %>/>  %>
                        </Employee> %>
                    </SalesTerritory> %>
                    </x>
            Return x
        End Using 
    End Function  
    
    2
    ответ дан 6 December 2019 в 07:07
    поделиться

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

    0
    ответ дан 6 December 2019 в 07:07
    поделиться

    Основная причина, по которой вы смешиваете языки, заключается в том, что один язык имеет преимущества в определенных областях, а другой - в других. Итак, вы пытаетесь использовать возможности обоих, соединяя их вместе. Типичным примером является использование C и ASM, потому что C более абстрактный и упрощает выполнение более сложных задач в программе, однако вы можете использовать ASM для работы с оборудованием и процессором базового уровня. Таким образом, они часто смешаны, учитывая природу C и его использование во встроенных системах.

    1
    ответ дан 6 December 2019 в 07:07
    поделиться

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

    В финансовом мире часто приходится поддерживать программы в рабочем состоянии (или заменять их) 50 лет. При замене технологий каждые 10 лет новые контракты (ипотека, страхование жизни) заключаются на новейшем языке / среде. Четыре старых просто обрабатывают ежемесячные платежи и вносят изменения в существующие контракты. Чтобы знать, как обстоят дела в компании, вам необходимо интегрировать данные из всех пяти систем.

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

    Веб-приложения , вероятно, не должны быть смешанными языками для разработчика. Smalltalk прекрасно справляется с задачей, с Gemstone для настойчивости и Seaside в качестве среды веб-приложений. Несколько языков (javascript) можно скрыть во фреймворке.

    1
    ответ дан 6 December 2019 в 07:07
    поделиться

    Программирование устройств - обычно вы хотите запрограммировать пользовательский интерфейс с использованием собственного языка пользовательского интерфейса ОС (например, Java для Android), но вам нужно будет запрограммировать драйверы устройств с помощью чего-то большего на низкий уровень (например, C).

    0
    ответ дан 6 December 2019 в 07:07
    поделиться

    У людей здесь большая причина. Я просто возьму вот это:

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

    0
    ответ дан 6 December 2019 в 07:07
    поделиться
    Другие вопросы по тегам:

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