LINUX.ORG.RU

Что нужно из библиотек\фич на джаве, чтобы втулить это в дипломную работу

 , ,


0

1

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

Куда можно глянуть, какой функционал допилить\запилить для каких либ на джаве?

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

Линукс тут при том, что код будет православен и открыт

Перемещено mono из talks

Ты только что поступил?

как его связать с магистерской работой и всякими инновациями в науке

Спроси у руководителя.

olibjerd ★★★★★ ()
Ответ на: комментарий от olibjerd

И он даст очередное ненужно или что-то из матана. А я иллюзий не питаю, я в этом плане полный ноль.

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

by_zero ()

из нужного инновационного и няшного чтобы с байткодом?

запили чтоле @pure для функций без побочных эффектов, с проверкой на этапе сборки

RedPossum ★★★★★ ()
Ответ на: комментарий от by_zero

ну как-то так:

есть у нас метод(статический?) который на вход принимает значение, на выход у него значение, а мир он не меняет. Никакие глобальные переменные не изменяет, никакие значения передаваемых параметров не трогает, из файлов не читает, в консоль не пишет.

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

Только как это все организовать я, честно говоря, и не знаю

RedPossum ★★★★★ ()
Ответ на: комментарий от RedPossum

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

dave ★★★★★ ()

не парься. Запили тупо какую-нибудь систему онлайн-тестирования (заодно поучишь Java, Servlets, JSP etc.), получи диплом - а потом либо иди работать, либо начинай стартап и приноси пользу людям

kovrik ★★★★★ ()

Специальность озвучь. Или я все пропустил и вместо диплома уже можно аудиоплеер написать и защитится? Нас 2 года назад довольно строго ограничивали рамками направления и специальности.

aidan ★★★★ ()

наваяй вменяемый аналог перловского Data::dumper для явы. То, что есть, работает достаточно коряво, я лезть амостоятельно разгребать reflection ради эпизодического дебага вечно лень.

arkhnchul ★★ ()

Не будет ваш код православным, ибо будет принадлежать вузу.

Deleted ()
Ответ на: комментарий от cdshines

чтобы было, вообще о таком для scala одерский заикался пару лет назад, но все чего-то не чешется.

RedPossum ★★★★★ ()
Ответ на: комментарий от cdshines

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

RedPossum ★★★★★ ()
Ответ на: комментарий от cdshines

Что подтверждает уместность моего вопроса.

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

RedPossum ★★★★★ ()
Ответ на: комментарий от RedPossum

Удваиваю. Было бы удобно. Как минимум разгребать чужой кот.

anonymous ()
Ответ на: комментарий от RedPossum

запили чтоле @pure для функций без побочных эффектов

И @total тогда ещё за одно, для функций отрабатывающих за конечное время и без ошибок.

quasimoto ★★★★ ()
Ответ на: комментарий от quasimoto

для функций отрабатывающих за конечное время

шутить изволите?

RedPossum ★★★★★ ()
Ответ на: комментарий от kovrik

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

by_zero ()
Ответ на: комментарий от aidan

информационные системы

по факту можно даже вообще не написать ни строчки кода и защитить диплом. Это вам не МИТ и прочие бауманки

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

хочется интересное что-то писать, а не хрень, которая потом никому нафиг не нужна в итоге

by_zero ()
Ответ на: комментарий от RedPossum

Хоспаде, вы со своими чистыми методами упоролись вообще. Никто не спорит, что это интересная концепция, но нужно же головой думать. На одних чистых методах далеко не уедешь (да что там, ты же даже i/o никакого не сможешь сделать толком).

cdshines ★★★★ ()
Ответ на: комментарий от cdshines

На одних чистых методах далеко не уедешь (да что там, ты же даже i/o никакого не сможешь сделать толком).

Хаскелль смотрит на тебя с недоумением и укоризной.

ovk48 ★★★ ()
Ответ на: комментарий от by_zero

Напиши распределенную NoSQL базу данных с шахматами и библиотекаршами.

anonymous ()
Ответ на: комментарий от cdshines

putStrLn является чистой функцией (она обычно похожа на вычисление в монаде State). Никакого противоречия.

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

dave ★★★★★ ()
Последнее исправление: dave (всего исправлений: 1)
Ответ на: комментарий от by_zero

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

anonymous ()
Ответ на: комментарий от dave

Там же написано, что

The trick is that main evaluates not to a simple value but to an action. The runtime then executes this action.

So the program itself has no side effects, but the action does.

То есть, эта говноотмазка «программы не имеют эффектов, эффекты только у экшонов, которые программа вызывает» - это прилично?

cdshines ★★★★ ()
Ответ на: комментарий от cdshines

Ну, вот типичная ошибка непонимания. В action ничего особенного нет. Просто так принять называть вычисления, завязанные на IO. Их еще называют императивными вычислениями.

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

