Gönderen Konu: Yine yaptım bir çılgınlık!  (Okunma sayısı 585 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Alpyre

  • RAAT
  • Retroman
  • *
  • İleti: 96
Yine yaptım bir çılgınlık!
« : 17 Mart 2020, 16:43:14 »
Açık kaynak kodlu AmigaOS3, OS4 ve MorphOS uyumlu sıralama kütüphanesi yazdım.

Yazılım sektöründe mülakatlarda sıralama algoritmalarının sıkça sorulduğunu öğrenince biraz ders çalışayım dedim. Sonra merak edip Aminet'e şöyle bir baktım ki Amiga'da daha güncel sıralama algoritmalarının çoğu yok. Dedim ben neden yapmayayım ki, hem pratik olur, hem de zaten evden çıkmıyoruz, boş oturacağımıza... (... hay demez olaydım, öyle kolay değilmiş o işler).

Neyse bir hafta beyin yaktıktan sonra böyle bir şey çıktı ortaya. Bir sürü şey öğrendim iyi oldu. İlgi duyan, ben bunu kullanırım diyen, içinden kod araklamayı düşünen vs. olursa diye şöyle şuraya bırakıyorum:
https://github.com/alpyre/sort.library

Algoritmaların performanslarını kıyaslayabilmek için şöyle de bir benchmark aracı geliştirdim:

OS4 derlemesiyle ilgili sorunu çözer çözmez çalıştırılabilir binary'ler yakında Aminet'te olacak.
Virüssüz günler efenim.

Çevrimdışı wizofwor

  • RAAT
  • Tedavideki Retromanik
  • *
  • İleti: 363
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #1 : 17 Mart 2020, 17:15:21 »
Beyin yakmanda AmigaOS3, OS4 ve MorphOS uyumlu olmasının payı var mı? Varsa ne kadar?
Gosub ile gidilen yerden goto ile dönen adam

Çevrimdışı Alpyre

  • RAAT
  • Retroman
  • *
  • İleti: 96
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #2 : 17 Mart 2020, 18:41:38 »
Beyin yakmanda AmigaOS3, OS4 ve MorphOS uyumlu olmasının payı var mı? Varsa ne kadar?

%80 falan. Her yer #ifdef __amigaos4__ dolu. Ve korkarım daha da yakacak gibi... binary'leri OS4 ve MophOS'da denedim hatasız derlenmiş olmalarına rağmen ikisi de çalışmadı. SAS/C dönemi ne güzeldi. Kütüphane derlemek için özel linker'lar vardı. Şimdi her detayı elinle yazıyorsun, GCC4'te sıfır hatayla derliyor, çalışmıyor. Aynı kodu hiç ellemeden GCC6'yla derliyorsun sorunsuz çalışıyor. Neyse şimdilik bu sorunu diğer Amiga coder'larına bırakıyorum. Adamlarsa halledip pull request atarlar. :)

Bu Amiga geliştiriciliği GCC'ye göçtüğünden beri her şey kaos. Yavaş yavaş VBCC'ye geçmek lazım sanırım.

Çevrimdışı emarti

  • RAAT
  • Retroman
  • *
  • İleti: 76
  • emarti is coding █
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #3 : 17 Mart 2020, 20:13:33 »
@Alpyre Üstad şu GUI dizaynda gözüme batanlar mevcut ama eline beynine sağlık kodları da ara ara inceliyorum. OS4 ve Morphos ile uğraşma GCC güzel OS3.X'te.

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB

My Retros
     Atari 600XL | 800XL | 1040STFM,
     C128, C64C, C64G, 1541, 1541-II, 1571,
     A500, A600x2 (Furia, Std), A1200x2 (Microbotic, Std)
     ZX Spectrum 48K

Çevrimiçi Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2557
  • Advanced User Simulator
    • ae unutmadan
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #4 : 17 Mart 2020, 22:34:51 »
Eline sağlık Alpyre. Sort işlerini ben de severim.

Neden kütüphane olarak yazdın onu merak ettim. Bunun bir kullanım alanı mı var?

Çevrimdışı Alpyre

  • RAAT
  • Retroman
  • *
  • İleti: 96
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #5 : 17 Mart 2020, 23:22:55 »
Neden kütüphane olarak yazdın onu merak ettim. Bunun bir kullanım alanı mı var?

İki nedeni var aslında.

Birincisi, her sıralama gerektiğinde yeniden algoritma kurup, sonra o algoritmayı elindeki veri yapısına uydurmakla uğraşmak yerine, bir iki parametreyle istenilen veri yapısına göre yapılandırılabilen ve tüm algoritmaları barındıran bir kütüphane olsa fena olmaz diye düşündüm. Şu anda bir ihtiyaç var mı bilmiyorum, ama belki birilerinin işine yarar ilerde. Belki de benim işime yarar. Kim bilir, dursun bi kenarda dedim. :)

