Merhaba Habr! Dikkatinize Stephen Wolfram'ın yazısının çevirisini sunuyorum
Wolfram dilinin tutarlılığı için önkoşullar
Bugün programlama diliyle birlikte büyük başarıların eşiğindeyiz
Wolfram İşlev Havuzu, Wolfram Dilinin benzersiz doğası sayesinde yalnızca bir programlama dili olarak değil aynı zamanda bir programlama dili olarak da mümkün kılınmıştır.
Örneğin, Wolfram işlev deposu zaten şunları içeriyor:
Aynı şekilde daha fazla
Sayfaya ulaşmak için yukarıdaki nesneyi (BLOB işlevi) kopyalayın, giriş satırına yapıştırın ve ardından işlevi çalıştırın; bu, Wolfram dilinde zaten yerleşiktir ve ile başlayarak varsayılan olarak desteklenir:
Burada şunu belirtmek gerekir ki, işlem yapılırken
Umarım desteğinizle
Depodaki işlevler Wolfram Dilinde yazılmış küçük veya büyük kod parçaları içerebilir. Örneğin bunlar aramalar olabilir
Wolfram Özellik Havuzunun kabuk ve programlama yapısı, herkesin ortak amaca kendileri için en basit ve kullanışlı şekilde katkıda bulunabileceği şekilde tasarlanmıştır - aslında sadece
Bu yaklaşımda pek çok taviz ve ayrıntı var, ancak amacımız Wolfram özellik deposunu hem kullanıcı deneyimi için optimize etmek hem de yeni kullanıcı özelliklerinin dilin gelişimine anlamlı katkıda bulunmasını sağlamaktır. Büyüdükçe, özellikle çok sayıda işlevi düzenlemek ve kullanıcıların ihtiyaç duyduğu işlevleri bulmak için, depoda yerleşik işlevleri işlemek ve doğrulamak için yeni yöntemler icat etmemiz gerekeceğinden hiç şüphem yok. Ancak seçtiğimiz yolun iyi bir başlangıç olması cesaret verici. şahsen
Maliyetleri azaltırken verimliliği artırmak
İnternetten önce bile Wolfram Dil kodunu paylaşmanın yolları vardı (ilk büyük merkezi projemiz
Şirketimiz 30 yılı aşkın bir süredir Wolfram dil yapısının bütünlüğünü korumak için özenle çalışmaktadır ve bu, Wolfram dilinin yalnızca bir programlama dili değil aynı zamanda bir programlama dili olmasını sağlamak için kritik öneme sahiptir.
Her fonksiyonun uygulama yapısında çeşitli hesaplama süreçleri meydana gelir. Burada şunu belirtmek gerekir ki fonksiyonun net ve yeknesak bir görünüme sahip olması ve kullanıcı açısından görsel olarak okunabilir olması gerekmektedir. Bu bağlamda Wolfram Dilinin yerleşik işlevleri, işlevlerin nasıl doğru şekilde programlanacağına ilişkin 6000'den fazla sıralı örnekle sunulmaktadır (bunlar bizim çalışmamızdır).
Gerçekten iyi çalışan bir depo oluşturmak ilginç bir meta programlama görevidir. Örneğin, programdaki aşırı kısıtlamalar, algoritmanın gerekli birleşiminin ve evrenselliğinin elde edilmesine izin vermeyecektir. Yetersiz sayıda işlevsel kısıtlamada olduğu gibi, yeterince doğru bir algoritma yürütme sırasını uygulayamayacaksınız. Şirketimiz tarafından uygulanan bu yaklaşımların bir uzlaşmasının uygulanmasına ilişkin önceki birkaç örnek oldukça istikrarlı bir şekilde çalıştı - bunlar:
Yukarıdaki örneklerin hepsinin temel bir özelliği vardır - projede toplanan nesneler ve işlevler, süreçlerin çok yüksek düzeyde yapılandırılmasına ve dağıtılmasına sahiptir. Elbette bir demo veya sinir ağı veya başka bir şeyin yapısının ayrıntıları büyük ölçüde değişebilir, ancak mevcut herhangi bir veri havuzunun temel yapısı her zaman aynı kalır. Peki sevgili kullanıcı, Wolfram diline uzantılar ekleyen böyle bir veri havuzu oluşturma konusundaki fikriniz nedir? Wolfram Dili son derece esnek olacak şekilde tasarlanmıştır, dolayısıyla herhangi bir şekilde genişletilebilir ve değiştirilebilir. Bu durum Wolfram Dilinde çeşitli büyük ölçekli yazılım projelerinin hızlı bir şekilde oluşturulabilmesi için son derece önemlidir. Burada şunu belirtmek gerekir ki dilin esnekliği arttıkça böyle bir dilde yürütülen projelerin maliyeti de kaçınılmaz olarak artacaktır. Bunun nedeni, kullanıcı böyle bir dili ne kadar çok kullanırsa, o kadar çok özel işlevsellik alır, ancak bu yaklaşımın program modüllerinin tutarlı tutarlılığını sağlayamama açısından olumsuz yanlarının da olabileceğini unutmamalıyız.
Geleneksel programlama dillerindeki kitaplıklarla ilgili ortak bir sorun vardır - örneğin bir kitaplık kullanırsanız kod doğru çalışır, ancak birden fazla kitaplık kullanmaya çalışırsanız bunların birbirleriyle doğru şekilde etkileşime gireceğinin garantisi yoktur. . Ayrıca, geleneksel programlama dillerinde - tam teşekküllü bir bilgi işlem dilinin aksine - temel yapıları dışında herhangi bir işlev veya veri türü için tutarlı yerleşik temsillerin varlığını garanti etmenin bir yolu yoktur. Ancak aslında sorun ilk bakışta göründüğünden daha da büyük: Eğer büyük ölçekli bir işlevsellik dikeyi inşa ediliyorsa, o zaman Wolfram diline koyduğumuz merkezi proje programlamanın büyük maliyetleri olmadan bunu yapmak imkansızdır. tutarlılık elde edin. Bu nedenle tüm yazılım modüllerinin her zaman birlikte doğru şekilde çalışması önemlidir.
Dolayısıyla Wolfram özellik deposunun ardındaki fikir, tutarlı modüller olarak geliştirilmesi daha kolay olan bireysel özellikler aracılığıyla dile nispeten küçük kod parçaları halinde basit uzantılar ekleyerek yukarıda özetlenen sorunu önlemektir. Bununla birlikte, bireysel işlevler kullanılarak kullanışlı hale getirilemeyen programlama özellikleri vardır (ve şirketimiz, büyük ölçekli yazılım paketlerinin uygulanmasına yardımcı olmak için yakın gelecekte optimize edilmiş bir programlama algoritması yayınlamayı planlamaktadır). Ancak Wolfram Dilinde halihazırda yerleşik olan işlevlere dayalı olarak, bireysel işlevlere dayalı olarak uygulanan birçok programlama olanağı vardır. Buradaki fikir, nispeten az programlama çabasıyla, yeterli tasarım tutarlılığı sağlayacak, birbirleriyle iyi uyum sağlayacak bir dizi yeni ve çok kullanışlı fonksiyon oluşturmanın mümkün olmasıdır. gelecekte dilde kolaylıkla ve yaygın olarak kullanılabilecektir.
Bu yaklaşım elbette bir uzlaşmadır. Daha büyük bir paket uygulamaya konulsaydı, son derece güçlü ve kullanışlı olacak tamamen yeni bir işlevsellik dünyası hayal edilebilirdi. Her şeye uyum sağlayacak yeni işlevsellik edinme ihtiyacı varsa ancak projeyi geliştirmek için çok fazla çaba harcamaya istekli değilseniz, bu ne yazık ki projenizin kapsamının daralmasına yol açabilir. Wolfram özellik deposunun arkasındaki fikir, bir projenin tanımlayıcı bir kısmına işlevsellik sağlamaktır; bu yaklaşım, bir programlama projesinde iyi bir tutarlılığın korunmasını kolaylaştırırken aynı zamanda güçlü bir işlevsellik katacaktır.
İşlev deposuna özel işlevler eklemeye yardımcı olun
Ekibimiz, kullanıcıların Wolfram veri havuzu özelliklerine katkıda bulunmalarını kolaylaştırmak için çok çalıştı. Masaüstünde (zaten
Gerçekleştirmeniz gereken iki ana adım vardır: birincisi, işlevinizin kodunu yazın ve ikincisi, işlevinizin nasıl çalışması gerektiğini gösteren belgeleri yazın.
Yapmanız gerekenlerin bir örneğini görmek için üstteki "Örneği Aç" düğmesini tıklayın:
Temel olarak Wolfram Dilinde yerleşik bir işleve benzer bir şey oluşturmaya çalışıyorsunuz. Yerleşik bir işlevden çok daha spesifik bir şey yapabilmesi dışında. Aynı zamanda bütünlüğü ve güvenilirliği ile ilgili beklentiler çok daha düşük olacaktır.
İşlevinize Wolfram Dilinin işlev adlandırma kurallarına uygun bir ad vermeniz gerekir. Ek olarak, dilin yerleşik işlevlerine benzer şekilde, işleviniz için belgeler geliştirmeniz gerekecektir. Bu konu hakkında daha sonra daha detaylı konuşacağım. Şimdilik, tanım not defteri dosyasının üst kısmındaki düğme satırında bir düğme olduğuna dikkat edin
Her şeyin doğru bir şekilde doldurulduğundan ve hazır olduğunuzdan emin olduğunuzda “Kontrol Et” butonuna tıklayın. Henüz tüm detayları çözememeniz tamamen normal. Böylece "Kontrol Et" işlevi otomatik olarak çalışacak ve birçok stil ve tutarlılık kontrolü yapacaktır. Çoğu zaman sizden düzeltmeleri hemen onaylamanızı ve kabul etmenizi ister (Örneğin: "Bu satır iki nokta üst üste işaretiyle bitmelidir" ve iki nokta üst üste girmenizi ister). Bazen sizden bir şeyi kendiniz eklemenizi veya değiştirmenizi isteyecektir. Kontrol düğmesinin otomatik işlevselliğine sürekli olarak yeni özellikler ekleyeceğiz, ancak temel olarak amacı, özellik deposuna gönderdiğiniz her şeyin mümkün olduğunca çok sayıda stil yönergesine yakından uymasını sağlamaktır.
Yani "Kontrol Et" i çalıştırdıktan sonra "Önizleme"yi kullanabilirsiniz. "Önizleme", işleviniz için tanımladığınız dokümantasyon sayfasının bir önizlemesini oluşturur. Bilgisayarınızda oluşturulan bir dosya veya bulut depolama alanında bulunan bir dosya için de önizleme oluşturabilirsiniz. Herhangi bir nedenle önizlemede gördüklerinizden memnun kalmazsanız, geri dönüp gerekli düzeltmeleri yapın ve ardından Önizleme düğmesine tekrar tıklayın.
Artık işlevinizi depoya göndermeye hazırsınız. Dağıt düğmesi size dört seçenek sunar:
Bu adımdaki önemli şey, fonksiyonunuzu Wolfram fonksiyon deposuna göndererek herkesin kullanımına sunabilmenizdir. Aynı zamanda fonksiyonunuzu sınırlı sayıda kullanıcıya da yerleştirebilirsiniz. Örneğin, bilgisayarınızda yerel olarak barındırılan bir işlev oluşturabilirsiniz, böylece söz konusu bilgisayarı kullandığınızda bu işlev kullanılabilir hale gelebilir. Veya bunu yayınlayabilirsiniz
Diyelim ki fonksiyonunuzu gerçekten Wolfram fonksiyon bilgi tabanına göndermek istiyorsunuz. Bunu yapmak için depoya “Gönder” düğmesini tıklayın. Peki şu anda ne oluyor? Başvurunuz, özel küratör ekibimiz tarafından incelenmek ve onaylanmak üzere hemen sıraya alınır.
Başvurunuz onay sürecinde ilerledikçe (genellikle birkaç gün sürer), durumuyla ilgili iletişimler ve muhtemelen gelecekte kullanım önerileri alacaksınız. Ancak özelliğiniz onaylandıktan sonra hemen Wolfram Özellik Havuzunda yayınlanacak ve herkesin kullanımına açık olacaktır. (Ve bu şu şekilde görünecektir:
Depoda neler olmalı?
Şirketimizin bütünlük, güvenilirlik ve genel kalite açısından çok yüksek standartlara sahip olduğu ve son 6000 yılı aşkın süredir Wolfram diline halihazırda yerleştirdiğimiz 30'den fazla işlevin hepsinin yukarıdaki gereksinimleri karşıladığı unutulmamalıdır. Wolfram İşlev Havuzunun amacı, mümkün olduğu kadar çok daha hafif işlevler (yani daha yüksek performanslı işlevler) eklemek için Wolfram Dilinde zaten mevcut olan tüm yapı ve işlevleri kullanmaktır.
Tabii ki, Wolfram işlev deposundaki işlevler Wolfram Dilinin tasarım ilkelerine uygun olmalıdır; böylece diğer işlevlerle ve kullanıcıların işlevin nasıl düzgün çalışması gerektiğine ilişkin beklentileriyle tam olarak etkileşime girebilirler. Ancak işlevlerin eşit derecede eksiksiz veya güvenilir olması gerekmez.
Wolfram dilinin yerleşik fonksiyonlarında, programlama fonksiyonlarını mümkün olduğunca genel hale getirmek için çok çalışıyoruz. Söylenen o ki, Wolfram işlev deposunda olduğunuzda, burada çok özel ama kullanışlı bazı durumları ele alan bir işlevin bulunmasında yanlış bir şey yoktur. Örneğin, fonksiyon
Yerleşik işlevlerle ilgili bir diğer nokta da şirketimizin tüm alışılmadık durumları ele almak, yanlış girişi doğru şekilde ele almak vb. için her türlü çabayı göstermesidir. Bir işlev deposunda, bir sorunun çözümüne ilişkin ana durumları ele alan ve diğerlerini göz ardı eden özel bir işlevin bulunması tamamen normaldir.
Açık olan nokta, daha fazlasını yapan ve daha iyi yapan işlevlere sahip olmanın daha iyi olduğu, ancak bir işlev deposu için optimizasyonun - Wolfram dilinin yerleşik işlevlerinin aksine - daha fazla işlevin daha fazla işlevle birlikte paketlenmesi gerektiğidir. Her bir spesifik fonksiyonun uygulama süreçleri.
Şimdi bir depodaki test fonksiyonlarının bir örneğine bakalım. Bu tür işlevlere ilişkin tutarlılık beklentileri doğal olarak yerleşik dil işlevlerine göre çok daha düşüktür. Bu, özellikle işlevlerin API'ler gibi harici kaynaklara bağlı olduğu durumlarda geçerlidir; doğrulama algoritmaları içerisinde otomatik olarak gerçekleşen tutarlı testlerin sürekli olarak yapılması önemlidir. Nb dosyasında, tanımları açıkça belirtebilir (Ek Bilgiler bölümünde) ve giriş ve çıkış dizeleri veya türdeki tam karakter nesneleri tarafından tanımlanan sayıda test belirleyebilirsiniz.
Sonuç olarak, işlev deposunda bir takım uygulama karmaşıklıkları olacaktır. Bazıları yalnızca tek bir kod satırından oluşacak, bazıları ise muhtemelen birçok yardımcı işlevin kullanıldığı binlerce veya onbinlerce satırdan oluşacaktır. Tanımlanması çok az kod gerektiren bir işlevi ne zaman eklemeye değer? Temel olarak, eğer bir fonksiyon için varsa
Bir işlev deposunun temel amacı (adından da anlaşılacağı gibi) dile yeni özellikler kazandırmaktır. Yeni veriler eklemek istiyorsanız veya
Aslında iki yol var. İşlev deposundaki yeni işlevlerde kullanılacak yeni bir nesne türünü tanıtmak isteyebilirsiniz. Ve bu durumda, her zaman sembolik gösterimini yazabilir ve bunu bir işlev deposuna işlevler girerken veya çıktısını alırken kullanabilirsiniz.
Peki ya bir nesneyi temsil etmek ve ardından Wolfram Dili'ndeki mevcut işlevler aracılığıyla onunla çalışmak istediğinizi tanımlamak istiyorsanız? Wolfram Dili bunun için her zaman hafif bir mekanizmaya sahiptir.
Peki bir işlev deposundaki işlev kodunda ne olabilir?
Wolfram özellik deposunun tüm kodları Wolfram'da mı yazılmalıdır? Elbette harici API'nin içindeki kodun, dil kodunu bile yapmayan Wolfram dilinde yazılmaması gerekir. Aslında, hemen hemen herhangi bir harici dilde veya kitaplıkta bir işlev bulursanız, onu Wolfram işlev deposunda kullanmanıza olanak tanıyan bir sarmalayıcı oluşturabilirsiniz. (Genellikle bunun için yerleşik işlevleri kullanmalısınız.
Peki bunu yapmanın amacı nedir? Temel olarak bu, entegre Wolfram Dil sisteminin tamamını ve onun tüm birleşik yazılım yeteneklerini kullanmanıza olanak tanır. Temel uygulamayı harici bir kitaplıktan veya dilden edinirseniz, Wolfram Dilinin zengin sembolik yapısını kullanarak kullanıcıların önceden uygulanmış herhangi bir işlevi kolayca kullanmasına olanak tanıyan kullanışlı bir üst düzey işlev oluşturabilirsiniz. En azından, yükleme kitaplıkları vb.'nin tüm yapı taşlarının mevcut olduğu ideal bir dünyada bu mümkün olmalıdır; bu durumda bunlar Wolfram Dili tarafından otomatik olarak işlenir. (Uygulamada sorunlar olabileceği unutulmamalıdır.
Bu arada, tipik dış kitaplıklara ilk baktığınızda, yalnızca birkaç işlevle anlatılamayacak kadar karmaşık görünürler, ancak çoğu durumda karmaşıklığın büyük bir kısmı, kitaplık için gereken altyapının ve tüm işlevlerin oluşturulmasından kaynaklanır. destekleyin. Bununla birlikte, Wolfram Dili kullanıldığında, altyapı genellikle zaten paketlerin içine yerleştirilmiştir ve bu nedenle tüm bu destek işlevlerinin ayrıntılı olarak ortaya çıkarılmasına gerek yoktur; yalnızca kitaplıktaki "en üstteki" uygulamaya özel işlevler için işlevler oluşturulur. .
Bilgi tabanının "Ekosistem"i
Düzenli olarak kullandığınız işlevleri yazdıysanız bunları Wolfram İşlev Havuzuna gönderin! Bundan daha fazlası çıkmazsa (dil gelişimi), o zaman bile işlevleri kişisel kullanım için kullanmanız sizin için çok daha uygun olacaktır. Ancak, işlevleri düzenli olarak kullanırsanız belki diğer kullanıcıların da bunları yararlı bulacağını varsaymak mantıklı olacaktır.
Doğal olarak, işlevlerinizi paylaşamadığınız veya paylaşmak istemediğiniz veya özel bilgi kaynaklarına erişim elde ettiğiniz bir durumda kendinizi bulabilirsiniz. Bu gibi durumlarda bile işlevleri kendi bulut hesabınızda kolayca dağıtabilirsiniz,
Wolfram işlev deposuna gönderdiğiniz işlevlerin mükemmel olması gerekmez; sadece faydalı olmaları gerekiyor. Bu biraz klasik Unix belgelerindeki "Hatalar" bölümüne benzer - "Tanımlar Bölümü"nde, işleviniz hakkında zaten bildiğiniz sınırlamaları, sorunları vb. tanımlayabileceğiniz bir "Yazarın Notları" bölümü vardır. Ayrıca özelliğinizi veri havuzuna gönderdiğinizde, özel bir küratör ekibi tarafından okunacak gönderim notları ekleyebilirsiniz.
Bir özellik yayınlandıktan sonra sayfasının alt kısmında her zaman iki bağlantı bulunur: "
Bazen Wolfram işlev deposundaki yerleşik işlevler gibi işlevleri, kodlarına bakmadan kullanmak istersiniz. Ancak içine bir göz atmak isterseniz üst kısımda her zaman bir Not Defteri düğmesi bulunur. Üzerine tıkladığınızda, özellik deposuna gönderilen orijinal tanım not defterinin kendi kopyasını alırsınız. Bazen ihtiyaçlarınıza örnek olarak kullanabilirsiniz. Aynı zamanda bu fonksiyon üzerinde kendi modifikasyonunuzu da geliştirebilirsiniz. Bilgisayarınızdaki depodan bulduğunuz bu işlevleri veya yaprak biti bulut depolama hesabınızdaki bu işlevleri, belki de orijinal işlevin geliştirilmiş, genişletilmiş bir sürümü olarak işlev bilgi tabanına göndermek isteyebilirsiniz.
Gelecekte, özellik depoları için Git tarzı çatallamayı desteklemeyi planlıyoruz, ancak şimdilik bunu basit tutmaya çalışıyoruz ve her özelliğin dilde yerleşik olarak yalnızca bir kabul edilen sürümüne sahibiz. Çoğu zaman (geliştiriciler geliştirdikleri özellikleri sürdürmekten vazgeçmedikçe ve kullanıcı gönderimlerine yanıt vermedikçe), özelliğin orijinal yazarı, özelliğin güncellemelerinin kontrolünü ele alır ve yeni sürümler gönderir; bunlar daha sonra incelenir ve eğer inceleme sürecini geçerlerse dilinde yayınlandı.
Geliştirilen fonksiyonların “versiyonlama”sının nasıl çalıştığı sorusunu ele alalım. Şu anda, işlev deposundaki bir işlevi kullandığınızda, bu işlevin tanımı bilgisayarınızda (veya bulut kullanıyorsanız bulut hesabınızda) kalıcı olarak depolanacaktır. Bir özelliğin yeni bir sürümü mevcutsa, onu bir sonraki kullanımınızda bunu size bildiren bir mesaj alacaksınız. İşlevi yeni bir sürüme güncellemek istiyorsanız bunu şu komutu kullanarak yapabilirsiniz:
Wolfram İşlev Havuzunun güzel yanlarından biri, herhangi bir Wolfram Dil programının, herhangi bir yerde, buradaki işlevleri kullanabilmesidir. Bir program not defterinde görünüyorsa, depo işlevlerini, okunması kolay "işlev ikili nesnesi" işlevleri olarak (belki uygun bir sürüm kümesiyle) biçimlendirmek genellikle uygundur.
Metin kullanarak işlev deposundaki herhangi bir işleve her zaman erişebilirsiniz.
Nasıl çalışır?
Wolfram deposundaki işlevler içinde bu, tam olarak aynısını kullanarak mümkündür.
Consider
İçeride işlevi kullanarak bazı bilgileri görebilirsiniz.
Kaynak işlevinin ayarlanması nasıl çalışır? En basiti tamamen yerel bir durumdur. Aşağıda bir işlevi (bu durumda yalnızca saf bir işlev) alan ve onu belirli bir program oturumu için bir kaynak işlevi olarak tanımlayan bir örnek verilmiştir:
Tanımı yaptıktan sonra kaynak fonksiyonunu kullanabilirsiniz:
Bu işlev bloğunda siyah bir simge bulunduğunu unutmayın . Bu, BLOB işlevinin geçerli oturum için tanımlanan bellek içi kaynak işlevini ifade ettiği anlamına gelir. Bilgisayarınızda veya bulut hesabınızda kalıcı olarak depolanan bir kaynak özelliğinin gri simgesi vardır . Ve Wolfram Özellik Havuzunda resmi bir kaynak özelliği için turuncu bir simge var .
Peki Tanım Not Defteri'ndeki Genişlet menüsünü kullandığınızda ne olur? Öncelikle not defterindeki tüm tanımları alır ve onlardan sembolik bir anlam oluşturur.
Bir işlevin bilgisayarınızdaki bir depodan yerel dağıtımı şu komut kullanılarak gerçekleştirilir:
Bir İşlev Havuzu için Gönder düğmesini tıklarsanız altında ne olur?
Varsayılan olarak gönderimler Wolfram Kimliğinizle ilişkili ad altında yapılır. Ancak bir geliştirme ekibi veya kuruluş adına başvuruda bulunuyorsanız,
İşlevlerinizden herhangi birini işlev bilgi tabanına gönderdikten sonra incelenmek üzere sıraya alınacaktır. Yanıt olarak yorumlar alırsanız, bunlar genellikle ek "yorum hücreleri" eklenmiş bir metin dosyası biçiminde olacaktır. Başvurunuzun durumunu her zaman ziyaret ederek kontrol edebilirsiniz.
İş yerinde bazı incelikler
İlk bakışta, bir tanım not defterini alıp onu bir işlev deposuna kelimesi kelimesine koyabiliyormuşsunuz gibi görünebilir, ancak aslında işin içinde pek çok incelik vardır ve bunları yönetmek, oldukça karmaşık bir meta programlama yapmayı, sembolik işlemeyi yönetmeyi gerektirir. işlevi tanımlayan kod olarak ve Not Defteri'nin kendisi tanımlanır. Bunların çoğu dahili olarak, perde arkasında gerçekleşir, ancak özellik bilgi tabanına katkıda bulunacaksanız, bunun anlamaya değer bazı sonuçları olabilir.
İlk acil incelik: Tanım Defterini doldurduğunuzda, gibi bir ad kullanarak her yerde işlevinize basitçe başvurabilirsiniz. İşlevimWolfram Dilinde bir işlev için normal bir ad gibi görünen ancak işlev deposu belgeleri için bu değiştirilmiştir.
İkinci incelik: Tanım Not Defteri'nden bir kaynak işlevi oluşturduğunuzda, işlev tanımına dahil olan tüm bağımlılıkların yakalanması ve açıkça dahil edilmesi gerekir. Ancak tanımların modüler kalmasını sağlamak için her şeyi benzersiz bir şekilde yerleştirmeniz gerekir.
Genellikle bu ad alanını yapılandırmak için kullanılan kodun hiçbir izini görmezsiniz. Ancak herhangi bir nedenle fonksiyonunuzun içinde az çalıştırılan bir sembolü çağırırsanız, o zaman bu sembolün fonksiyonun iç bağlamında olduğunu göreceksiniz. Ancak Tanım Not Defteri işlenirken en azından fonksiyonun kendisine karşılık gelen sembol
İşlev deposu yeni işlevleri tanımlamak içindir. Ve bu işlevlerin seçenekleri olabilir. Genellikle bu parametreler (örneğin,
Çoğu işlev, her çağrıldıklarında yapmaları gereken şeyi yapar, ancak bazı işlevlerin belirli bir oturumda çalıştırılmadan önce başlatılması gerekir - ve bu sorunu çözmek için Tanım bölümünde bir "Başlatma" bölümü vardır.
Bir depodaki işlevler, halihazırda depoda bulunan diğer işlevleri kullanabilir; birbirine başvuran iki (veya daha fazla) işlevi içeren bir işlev deposuna yönelik tanımları ayarlamak için, bunları program oturumunuza dağıtmanız gerekir; onlar gibi referans
Kalkınma beklentileri. Depo gerçekten büyüdüğünde ne olmalı?
Bugün Wolfram Özellik Deposunu piyasaya sürüyoruz, ancak zamanla boyutunun ve işlevselliğinin önemli ölçüde artacağını ve geliştirme süreci büyüdükçe zaten ortaya çıkabileceğini öngördüğümüz çeşitli sorunların ortaya çıkacağını bekliyoruz.
İlk sorun, işlev adları ve bunların benzersizliğiyle ilgilidir. İşlev deposu, Wolfram Dilindeki yerleşik işlevler gibi, verilen herhangi bir işleve yalnızca adını belirterek başvurabileceğiniz şekilde tasarlanmıştır. Ancak bu kaçınılmaz olarak işlev adlarının depo genelinde küresel olarak benzersiz olması gerektiği anlamına gelir; böylece örneğin yalnızca bir tane olabilir.
Bu ilk başta büyük bir sorun gibi görünebilir, ancak bunun temelde internet etki alanları veya sosyal medya tanıtıcıları gibi şeylerle aynı sorun olduğunu fark etmeye değer. Ve gerçek şu ki, sistemin sadece bir kayıt memuruna sahip olması gerekiyor ve bu, şirketimizin Wolfram işlevi bilgi tabanı için gerçekleştireceği rollerden biri. (Bir veri havuzunun özel sürümleri için, bunların kayıt memurları yöneticiler olabilir.) Elbette, bir İnternet alanı, üzerinde hiçbir şey olmadan kaydedilebilir, ancak bir işlev deposunda, bir işlev adı, ancak gerçek bir tanım varsa kaydedilebilir. işlev.
Wolfram işlevi bilgi tabanını yönetmedeki rolümüzün bir kısmı, bir işlev için seçilen adın, işlevin tanımı göz önüne alındığında mantıksal olmasını ve Wolfram Dili adlandırma kurallarına uygun olmasını sağlamaktır. Wolfram Dilinde yerleşik işlevleri adlandırma konusunda 30 yılı aşkın deneyime sahibiz ve küratör ekibimiz bu deneyimi işlev deposuna da taşıyacak. Elbette her zaman istisnalar vardır. Örneğin, bazı işlevler için kısa bir ad kullanmak tercih edilebilir gibi görünebilir, ancak daha uzun, daha spesifik bir adla "savunmak" daha iyidir çünkü gelecekte benzer bir işlev adı oluşturmak isteyen biriyle karşılaşma olasılığınız daha düşüktür. .
(Belirsizliği gidermek için yalnızca bazı üye etiketlerinin eklenmesinin amaçlanan etkiye sahip olmayacağı burada belirtilmelidir. Çünkü her zaman bir etiket atama konusunda ısrar etmediğiniz sürece, herhangi bir işlev için varsayılan bir etiket tanımlamanız ve ayrıca yazar etiketlerini ayırmanız gerekecektir. , bu da yine küresel koordinasyonu gerektirecektir.)
Wolfram fonksiyonlarının bilgi tabanı büyüdükçe ortaya çıkması muhtemel sorunlardan biri de sistemin sağladığı fonksiyonların keşfedilebilirliğidir.
Wolfram Dilindeki yerleşik işlevler için, aşağıdakiler tarafından sağlanan algılama katmanı adı verilen bir katman vardır:
Wolfram işlev deposu, içindeki herhangi bir işlevin her zaman çalışacağı kalıcı bir işlev deposu olarak yapılandırılmıştır. Elbette özelliklerin yeni sürümleri mevcut olabilir ve bazı özelliklerin elbette zaman içinde geçerliliğini yitirmesini bekliyoruz. İşlevler, programlarda kullanıldıkları takdirde çalışacaktır ancak belge sayfaları yeni, daha gelişmiş işlevlere bağlantı verecektir.
Wolfram Özellik Havuzu, yeni özellikleri hızla keşfetmenize ve Wolfram dilini kullanmanın yeni yollarını öğrenmenize yardımcı olmak için tasarlanmıştır. Özellik deposunda araştırılanlardan bazılarının eninde sonunda temel Wolfram Dilinin yerleşik parçaları haline gelmesinin anlamlı olacağı konusunda oldukça iyimseriz. Son on yılda benzer bir set yaşadık
Burada en önemli şey, fonksiyon deposundaki bir fonksiyonun, her kullanıcının şu anda kullanabileceği bir şey olmasıdır. Bir ana dil özelliğinin çok daha iyi ve daha performanslı olması mümkündür, ancak bir özellik deposu, kullanıcıların tüm yeni özelliklere hemen erişmesine olanak tanır. Ve en önemlisi bu konsept herkesin istediği yeni özellikleri eklemesine olanak tanıyor.
Wolfram dilinin tarihinin daha önceki dönemlerinde bu fikir bu kadar işe yaramayabilirdi, ancak bu aşamada dil için o kadar çok çaba harcanıyor ve dil tasarımı ilkelerine ilişkin o kadar derin bir anlayış var ki, artık çok basit görünüyor. Geniş bir kullanıcı topluluğunun, tasarım tutarlılığını koruyacak ve bunları geniş bir kullanıcı kitlesine faydalı kılacak özellikler eklemesi mümkündür.
Wolfram Language kullanıcı topluluğunda inanılmaz bir yetenek(?) ruhu var. (Tabii ki bu topluluk, çeşitli alanlarda önde gelen Ar-Ge çalışanlarını içermektedir.) Wolfram Özellik Havuzunun bu yetenek ruhunu ortaya çıkarmak ve yaymak için etkili bir platform sağlayacağını umuyorum. Wolfram dili hesaplama paradigmasının uygulanabileceği alanı önemli ölçüde genişletecek bir şeyi ancak birlikte yaratabiliriz.
30 yıldan fazla bir sürede Wolfram diliyle uzun bir yol kat ettik. Şimdi birlikte daha da ileri gidelim. Wolfram dilinin dünya çapındaki tüm saygın kullanıcılarının bunun için bir platform olarak özellik deposunu ve ayrıca Geliştiriciler için Ücretsiz Wolfram Motoru gibi yeni yazılım projesini kullanmalarını şiddetle tavsiye ediyorum.
Kaynak: habr.com