16
Общий раздел / Re: С наступающим!
« : Декабрь 26, 2012, 05:05:38 am »
Вырвиглазные шрифты на графиках. А Linux по-российски стабилен в этом плане!
Онлайн компилятор Oberon-07/11
Путеводитель по Оберон-проектам.
Логи jabber-конференции.
Онлайн исходники BlackBox: тут:WeBB и на github
Исходники Project Oberon V4 на github.
Сборник решений задач книги "Современное программирование с нуля!" тут. А обсуждение здесь.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Имхо для оберона проще всего замутить свой байткод и виртуальную машину. Что то вроде P-кода.Будете делать свою VM - повторите не только путь, но и судьбу паскалей. R.I.P.
Повторить путь первых паскалей короче
Реализацию виртуальной машины можно будет под все мыслимые платформы замутить. Там исходник то как помнится строк 300 от силы
Большая часть той коллекции нахер никому не впилась если уж совсем по чесноку.Какая жирная клевета.
2 путь тупиковый - моновендор С++ выдавить не сможет. Тем более моновендор который заточен под винду.Это спорное утверждение. Моновендор может выдавить С++ (из определённых ниш, конечно), но заточенность под одну платформу тут таки помешала бы. А так, у Sun же получилось. Наверное, можно было сконцентрировать усилия на развитии FPC и заточить под него среду разработки (пускай и виндовую, но с возможностью кросс-компиляции). Под OS X и iOS оно в итоге так сейчас и работает.
Да. Это феерично.Вся статья феерична. Глупость почти в каждом предложении.
Сложилась цепочка: математики не могут (или не хотят) понять физику, физики не могут или не хотят понимать химию. Чего же не могут (не хотят) понимать химики? :-)Математику! Круг замкнулся! Мы все умрём!
На самом деле ему приходится быть бухгалтером, дизайнером, физиком и врачом.А не наоборот? Физикам и прочим приходится быть программистами?
Похоже, путь развития Фортрана пошёл по неверному пути, начиная с версии Fortran 90. Собственно, из-за этого у физиков проблемы с Фортраном и начались.Опять с ног на голову. Проблемы закончились. Сейчас как раз начался ренесанс Фортрана. На современном Фортране можно писать почти 1-в-1 как на столь ненаглядном Обероне. Можно даже ключевые слова капсом, кому нужно.
MODULE sorts
USE math
IMPLICIT NONE
PRIVATE
PUBLIC :: sorts_non_recursive_quick_sort, sorts_quick_sort
CONTAINS
! Non-recursive implementation of Quicksort algorithm.
! From N. Wirth, Algorithms and Data Structures, Oberon version: August 2004.
!
SUBROUTINE sorts_non_recursive_quick_sort(array)
INTEGER, DIMENSION(:), INTENT(INOUT) :: array
INTEGER, DIMENSION(:), ALLOCATABLE :: left_bounds, right_bounds
INTEGER :: left_index, right_index, left_bound, right_bound, s, &
pivot_element, temp, stack_size
! The stack size can be limited to lb(n)
stack_size = ceiling(math_lb(real(size(array))))
ALLOCATE (left_bounds(stack_size), right_bounds(stack_size))
s = 1
left_bounds(1) = 1
right_bounds(1) = size(array)
DO
! Take top request from stack.
left_bound = left_bounds(s)
right_bound = right_bounds(s)
s = s - 1
DO
left_index = left_bound
right_index = right_bound
pivot_element = array((left_bound + right_bound) / 2)
DO
DO WHILE (array(left_index) < pivot_element)
left_index = left_index + 1
END DO
DO WHILE (pivot_element < array(right_index))
right_index = right_index - 1
END DO
IF (left_index <= right_index) THEN
temp = array(left_index)
array(left_index) = array(right_index)
array(right_index) = temp
left_index = left_index + 1
right_index = right_index - 1
END IF
IF (left_index > right_index) EXIT
END DO
IF (right_index - left_bound < right_bound - left_index) THEN
! Stack request for sorting right partition ...
IF (left_index < right_bound) THEN
s = s + 1
left_bounds(s) = left_index
right_bounds(s) = right_bound
END IF
! and continue sorting left partition.
right_bound = right_index
ELSE
! Stack request for sorting left partition ...
IF (left_bound < right_index) THEN
s = s + 1
left_bounds(s) = left_bound
right_bounds(s) = right_index
END IF
! and continue sorting right partition.
left_bound = left_index
END IF
IF (left_bound >= right_bound) EXIT
END DO
IF (s < 1) EXIT
END DO
DEALLOCATE (left_bounds, right_bounds)
END SUBROUTINE sorts_non_recursive_quick_sort
SUBROUTINE sorts_quick_sort(array)
INTEGER, DIMENSION(:), INTENT(INOUT) :: array
CALL sort(1, size(array))
CONTAINS
RECURSIVE SUBROUTINE sort(left_bound, right_bound)
INTEGER, INTENT(IN) :: left_bound, right_bound
INTEGER :: left_index, right_index, pivot_element, temp
left_index = left_bound
right_index = right_bound
pivot_element = array((left_bound + right_bound) / 2)
DO
DO WHILE (array(left_index) < pivot_element)
left_index = left_index + 1
END DO
DO WHILE (pivot_element < array(right_index))
right_index = right_index - 1
END DO
IF (left_index <= right_index) THEN
temp = array(left_index)
array(left_index) = array(right_index)
array(right_index) = temp
left_index = left_index + 1
right_index = right_index - 1
END IF
IF (left_index > right_index) EXIT
END DO
IF (left_bound < right_index) CALL Sort(left_bound, right_index)
IF (left_index < right_bound) CALL Sort(left_index, right_bound)
END SUBROUTINE sort
END SUBROUTINE sorts_quick_sort
END MODULE sorts
В общем, я там буду, и буду задавать в меру и не в меру глупые и не скромные вопросы разным докладчикам :-)Нет бы устроить акт самосожжения во славу Оберона...
Наверное как вариант, можно предложить в каждую функцию передавать параметр ошибки, и если он есть, то внутри функции уже не отрабатывать.Передавать не всегда обязательно. Можно просто иметь некую "глобальную" переменную err, например, поле объекта, а вызываться будут его методы.