Diğer neden de; benim Atom.io editörünü bir AmigaOS IDE'sine dönüştüren bir eklentim var, şurada:
https://github.com/alpyre/language-amigaos-c
(Atom'un arayüzü an itibariyle dünya çapında 988 kişinin kullanmakta olduğunu söylüyor. İlginç bir istatistik. Bu kadar beklemiyordum).

Bir kaç ay önce bu eklentiye otomatik Amiga kütüphanesi kodu oluşturan bir diyalog kutusu ekledim. Söylediğim gibi, GCC'ye geçildiğinden beri kütüphane kodu oluşturmak (hele de farklı Amiga platformlarını desteklemek hedefleniyorsa) roket bilimi gibi bir şey oldu. Bu işi kolaylaştıracak bir şeye ihtiyaç vardı.

Bu diyalog kutusunun oluşturduğu kod ne kadar çalışıyor denemek gerekiyordu. Sort algoritmalarını çalışırken dedim bu fırsatla onu da denemiş olurum. Derken derken, oldu böyle bir şey.

Çevrimiçi Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2557
  • Advanced User Simulator
    • ae unutmadan
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #6 : 17 Mart 2020, 23:49:35 »
Bu tür bilgilerin kümüle olmasına ihtiyaç var amigada zaten, bu bakımdan gerekli bir hizmeti gerçekleştiriyorsun.
ben de bakayım 989 kişi olalım...

Çevrimdışı Alpyre

  • RAAT
  • Retroman
  • *
  • İleti: 96
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #7 : 18 Mart 2020, 17:16:44 »
OS4 ve MorphOS binary'lerini çalıştırmayı başardım ve sorun IDE'mdeki otomatik kütüphane kodu oluşturan koddaymış. MorphOS ve AmigaOS4 için eksik şeyler varmış. Yani plan işe yaradı. Neyse 988 kişiden kimse fark etmeden hemen yamaladım paketi. :D

Çevrimdışı Alpyre

  • RAAT
  • Retroman
  • *
  • İleti: 96
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #8 : 20 Mart 2020, 10:34:16 »
Bu Amiga geliştiriciliği GCC'ye göçtüğünden beri her şey kaos.

İşte bu cümlemin doğruluğun resimli, kodlu, ıslak imzalı delili. Aynı kod, üç farklı platform, iki farklı derleyici sürümü ve sonuçlar (OS3 ve MorphOS binary'leri gcc6 ile derlendi. OS4 ise gcc4, çünkü resmi SDK onunla geliyor). Hayır böyle bir bug'ı nasıl debug ederim en ufak fikrim yok. Uzman önerilerinize açığım. :)

Çevrimiçi Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2557
  • Advanced User Simulator
    • ae unutmadan
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #9 : 20 Mart 2020, 17:16:47 »
derlenmekte olan kodu buraya yapıştırır mısın ya da  link verir misin?

Çevrimdışı Alpyre

  • RAAT
  • Retroman
  • *
  • İleti: 96
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #10 : 20 Mart 2020, 17:33:39 »
İlk iletide vardı. Dur bir daha yazim:
https://github.com/alpyre/sort.library

Çevrimiçi Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2557
  • Advanced User Simulator
    • ae unutmadan
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #11 : 20 Mart 2020, 21:05:16 »
İlk iletide vardı. Dur bir daha yazim:
https://github.com/alpyre/sort.library

hah tamam, çıktı shell penceresine olunca bu baştan yazılmış yeni birşey sandım.

Çevrimdışı Alpyre

  • RAAT
  • Retroman
  • *
  • İleti: 96
Ynt: Yine yaptım bir çılgınlık!
« Yanıtla #12 : 26 Mart 2020, 10:26:39 »
Sorunu çözdüm. AmigaOS4 için varargs kullanımı farklıymış (kafa hep 68k'ya gidiyor). Doğrusunu öğrenip uyguladım ama gel gör ki o da çalışmadı. Baktım bu iş sinir bozacak, OS4 kütüphane koçanından Sort() fonksiyonunu tamamen kaldırdım. Onun yerine inline makro ile tanımladım kendisini (MorphOS ve OS3'de zaten mecburen makro kullanıyorduk, OS4 de aynı oluversin n'olcak). [züğürt tesellisi] Hem binary'de bir kaç bayt küçülmüş oldu, güzel oldu. [/züğürt tesellisi].

Örnek kod bırakayım buraya, yarın öbür gün bir başka deli uğraşırsa bunlarla bir döküman olsun.
Olması gereken: (fakat nedense çalışmayan)
Kod: [Seç]
#ifdef __amigaos4__
LIBPROTOVA(Sort, LONG, REG(a6, __BASE_OR_IFACE), REG(a0, array), REG(d0, size), ...)
{
  __gnuc_va_list ap;
  struct TagItem *tags;

  __builtin_va_start(ap, size);
  tags = va_getlinearva(ap, struct TagItem *);
  __builtin_va_end(ap);

  return CALL_LFUNC(SortA, array, size, tags);
}
#endif

Benim yaptığım: (tıkır tıkır çalışan)
Kod: [Seç]
#define Sort(array, size, ...) ({_sfdc_vararg args[] = {__VA_ARGS__}; SortA((array), (size), args);})