putStrLn явно говорит, что возвращает вычисление IO. Это уже дело этого вычисления произвести или не произвести какой-то там побочный эффект (когда придет время через main), но сама функция putStrLn абсолютно чиста. Просто IO выступает как маркер «здесь мы контролируем побочный эффект».

Вообще, сама идея использовать такие маркеры подобные IO очень полезна и плодотворна в хаскеле. Таким способом можно маркировать не только побочные эффекты, но и функциональную зависимость от чего-нибудь, а потом разруливать это дело через функцию запуска, но боюсь, что это тема для многих еще более сложная :)

dave ★★★★★ ()
Ответ на: комментарий от cdshines

Да много где. Считается, что чистая функция - такая функция, результат которой зависит только от входных параметров. Результат функции putStrLn - вычисление IO. Этот результат зависит только от аргументов функции putStrLn, и больше ни от чего другого.

Фокус состоит в том, что потом (через main) происходит этап применения того вычисления IO, которое вернула функция putStrLn. Вот это вычисление уже и может произвести побочный эффект, но это дело стандартной библиотеки. Побочные эффекты оказываются под контролем. Они случайно не могут возникнуть, вот в чем пойнт.

В общем, я хочу сказать. В хаскеле есть побочные эффекты, такие же как в других языках, и даже круче (recursive-do). При этом язык является чистым. Да, выглядит необычно :)

dave ★★★★★ ()
Ответ на: комментарий от cdshines

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

RedPossum ★★★★★ ()
Ответ на: комментарий от cdshines

Сигнатуры - это уже в применении к статически типизированному языку. Главное - это зависимость выхода только от входа.

dave ★★★★★ ()
Ответ на: комментарий от RedPossum

шутить изволите?

Вполне серьёзно.

Если ты видел — IDEA для скалы рисует спирали для рекурсивных функций и кружки для хвостовой рекурсии. У меня как-то был баг — JVM падала в SO, так как в рекурсивный вызов не то передавалось и функция зависала вплоть до SO (а ведь может и просто повиснуть). Вот пусть рисует что-нибудь для гарантированно завершаемых функций без исключений :)

Касательно проблемы останова — есть класс функций для которых она разрешима (где-то между PR и R), в этом классе достаточно много практически-полезных функций (ещё нужно вспомнить что циклы можно видеть как сахар над рекурсией, так что их анализ сводится к тому же анализу последней), в остальном — false negatives, то есть функция вне этого класса может быть тотальной, но такой разрешимый алгоритм этого знать не может (так как в общем случае для R это неразрешимая проблема), поэтому просто отбрасывает её вместе с остальными незавершаемыми функциями.

Кроме того, если помогать компилятору, то можно доказать завершаемость чего-угодно из R, уже без false negatives (well-founded recursion).

quasimoto ★★★★ ()
Последнее исправление: quasimoto (всего исправлений: 1)
Ответ на: комментарий от cdshines

Ну, если совсем просто, то технически вычисление IO - это функция, для которой единственно разрешены неконтролируемые побочные эффекты. Но это уже не haskell, а промежуточный язык более низкого уровня (как я понимаю). Для хаскеля же все побочные строго скрыты за оболочкой IO. Во всяком случае компилятор делает такое предположение, и неправильное применение unsafePerformIO может привести к генерации неправильного кода (у меня такое было - потом вовсе отказался от unsafePerformIO).

Так вот, компилятор хаскеля настолько умен, что он умеет очень эффективно оптимизировать код, где много функций. И получается часто, что результирующий код из вычислений IO оказывается таким же эффективным, как и код на Java или C#. Это завораживает, конечно.

dave ★★★★★ ()
Ответ на: комментарий от cdshines

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

Эта «интересная концепция» уже много десятилетий используется во всех оптимизирующих компиляторах. Однако оптимизатор не всегда может доказать чистоту, а кодер может случайно испортить чистую функцию, поэтому в gcc есть специальный __attribute__((pure))

annulen ★★★★★ ()

напиши http://www.thebrain.com для андроида. с открытым кодом. говорят они уже чешутся и пилят андроид-версию но ты сможешь быть первым

Karapuz ★★★★★ ()
Ответ на: комментарий от dave

Я спрашивал не про это, а где дано такое определение чистых фунуций.

cdshines ★★★★ ()
Ответ на: комментарий от by_zero

Разве дадут по информационным системам защищать какой-то программный модуль, или что-то не являющееся ИС? Подумай о том что будешь писать в тексте диплома. Должна быть решена какая-то практическая задача, иначе не представляю как защищать.

З.Ы. Не советую особо заморачиваться с дипломом. Это в конечном итоге никому не нужно, комиссия может тупить и в упор не понимать в чём смысл не типовых решений, а так-же засыпать вопросами. Лучше параллельно с дипломом заниматься чем-то для себя/работать.

oRLaN ()
Ответ на: комментарий от oRLaN

Разве дадут по информационным системам защищать какой-то программный модуль, или что-то не являющееся ИС?

Как говорил мой завкаф:«Да хоть игру пишите, как защитить придумаем».

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

