2010-10-21 2 views
2

Hio there Scala folks, я на самом деле пишу свою магистерскую диссертацию, и мне нужно внедрить язык с проверкой безопасности в Scala. Таким образом, это означает, что я должен добавлять аннотации, чтобы указать специальные уровни разрешений для переменных и других программных конструкций в Scala. Идея добавить это исходит от Jif (настоящий секретный код безопасности http://www.cs.cornell.edu/jif/) и FlowCaml (http://www.normalesup.org/~simonet/soft/flowcaml/). Мне еще нужно проверить, как эти языки добавляют свои расширения безопасности.Реализация варианта безопасности Scala с защитой, который лучше всего подходит?

Я разговаривал с моим советником, и он предложил три варианта, как я могу реализовать эту функцию в Scala:

  1. источник-исток компилятор (я не думаю, что это самое лучшее решение, чтобы написать вещи с нуля, потому что я буду занят синтаксическим анализатором и семантикой, и из собственного опыта я знаю, что у меня недостаточно времени для работы над основным материалом)
  2. плагин для проверки типов (я еще не написал плагин для компилятора и думаю, что это просто не будет работать в других версиях Scala, потому что компилятор все еще находится в разработке)
  3. bu ild библиотека в Scala (синтаксис здесь просто бесплатный, поэтому я могу легко создать что-то вроде этого на языке, который я хочу => думаю, что это похоже на изобретение DSL, и я считаю, что это лучшее решение)

Если у вас есть другая идея, как реализовать, пожалуйста, дайте мне знать, и если у вас есть плюсы и минусы для методов, упомянутых выше, пожалуйста, дайте мне знать. Я убежден, что после этого проекта я буду изучать программу с удовольствием в Scala (я знаком с Java и Ruby).

Приветствия

Маттиас Гюнтер

ответ

1

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

Вы можете быть уверены, что API-интерфейс плагина компилятора останется стабильным в течение срока действия магистерской диссертации, и вы должны изучить scala.tools.nsc.symtab.AnnotationCheckers и Google, например плагины, которые реализуют проверку времени компиляции (например, (т. е. T @NonNull <: T, но не T <: T @ NonNull), который структурно похож на простейшую нетривиальную схему типизированной защиты.

+0

Привет, Майлз, это именно то, что я искал. Теперь начнется исходный код боя. –

1

Ого, это довольно значительный проект!

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

Я очень сомневаюсь, что вы можете реализовать безопасность как библиотеку в стиле Peng Li and Steve Zdancewic или Alejandro Russo. Причина в том, что Scala может иметь побочные эффекты во всем мире и что в значительной степени разрушает любые гарантии безопасности, которые вы можете попытаться обеспечить.

Удачи вам!

+0

Здравствуйте, sveningsson, мне не нужно доказывать надежность, потому что это много.Но спасибо за то, что со зданием библиотеки я поговорю завтра с моим советником и давайте посмотрим, каков будет вывод. Имеются ли побочные эффекты, о которых вы говорили в Scala, являются ли переменные переменными первоклассными гражданами этого языка? –

+0

Мутация переменных, ввод-вывод, эти вещи действительно затрудняют принудительное применение какой-либо безопасности, используя только библиотечный подход. – svenningsson

+0

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