Скажем, я хочу записать сервер в Haskell. Вид, который имеет высокий параллелизм и простую обработку. Вид, который был бы устойчив к отказам и предложил бы высокую доступность. Вид, для которого Erlang был бы хорош.
С чего был бы хороший набор инструментов, ли платформа или ряд примитивов, для запуска?
Excel имеет функцию Текст в столбцы
в меню Данные
, которая позволяет указать пользовательский разделитель. Я предполагаю, что номера будут иметь аналогичную функциональность. Если да, то решение состоит в копировании и вставке непосредственно в документ Numbers, а затем преобразовании этих текстовых ячеек в столбцы, указывающие |
в качестве разделителя.
Используйте мастер для приложения на панели табуляции и установите его в нормальное состояние. На любой вкладке, на которой требуется добавить контроллер навигации, создайте его в XIB с помощью библиотеки. Мой XIB имеет:
- File's Owner DescriptiveNameNavViewController - First Responder - View UIVIew - Navigation Controller UINavigationController - Navigation Bar UINavigationBar
Обратите внимание, что в представлении нет ничего. Сведения о том, где UINavigationController подключается к UIView, см. в разделе viewDidLoad ниже.
В файле заголовка для ViewController Tab (который я здесь назвал DescriptiveNameNavViewController - для этого нет конкретного стандарта, но я использую [что-то] NavViewController, чтобы напомнить мне, что этот ViewController содержит навигационный контроллер со стеком навигации. Это имя контроллера, установленное в файле MainWindow.xib, который генерирует мастер) Набор UINavigationController * IBOutlet, к которому подключен контроллер навигации в XIB:
@interface DescriptiveNameNavViewController : UIViewController {
UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
В контроллере дескриптора NameNavViewController выполните следующее:
- (void)viewDidLoad {
[super viewDidLoad];
[[self view] addSubview:[navigationController view]];
DescriptiveNameController *aController = [[[DescriptiveNameController alloc ] initWithNibName:@"DescriptiveNameController" bundle:nil ] autorelease];
aController.title = @"Descriptive Title";
//
// app stuff goes here.
//
[self.navigationController pushViewController:aController animated:YES];
[self.navigationController setDelegate:self];
}
Настройка делегата в DescriptiveNameNavViewController является сверхважной, так как в противном случае вы не получите методы, которые ожидаются в экземплярах DescriptiveNameViewController, и все остальное, что вы вставляете в стек навигационного контроллера.
В DescriptiveNameNavViewController реализуйте методы UINavigationControleyDelegate так:
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
[viewController viewDidAppear:animated];
}
}
И это вызовет распространение сообщений на контроллеры внутри UINavigationController, как и ожидалось. Кажется, что многие проблемы, с которыми сталкиваются люди, связаны с тем, что viewDidAppean: или другие методы не вызываются на ViewControllers, вставляемых в NavigationController.
В любом случае, дайте мне знать, если больше деталей поможет.
-121--3842453-Именно в этом и состоит Хаскелл. Она обладает отличной поддержкой многоядерного параллелизма, поэтому при использовании большего количества потоков можно легко воспользоваться преимуществами дополнительных ядер. Однако помните, что Haskell стремится к высокой производительности на многоядерных процессорах, Erlang немного отличается, делая акцент на распределенных системах больше, а не столько на необработанной производительности (например, см. игру бенчмарков, http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=ghc&lang2=hipe Haskell почти всегда намного быстрее и использует гораздо меньше памяти).
Теперь, чтобы начать:
Вы можете начать с примеров в Real World Haskell, чтобы узнать о forkIO и легких потоках Haskell, http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html
Документы GHC по инструментам параллелизма, http://haskell.org/haskellwiki/GHC/Concurrency
Библиотека, чтобы посмотреть на массивные,масштабируемый сетевой код - это библиотека событий http://github.com/tibbe/event , которая позволяет легко использовать epoll в качестве метода приема событий из сети. Вот простой пример: http://donsbot.wordpress.com/2010/01/17/playing-with-the-new-haskell-epoll-event-library/
Подробнее об основах см. в учебном пособии Саймона Марлоу по созданию параллельного веб-сервера: http://www.haskell.org/~simonmar/bib/webserverjfp_abstract.html
Вы должны найти эту задачу относительно легко и весело!
Отличное место для начала - фундаментальная работа Саймона Пейтона Джонса The Awkward Squad.
... Недавно я услышал доклад, который может показаться вам интересным. Подробности на сайте galois