То есть зависит от самой кафедры, я так понимаю.

RedPossum ★★★★★ ()
Ответ на: комментарий от cdshines

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

dave ★★★★★ ()
Ответ на: комментарий от anonymous

Анончик, dave, прошу прощения, я почитал тут кое-где и понял, что у меня каша в голове. Во-первых, я спутал ссылочную прозрачность и чистоту (кстати, если функция имеет вид {println(...); return 100} - она же не прозрачна? В смысле, если подставить вместо нее просто 100 - это же не полная замена?), а во-вторых, как-то ниочинь знал само определение.

Объясните, пожалуйста, вот что: в это вашем х-скеле IO-функции считаются чистыми, потому что в рамках языковых правил самого хаскеля оно соответствуют определению, но при интерпретации, например, в язык ВМ/байткод это уже не соблюдается, и при этом мы такие функции с точки зрения программиста все равно считаем чистыми?

cdshines ★★★★ ()
Ответ на: комментарий от dave

Что такое «вычисления IO»?

И да, если конпелятор поставляет поддержку функции, которая, например, пишет мусор на диск, но делает то, что от нее хотят, и этот мусор в ходе работы программы никак на нее не влияет, это чистая функция?

cdshines ★★★★ ()
Ответ на: комментарий от cdshines

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

anonymous ()
Ответ на: комментарий от cdshines

Что такое «вычисления IO»?

Процесс выполнения всех необходимых эффектов в рамках RTS для соответствующего терма main типа IO a.

Вот тут:

{-# LANGUAGE GADTs, KindSignatures #-}

import Prelude hiding ( IO, putStrLn, getLine )

data IO :: * -> * where
  Return :: a -> IO a
  Bind :: IO a -> (a -> IO b) -> IO b
  PutStrLn :: String -> IO ()
  GetLine :: IO String
  -- ...

instance Monad IO where
  return = Return
  (>>=) = Bind

putStrLn :: String -> IO ()
putStrLn = PutStrLn

getLine :: IO String
getLine = GetLine

main' :: IO ()
main' = do
  name <- getLine
  putStrLn name
  putStrLn "I'm pure-pure-pure :/"

с точки зрения абстрактного хаскеля всё чисто (с точки зрения денотационной семантики этого языка), main' в нормальной форме это просто некий терм типа IO (), то есть дерево/AST представляющее описание императивной программы. Но с точки зрения компилятора (и вообще операционной семантики RTS) это описание нужно скомпилировать в представление RTS, задействовать её функции, так чтобы при выполнении/запуске скомпилированного кода правильно выполнились все эффекты. То есть можно сказать, что тип и функции IO описывают теорию вычислений с эффектами в чистом языке, а компилятор (интерпретатор) уже реализует модель такой теории.

quasimoto ★★★★ ()
Последнее исправление: quasimoto (всего исправлений: 1)
Ответ на: комментарий от cdshines

В чистом языке println ты просто так не напишешь. Ты можешь только вернуть некое вычисление, которое потом совершит это действие.

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

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

На самом деле, тема довольно сложная.

P.S. Теперь, чтобы совсем запутать :) Фактически, вычисление IO очень похоже на монаду State, только здесь передается некоторое условное состояние мира по цепочке вычислений - поэтому простой do позволяет описывать императивную последовательность действий, но это происходит в силу свойств композиции функций (и это задуманное совпадение), а не в силу каких-то особых свойства монад (как думают многие). Вычисление IO вполне может быть непоследовательным и неупорядоченным при использовании mdo, например, как и существуют монады, для которых вычисление даже в рамках do может совершаться с конца в начало, что совершенно неестественно для неленивых языков.

dave ★★★★★ ()
Последнее исправление: dave (всего исправлений: 1)
Ответ на: комментарий от cdshines

И да, если конпелятор поставляет поддержку функции, которая, например, пишет мусор на диск, но делает то, что от нее хотят, и этот мусор в ходе работы программы никак на нее не влияет, это чистая функция?

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

Может быть, этот момент остался на совсем ясен, но та же putStrLn при вызове фактически возвращает другую функцию как свой результат. В твоем же случае функция при вызове вернет тоже другую функцию (вычисление IO), которая уже при своем вызове напишет мусор на диск, а иначе никак. Пойнт в том, что вот эту вторую возвращенную как результат функцию по хорошему (без unsafePerformIO) сам ты никак уже не можешь вызвать. Она вызывается через main.

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

dave ★★★★★ ()
Последнее исправление: dave (всего исправлений: 1)
Ответ на: комментарий от dave

То есть, возвращаясь к изначальному посту, можно сказать, что @pure, если его реализовать для джавы, будет неполноценным костылем просто в силу того, что в джаве нет вот такого «возвращения вычислений IO»? Если я правильно понял.

А если я возвращаю какое-то Callable, у которого call() просто вызывает println() - это слегка похоже на принцип работы этого в хаскеле?

cdshines ★★★★ ()
Последнее исправление: cdshines (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.